Basic Reverse Engineering with White ScorpionBasic Reverse Engineering mit weißer Scorpion
For this "tutorial" we will use a real program called PDF2Word. Aus diesem "Tutorial" benutzen wir ein echtes Programm namens PDF2Word. I stumbled upon this program when trying to convert a pdf document to a word document (duh..). Ich stolperte auf dieses Programm, wenn es um die Konvertierung eines PDF-Dokuments zu einem Word-Dokument (duh..).
The funny thing on this program is that it costs $39.95 and that it is released under the GPL. Der Spass an der Sache zu diesem Programm ist, dass es kostet $ 39,95 und, dass es unter der GPL veröffentlicht.
Let's start shall we? Beginnen wir sind wir?
1: Obtain a copy of the program, We will use version 1.6 in this tutorial (You'll need1: Besorgen Sie sich eine Kopie des Programms, werden wir nutzen, Version 1.6 in diesem Tutorial (Sie müssen
Google to get this version).Google, um diese Version).
2: Obtain a copy of ollydbg at http://www.ollydbg.de2: Besorgen Sie sich eine Kopie der ollydbg auf http://www.ollydbg.de
Start PDF2Word and you will see a screen with title "Please register .." Start PDF2Word und Sie werden sehen, ein Bildschirm mit dem Titel "Bitte registrieren Sie sich .." Type in an email address and a bogus registration key and hit OK. Geben Sie in einer E-Mail-Adresse und ein Schein-Registrierungsschlüssel und klicken Sie auf OK. Write down the error message you get since we will need it later on: Notieren Sie die Fehlermeldung erhalten Sie, da wir ihn später benötigen werden: "Series number error, please check it and try again.""Serien-Nr Fehler, bitte überprüfen Sie sie und versuchen Sie es erneut."
Now close pdf2word and start Ollydbg. Jetzt schließen pdf2word und starten Ollydbg.From within ollydbg go to file, open and browse to Von innerhalb ollydbg gehen Sie zu Datei, öffnen und durchsuchen zu C:Program FilesPDF2Word v1.6 and select pdf2rtf.exe .C: Program FilesPDF2Word v1.6 und wählen Sie pdf2rtf.exe.
Once the program is loaded right-click somewhere in the code table and select Search for Sobald das Programm geladen ist der rechten Maustaste irgendwo in der Code-Tabelle und wählen Sie Suche nach Then select All referenced text strings". Dann wählen Sie Alle referenzierten Text-Strings ". A new window will open with all text strings in the program.Ein neues Fenster öffnet sich mit allen Text-Strings in das Programm.Scroll up and right-click once more.Blättern Sie nach oben und nach rechts-klicken Sie einmal mehr. Now select [i]Search for text and put in the errorstring you had earlier in the program:Wählen Sie nun [i] Suche nach Text und in die ErrorString Sie hatte zuvor in das Programm: "Series number error, please check it and try again." ."Serien-Nr Fehler, bitte überprüfen Sie sie und versuchen Sie es erneut.". deselect "Case Sensitive" and press OK. deaktivieren Sie "Groß-/Kleinschreibung beachten", und drücken Sie OK.
You will see the following line highlighted: Sie werden sehen, die folgende Zeile markiert: CODE : CODE:
00429F6F | PUSH pdf2rtf.00468270 | ASCII "Series number error, please check it and try again."00429F6F | PUSH pdf2rtf.00468270 | ASCII "Serien-Nr Fehler, bitte überprüfen Sie sie und versuchen Sie es erneut."
Now press <F2> to put a breakpoint on it. Jetzt drücken Sie <F2>, um einen Haltepunkt auf sie.Directly above you will find some other strings Direkt oberhalb finden Sie einige andere Saiten which might be of interest as well so put a breakpoint on them to. , die vielleicht von Interesse ist und so einen Haltepunkt setzen sie auf.These are: Diese sind: "Thank you registered" and "Thank you registered VeryPDF PDF2Word v1.6.""Vielen Dank, dass Sie registriert" und "Vielen Dank, dass Sie registriert VeryPDF PDF2Word v1.6."
Now double click on one of the lines and press <F9> to start the program. Nun klicken Sie doppelt auf eine der Zeilen und drücken Sie <F9> um das Programm zu starten.
The registration window will come up again, so now put in an email address, a dummy registration-key Die Registrierung Fenster kommen wieder, so dass nun in einer E-Mail-Adresse, ein Dummy-Registrierung-Schlüssel and press OK. und drücken Sie OK.
Go back to Olly and you will see the following line highlighted: Gehen Sie zurück zu Olly und Sie werden sehen, die folgende Zeile markiert: CODE : CODE:
00429F6F .00429F6F.68 70824600 PUSH pdf2rtf.00468270 ; |Text = "Series number error, please check it and try again."68 70824600 PUSH pdf2rtf.00468270; | Text = "Serien-Nr Fehler, bitte überprüfen Sie sie und versuchen Sie es erneut."
This is our error message again and the program has stopped right before displaying it. Dies ist unsere Fehlermeldung erneut angezeigt und das Programm beendet wurde, bevor es direkt anzuzeigen. You can see this error message is part of a [color=red]MessageBoxA[/color] call, this is the Sie sehen diese Fehlermeldung ist ein Teil der [color = red] MessageBoxA [/ color] rufen, ist dies die API responsible for displaying the Message. API, die für die Anzeige der Nachricht.If you look a couple of lines earlier you will Wenn Sie sich ein paar Zeilen früher Sie wird see another MessageBoxA call where instead of our errormessage now the siehe einem anderen MessageBoxA Anruf, wo anstelle von unserer errorMessage jetzt die message "Thank you registered VeryPDF PDF2Word v1.6." is located.Meldung "Vielen Dank, dass Sie registriert VeryPDF PDF2Word v1.6." befindet. This means that if we have the correct serial it will display the registered message, and if Dies bedeutet, dass, wenn wir haben die richtige serielle es wird die Meldung registriert, und wenn we don't we will get the error. wir nicht bekommen wir den Fehler. The program will need to decide if your serial is correct before it can display any of these Das Programm muss zu entscheiden, ob Ihre Seriennummer korrekt ist, bevor sie können jede dieser messages. Nachrichten.The code to do so is usually located close to the messages so scroll up a bit until Der Code zu tun, so ist in der Regel in der Nähe der Nachrichten so navigieren Sie nach oben ein bisschen, bis you see a piece of code containing a JNE,JE,JNZ or JZ. sehen Sie ein Stück Code, der eine JNE, JE, JNZ oder JZ.These are jumps that occur when a specific Dies sind Sprünge, die auftreten, wenn eine bestimmte event is met. Fall erfüllt ist. Usually the event is tested in the code directly in front of it. In der Regel der Fall ist, getestet in den Code direkt davor. In this case you should end up at the following lines: In diesem Fall sollten Sie am Ende auf die folgenden Zeilen: CODE : CODE:
00429F2E .00429F2E.85C0 TEST EAX,EAX85C0 TEST EAX, EAX 00429F30 .00429F30.74 39 JE SHORT pdf2rtf.00429F6B74 39 JE SHORT pdf2rtf.00429F6B
As you can see EAX is tested against itself which in this case will jump to 00429F6B if Wie Sie sehen können EAX getestet wird gegen sich selbst, die in diesem Fall springt auf, wenn 00429F6B EAX has the value 0. EAX hat den Wert 0. if we trace the jump we will see that it will jump over the registered message and end up wenn wir die Spur springen wir werden sehen, dass es springt über die Meldung registriert und bis Ende right before the error message. Recht vor die Fehlermeldung.This means that if EAX = 0 we will get the error message and Dies bedeutet, dass, wenn EAX = 0 erhalten wir die Fehlermeldung und our serial is wrong. unsere serielle ist falsch.
At this point we could remove the JE SHORT pdf2rtf.00429F6B code and fill it with An diesem Punkt könnten wir entfernen Sie die JE SHORT pdf2rtf.00429F6B-Code und füllen Sie es mit NOP so we will always get the correct message since the jump is never made, but that won't help NOP so werden wir immer die richtige Nachricht, da der Sprung ist nie gemacht, aber das wird nicht helfen here cause if you restart the program it will still ask you to register. hier dazu führen, dass, wenn Sie das Programm neu starten, wird es noch fragen Sie sich zu registrieren.
So we need to continue our search. Also müssen wir weiterhin unsere Suche.We need to figure out where EAX is getting it's value from. Wir brauchen, um herauszufinden, wo EAX wird es den Wert aus. 2 lines above TEST EAX,EAX we see 2 Zeilen oben TEST EAX, EAX wir sehen, CODE : CODE:
This is a call to a function somewhere else in the program and you can bet your life it is this Dies ist ein Aufruf zu einer Funktion, irgendwo sonst in das Programm und Sie können wetten, Ihr Leben ist, ist es diese function that sets the EAX value. Funktion, die die EAX-Wert. And so we need to figure out what this function does. Und so brauchen wir, um herauszufinden, was diese Funktion tut.To do this we will put another breakpoint Gehen Sie hierzu werden wir einen anderen Haltepunkt at CALL pdf2rtf.00429720 by highlighting the line and press <F2>.an den CALL-pdf2rtf.00429720, indem Sie die Zeile und drücken Sie <F2>. Now we want to restart the program to make it break on the function call. Jetzt wollen wir das Programm neu starten, um sie brechen auf den Aufruf der Funktion aus.This is done by Dies geschieht durch pressing <CTRL>+<F2>. Drücken von Strg-Taste + <F2>.Select YES to the question asked (press left arrow and hit enter) and the program is restarted. Wählen Sie Ja, um die gestellte Frage (Pfeil nach links drücken und drücken Sie Enter) und das Programm neu gestartet wird. Now press <F9> again to let the program run. Jetzt drücken Sie <F9> erneut zu lassen das Programm laufen. You will see the registration box pop-up again, so put in an email address and a bogus serial and press OK. Sie werden sehen, die Registrierung Feld Pop-up wieder, so dass die in einer E-Mail-Adresse und eine gefälschte serielle und drücken Sie OK.
As you can see the program will break on the CALL pdf2rtf.00429720 line. Wie Sie sehen können, wird das Programm Pause auf der CALL-pdf2rtf.00429720 Linie. Now press <F7> to step into the call. Jetzt drücken Sie <F7> zu Schritt in den Anruf zu tätigen. The first 4 lines are not of interest to us so we will start analyzing the code from 00429725 . Die ersten 4 Zeilen sind nicht von Interesse für uns, damit wir beginnen, analysieren Sie den Code 00429725 aus. The code we have there is Der Code, den wir haben, gibt es CODE : CODE:
I've copied the entire block until the first check of the serial above to safe space, so refer Ich habe eine Kopie des gesamten Block bis zur ersten Überprüfung der seriellen oben auf einen sicheren Platz, so beziehen sich to above code in this explanation. oben in diesem Erklärung. [quote] 1st line --> move our entered serial to ESI 1. Zeile -> unsere eingegeben serielle zu ESI 2nd line --> not important 2. Zeile -> nicht wichtig 3rd line --> move the first byte (character) of our serial into AL 3. Zeile -> bewegen Sie die erste Byte (Zeichen) unserer seriellen in AL 4th line --> move the second byte (first+1) of our serial into CL 4. Zeile -> bewegen Sie den zweiten Byte (erste +1) unserer seriellen in CL 5th line --> move the 13th byte (first+E) of our serial into DL 5. Zeile -> bewegen Sie den 13. Byte (erste + E) unserer seriellen in DL 6th line --> move content of AL (first character of our serial) into [ESP+18] 6. Zeile -> verschiebt man den Inhalt von AL (erstes Zeichen unserer seriell) in [ESP +18] 7th line --> clear the contents of AL 7. Zeile -> klar den Inhalt der AL 8th line --> move the content of CL (second character) into [ESP+30] 8. Zeile -> bewegen Sie den Inhalt des CL (zweite Zeichen) in [ESP 30] 9th line --> move the 14th byte (first+F) of our serial into CL 9. Zeile -> bewegen Sie den 14. Byte (erste + F) unserer seriellen in CL 10th,11th,12th,13th line --> clear the contents of [ESP+19],[ESP+31],[ESP+25] & [ESP+D] since AL still is empty. 10., 11., 12., 13. Zeile -> klar den Inhalt von [ESP 19], [ESP 31], [ESP +25] & [ESP + D], da AL noch leer ist. 14th line --> move the third byte (first+2) of our serial into AL 14. Zeile -> bewegen Sie den dritten Byte (erste +2) unserer seriellen in AL 15th line --> compare content of AL with 0x24 (hex for the $ sign) 15. Zeile -> vergleichen Inhalt der AL mit 0x24 (hex für die $-Zeichen) 16th line --> move the 13th byte of our serial into [ESP+24] 16. Zeile -> bewegen Sie den 13. Byte unserer seriellen in [ESP 24] 17th line --> move the 14th byte of our serial into [ESP+C] 17. Zeile -> bewegen Sie den 14. Byte unserer seriellen in [ESP + C] 18th line --> Jump to 004297B0 if AL is not equal to 24 ($ sign). 18. Zeile -> Gehe zu 004297B0, wenn AL ist nicht gleich 24 ($-Zeichen). [/quote] [/ quote] If you trace the jump in the 18th line you will see that it jumps to the following code: Wenn Sie Trace der Sprung in die Linie 18. Sie werden sehen, dass es springt auf den folgenden Code ein: CODE : CODE:
004297B0 |> 5F POP EDI004297B0 |> 5F POP EDI 004297B1 |.004297B1 |.5E POP ESI5E POP ESI 004297B2 |.004297B2 |.33C0 XOR EAX,EAX33C0 XOR EAX, EAX 004297B4 |.004297B4 |.5D POP EBP5D POP EBP 004297B5 |.004297B5 |.83C4 30 ADD ESP,3083C4 30 ADD ESP, 30 004297B8 .004297B8.C3 RETNC3 RETN
Which means so much as restore values, set EAX to 0 and return from where we were called. Das bedeutet so viel wie Werte wiederherzustellen, setzen Sie EAX auf 0 und zurück, von wo aus wir wurden aufgerufen. If we let this happen then EAX will be 0 which will give us the error message. Lassen wir dies geschehen, dann wird EAX 0, die uns die Fehlermeldung.
So what do we know now from this code? Was wissen wir jetzt von dieser Code?
- AL should be equal to 0x24 or we will get the error message - AL sollte gleich 0x24 oder wir erhalten die Fehlermeldung - the program moves the third character of our serial into AL before comparing it to 0x24 - Das Programm bewegt sich das dritte Zeichen unserer seriellen in AL vor dem Vergleich mit 0x24 - the program moves the 14th byte of our serial into CL - Das Programm bewegt den 14. Byte unserer seriellen in CL
from above we can conclude that the third character of our serial should be a $ sign and von oben können wir schließen, dass das dritte Zeichen unserer seriellen sollte eine unterzeichnen und $ that our serial should be at least 14 characters long since the 14th character is moved. dass unsere serielle sollte mindestens 14 Zeichen lang sein seit dem 14. Charakter bewegt wird.
So our serial will be something like: ..$........... Also unsere serielle wird so etwas wie: ..$...........
It's time for the next piece of code: Es ist an der Zeit für die nächste Stück Code: CODE : CODE:
Let's analyze it: Wir analysieren sie: [quote] 1st line --> move the address of the function MSVCRT.atoi to EDI 1. Zeile -> bewegen Sie die Adresse der Funktion MSVCRT.atoi zu EDI atoi is a function which converts ASCII characters to integers (numbers).atoi ist eine Funktion, die konvertiert ASCII-Zeichen zu ganzen Zahlen (Zahlen). 2nd line --> put the 16th byte of our serial into EDI 2. Zeile -> das 16. Byte unserer seriellen in EDI 3rd line --> push our byte to the stack as an argument to atoi 3. Zeile -> Push unsere Byte an den Stack als Argument für atoi 4th line --> call atoi. 4. Zeile -> Aufruf atoi.the result will be in EAX Das Ergebnis wird in EAX 5th line --> move content of EAX into EBP 5. Zeile -> verschiebt man den Inhalt von EAX in EBP 6th line --> move the first byte of our serial into EAX 6. Zeile -> bewegen Sie den ersten Byte unserer seriellen in EAX 7th line --> push our byte to the stack as an argument to atoi 7. Zeile -> Push unsere Byte an den Stack als Argument für atoi 8th line --> call atoi. 8. Zeile -> Aufruf atoi.the result will be in EAX Das Ergebnis wird in EAX 9th line --> add EAX to EBP and store the result in EBP 9. Zeile -> add EAX zu EBP und speichere das Ergebnis in EBP 10th line --> not important to us 10. Zeile -> nicht wichtig für uns 11th line --> compare EBX with the value 0x0A (10) 11. Zeile -> EBX vergleichen mit dem Wert 0x0A (10) 12th line --> if EBX is not 0x0A then jump to 004297B0 (put 0 into EAX and return). 12. Zeile -> wenn EBX ist nicht 0x0A dann zum 004297B0 (Put 0 in EAX und zurück). [/quote] [/ quote] NOTE: You probably wonder how i figured out which byte is used to put into atoi, well hereHinweis: Sie wahrscheinlich frage mich, wie ich herausgefunden, die Byte wird verwendet, um in Betrieb genommen werden atoi, auch hier it is: I've put in serials multiple times with different digits as values and compared them to es ist: Ich habe in Reihen mehrere Male mit verschiedenen Stellen wie Werte und verglichen sie mit the output of atoi in EAX. die Ausgabe von atoi in EAX.This resulted in the corresponding bytes. Dies führte in den entsprechenden "Bytes".
What do we know from this code? Was wissen wir von dieser Code? - our 16th byte is put into EDI, this means that our serial must be at least 16 characters long - Unser 16. Byte wird in EDI, bedeutet dies, dass unsere serielle muss mindestens 16 Zeichen lang sein - the 16th byte is put into atoi, which means it much have a value between 0-9 - Dem 16. Byte wird in atoi, was bedeutet, dass es viel haben einen Wert zwischen 0-9 - the 1st byte is put into atoi as well, which also means it must have a value between 0-9 - 1. Byte wird in atoi als gut, was auch bedeutet, sie müssen einen Wert zwischen 0-9 - the value of our first byte is added to the value of our 16th byte and together they must be - Der Wert unserer ersten Byte wird der Wert unserer 16. Byte und gemeinsam müssen sie equal to 0xA (10). gleich 0xA (10).
So now we have the following serial: 1.$............9 So, jetzt haben wir die folgende laufende: 1 .$............ 9 as you can imagine the values of our 1st and 16th byte can be anything as long as they both wie Sie sich vorstellen können die Werte unserer 1. und 16. Byte kann alles, solange sie beide are digits and when added to each other are equal to 10 decimal. sind Ziffern und fügte hinzu, wenn zu jedem anderen sind in Höhe von 10 Nachkommastellen.
Time for the next piece of code: Zeit für die nächste Stück Code: CODE : CODE:
Let's analyze it: Wir analysieren sie: [quote] 1st line --> our 15th byte is put into ECX 1. Zeile -> unser 15. Byte wird in ECX 2nd line --> push our byte to the stack as an argument to atoi 2. Zeile -> Push unsere Byte an den Stack als Argument für atoi 3rd line --> call atoi. 3. Zeile -> Aufruf atoi.the result will be in EAX Das Ergebnis wird in EAX 4th line --> our 2nd byte is put into EDX 4. Zeile -> unsere 2. Byte wird in EDX 5th line --> move the result of atoi into EBP 5. Zeile -> move das Ergebnis der atoi in EBP 6th line --> push our 2nd byte to the stack as an argument to atoi 6. Zeile -> Push unserer 2. Byte auf den Stack als Argument für atoi 7th line --> call atoi. 7. Zeile -> Aufruf atoi.the result will be in EAX Das Ergebnis wird in EAX 8th line --> add the result of our 15th and 2nd byte together and store in EBP 8. Zeile -> add das Ergebnis unserer 15. und 2. Byte zusammen und speichern in EBP 9th line --> not important to us. 9. Zeile -> nicht wichtig für uns. 10th line --> check if our 15th byte + our 2nd byte added together is equal to 0x0A (10). 10. Zeile -> überprüfen, ob unsere 15. Byte + unsere 2. Byte addiert, ist gleich 0x0A (10). 11th line --> if not, then another jump to 004297B0 11. Zeile -> wenn nicht, dann einem anderen springen zu 004297B0 [/quote] [/ quote] As you can see this code is very similar to the codeblock before, so i won't explain it any Wie Sie sehen können, dieser Code ist sehr ähnlich wie die codeblock vor, also werde ich es nicht erklären alle further. weiter.
Now we have the following serial: 12$...........89 Jetzt haben wir folgende laufende: 12 $........... 89 We still need to analyze some code, but we're getting somewhere ;-) Wir müssen noch einige Code analysieren, aber wir sind immer irgendwo ;-)
Lets take a look at the final piece of code from this call: Ermöglicht einen Blick auf das letzte Stück des Codes von dieser Aufforderung: CODE : CODE:
00429798 |.00429798 |.807E 03 24 CMP BYTE PTR DS:[ESI+3],24807E 03 24 CMP BYTE PTR DS: [ESI 3], 24 0042979C |.0042979C |.75 12 JNZ SHORT pdf2rtf.004297B075 12 JNZ SHORT pdf2rtf.004297B0 0042979E |.0042979E |.8A4E 05 MOV CL,BYTE PTR DS:[ESI+5]8A4E 05 MOV CL, BYTE PTR DS: [ESI 5] 004297A1 |.004297A1 |.33C0 XOR EAX,EAX33C0 XOR EAX, EAX 004297A3 |.004297A3 |.80F9 23 CMP CL,2380F9 23 CMP CL, 23 004297A6 |.004297A6 |.5F POP EDI5F POP EDI 004297A7 |.004297A7 |.5E POP ESI5E POP ESI 004297A8 |.004297A8 |.5D POP EBP5D POP EBP 004297A9 |.004297A9 |.0F94C0 SETE AL0F94C0 SETE AL 004297AC |.004297AC |.83C4 30 ADD ESP,3083C4 30 ADD ESP, 30 004297AF |.004297AF |.C3 RETNC3 RETN
Analysis: [quote] 1st line --> since ESI still contains our serial, the 4th byte is now checked against value 0x24 1. Zeile -> seit ESI noch enthält unsere seriell, der 4. Byte wird nun anhand Wert 0x24 2nd line --> if not equal, then goto the famous 004297B0 2. Zeile -> wenn nicht gleich, dann gehe zu den berühmten 004297B0 3rd line --> move our 6th byte to CL 3. Zeile -> unsere 6. Byte an CL 4th line --> check if our 6th byte is equal to 0x23 (# sign) 4. Zeile -> überprüfen, ob unsere 6. Byte ist gleich 0x23 (#-Zeichen) 5th,6th,7th line --> not important 5., 6., 7. Zeile -> nicht wichtig 8th line --> sets the byte in AL to 1 if our check above is equal 8. Zeile -> setzt die Byte in AL auf 1, wenn unsere Check oben ist gleich 9th line --> not important 9. Zeile -> nicht wichtig 10th line --> return to where this call was called from. 10. Zeile -> zurück, wo dieser Aufforderung wurde aus. [/quote] [/ quote] What we see here is that our 4th byte is compared to 0x24 ($ sign remember?) as well and that Was wir hier sehen, ist, dass unsere 4. Byte ist im Vergleich zu 0x24 ($ Zeichen erinnern?) Als gut und dass the 6th byte is compared to 0x23 (the # sign). 6. Byte ist im Vergleich zu 0x23 (das #-Zeichen).
If that is correct then AL is set to 1 meaning EAX won't be 0 and so causing the program to Wenn das stimmt, dann AL ist auf 1 gesetzt Sinne EAX wird nicht 0 und so verursacht das Programm zu give the registered message. geben die Meldung registriert.
In short: Kurz gesagt: -check if 3th == $-Prüfen Sie, ob 3. == $ -check if 1st + 16th == 10-Prüfen Sie, ob der 1. + 16. == 10 -check if 15th + 2nd == 10-Prüfen Sie, ob der 15. + 2. == 10 -check if 4th == $-Prüfen Sie, ob 4. == $ -check if 6th == #-Prüfen Sie, ob der 6. == #
All other characters are of no importance to create a valid serial so our result will be: Alle anderen Zeichen sind nicht von Bedeutung, um eine gültige Seriennummer so unser Ergebnis wird sein:
12$$.#........8912 $$.#........ 89
You can fill in the remaining dots with anything you like and as long as the rules above are Sie können in den verbleibenden Punkte mit, was Sie wie und wie lange, wie die oben genannten Regeln sind correct you can change the 1th,2nd,15th and 16th byte as well. korrekte können Sie die 1., 2., 15. und 16. Byte als gut.
Now close OllyDbg and start PDF2Word. Jetzt schließen OllyDbg und starten PDF2Word. Enter your email-address and enter one of your newly created serials. Geben Sie Ihre E-Mail-Adresse ein und geben Sie von Ihren neu erstellten Serien.
When you press ok you will be thanked for registering. Wenn Sie die Taste OK werden Sie dankte für die Registrierung.You're welcome ;-) Du bist willkommen ;-) The result of your entered information is put in a string and written to Information bezüglich des von Ihnen eingegebenen Informationen werden in einen String und in %WINDIR%system32pdf2word.dat% WINDIR% system32pdf2word.dat
In case you want another serial just delete the dat file and put in a new one. Für den Fall, Sie wollen eine andere serielle nur löschen Sie die dat-Datei und in eine neue ein.
Of course this is a very simple protection, but it is a nice example to cover the basics of Natürlich ist dies eine sehr einfache Schutz, aber es ist ein schönes Beispiel für die Grundlagen der reverse engineering. Reverse Engineering.
Cast your vote on this article Stimmen Sie jetzt zu diesem Artikel *Note: the order of the votes has been reversed. * Hinweis: Die Reihenfolge der Stimmen wurde rückgängig gemacht.
Good Stuff, Reverse Engineering will get you out of problems or give you a solution to one a lot of times. Good Stuff, Reverse Engineering erhalten Sie von Problemen oder geben Sie eine Lösung für ein sehr viel Zeit. A learn a lot on this article although I was unable to do its content do to lack of update, the PDF2words 1.6 is no longer available on the NET, all mirrors and Links will download the 3.0 version and the current version of ollydgb doesnt have the \"Search for\" option required on STEP 2 it appears the hold Right Click menu is different. Ein lernen eine Menge über diesen Artikel, obwohl ich nicht in der Lage war, ihren Inhalt tun, um fehlende Aktualisierung, die PDF2words 1/6 ist nicht mehr verfügbar auf der NET, alle Spiegel und Links wird die Version 3.0 und der aktuellen Version von ollydgb doesnt haben die \ "Suche nach \"-Option erforderlich SCHRITT 2 geht hervor, die halten rechten Klicken Sie im Menü ist anders. Could you please update the article? Könnten Sie bitte aktualisieren Sie die Artikel? Thank you for knowledge Sir I look forward to learn more from you and your colleagues. Vielen Dank, dass Sie für Wissen Sir Ich freue mich darauf, mehr von Ihnen und Ihren Kollegen. All the best always... Alles Gute immer ... -Luckyperfect- -Luckyperfect - \"Scientia est Potentia\" \ "Scientia est Potentia \"
tjszl1 - 07:18 am Tuesday February 12th, 2008tjszl1 - 07.18 Uhr Dienstag 12. Februar, 2008
white_scorpion : white_scorpion: I\'m very angry.It\'s not a malicious software.You can use anti-virus software to check it. I \ 'm sehr angry.It \' s nicht eine potentiell gefährliche software.You können Anti-Virus-Software zu überprüfen.
lol 10/10 this pwns! lol 10/10 diesem Kiefernfadenwurm ist! you should write more :) Sie sollte mehr schreiben:)