16.09.  1999

"Animagic GIF 1.10c" ( "Patch-Art'  )

Win '99 PROGRAM Win Code Reversing  

 

von PhatAzz

 

 

Code Reversing für Anfänger 

   

 

  Programm Details :

Programm Name:animagic32.exe Programm Typ: Gfx Url zum Programm: Hier  Programm-Grösse:  596 K  

 
 

    Gebrauchte Tools :  W32Dasm,Hiew

 

Schwierigkeit

Leicht ( x )  Mittel (   )  Schwer (    )  Profi (    ) 

 

 

" Animagic GIF 1.10c "   Geschrieben von PhatAzz
 
 

Einführung

Peace.. I'm back..Heute mal wider ein ziemlich leichtes Opfer.. Animagic GIF 1.10c ..heute auf Tucows rausgekommen.. Ich hab das Ding in 5 Min. gecrackt, und dachte, ich muss es anderen zeigen, wie leicht das geht :)

Es ist jetzt 20:46 abends... und nebenbei läuft so ne Serie "Der Clown", den ich aber nicht mitbekomme,da ich gleichzeitig ein paar fitte Hip Hop Songs mit meinem Winamp Player reinhaue... Ok, ich glaub, ich wollt lieber cracken, als von meinem Privat Leben hören *g* ..

Über die Schutztechnik

Wie die meisten Shareware Proggys startet auch dieses mit einem Nag Screen, der uns verrät, wie lang wir dieses Scheiss Teil schon benutzen, und das nach 30 Tage wichtige Features nicht mehr gehen, dass heisst es hat eine Time Trial (Zeitlimit) und ist crippled (Funktions-limit). Wenn man auf Help geht, kann man dort einen Namen,Company und eine Serial eingeben..  Gebt mal irgendwas ein, und schaut euch die Messagebox an " Registration failed: Invalid Password". Das merken wir uns, und machen eine Kopie von der animagic32.exe.. und laden sie in den W32Dasm.....

Das Essay 

Nachdem das Proggy geladen ist, guckt euch mal die String Refernences an (Refs) und sucht nach der Fehlermeldung "Registration Failed: Invalid Password" . Nach einem Doppelklick müsstet ihr hier landen :


* Possible StringData Ref from Data Obj ->"Thank you for registering Animagic "
->"GIF"
|
:00421E5D 68EC7F4700 push 00477FEC
:00421E62 68EB7F4700 push 00477FEB
:00421E67 FF700C push [eax+0C]
:00421E6A FF7068 push [eax+68]
:00421E6D E8F0010300 call 00452062
:00421E72 83C414 add esp, 00000014
:00421E75 EB3D jmp 00421EB4

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00421E05(C)
|
:00421E77 8B06 mov eax, dword ptr [esi]
:00421E79 6A00 push 00000000
:00421E7B 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Registration failed: Invalid Password" <----- Hier landen wir

Ihr seht das : |:00421E05(C) ....    Von dort wird zu dieser Meldung gesprungen,scrollt ein bisschen hoch, bis ihr an der Addresse angekommen seid. Ihr müsstet dann hier angekommen sein :

:00421DD1 68B53A4800 push 00483AB5
:00421DD6 E861FEFFFF call 00421C3C
:00421DDB 59 pop ecx
:00421DDC 68B53B4800 push 00483BB5
:00421DE1 E856FEFFFF call 00421C3C
:00421DE6 59 pop ecx
:00421DE7 68B53C4800 push 00483CB5
:00421DEC E84BFEFFFF call 00421C3C
:00421DF1 59 pop ecx
:00421DF2 56 push esi
:00421DF3 E8EBC8FFFF call 0041E6E3
:00421DF8 59 pop ecx
:00421DF9 A2C53C4800 mov byte ptr [00483CC5], al
:00421DFE 803DC53C480000 cmp byte ptr [00483CC5], 00
:00421E05 7470 je 00421E77    <---------    Hier landen wir, und hier ist der Sprung
:00421E07 C605C83C480000 mov byte ptr [00483CC8], 00
:00421E0E 6854394800 push 00483954
:00421E13 68B53A4800 push 00483AB5

Also, wir könnten natürlich hier das je in ein jne ändern, aber das würde nix bringen, da während des Programms immer wieder auf Richtigkeit der Serial überprüft wird. Eine Serial zu sniffen wäre jetzt auch nicht umbedingt leichter... (Das ist ja auch ein Newbie Tut)... Dieses Je springt also zur Fehlermeldung , solang das Register al den Wert 0 besitzt. Wenn ihr euch das prog mal in SoftIce anschaut, dann werdet ihr bemerken, dass dieses Je eingentlich ein JZ ist..also JUMP IF ZERO.. Wenn man jetzt eni bisschen überlegt, dann fällt euch doch bestimmt auf, dass man dem Register al einfach den Wert 1 zuweisen müsste.... Also, müssen wir mal schauen, von wo die Richtigkeit der Serial überprüft wird.. und wir sind diesem Bastard sehr nah *g* .. 4 Zeilen über dem JE an Addresse 00421DF3 ist ein Call, den wir jetzt mal ein bisschen modifizieren :) .. Also schaut,dass die grüne Zeile auf dem Call steht und drückt mal die Rechte Pfeiltaste auf eurer Tastatur, nun seid ihr hier angekommen :

* Referenced by a CALL at Addresses:
|:0041E558 , :00421DF3 , :00421EA9
|
:0041E6E3 55 push ebp    <----- Hier landen wir
:0041E6E4 8BEC mov ebp, esp
:0041E6E6 83C4E8 add esp, FFFFFFE8
:0041E6E9 53 push ebx
:0041E6EA 56 push esi
:0041E6EB 57 push edi
:0041E6EC BEB53A4800 mov esi, 00483AB5

* Possible Indirect StringData Ref from Data Obj ->"ANIMAGIC16"

Ihr seht, diese Stelle wird von drei Stellen im Programm aufgerufen, und überprüft... Wir müssen aber jetzt dem Register al den Wert 1 zuweisen, und so, dass er es speichert bis zu dem je..  Nun kommt Hiew ins Spiel, ein Hex-Editor, gut für Neulinge, wegen seiner Assembler-Ansicht und wegen etwas anderem... erklär ich euch gleich.. Falls ihr ihn noch nicht habt, dann saugt ihn euch unter http://protools.cjb.net. Seit ihr so weit ?? .......... Falls ihr jetzt alle Files in einem Verzeichnis habt, dann können wir beginnen,oder ? .. OK..   Zieht die animagic.exe per Drag & Drop einfach ins Hiew hinein. Geschafft ? hehe :) OK , drückt einmal Enter und ihr seht nur Text.. ok, noch zweimal Enter drücken, um in den Assember Mode zu kommen.. Jetzt müsste es schon so ähnlich wie im W32Dasm aussehen... Geht zurück in den W32Dasm,schaut dass der Balken auf dem "push ebp" steht und schaut in die Statusleiste unten rechts nach dem Offset,auf dem wir uns im Moment befinden :  "0001DCE3h in File ....".. genau diesen Hex Offset brauchen wir jetzt.. Geht zurück in Hiew und drückt mal F5, und oben rechts müsste ein Eingabefeld erscheinen. Jetzt müssen wir das Offset eintragen : 1DCE3 (die Nullen und das h brauchen wir NIE) und danach Enter drücken. Wow, wir sind am richtigen Ort angekommen, sieht doch genauso aus wie im W32Dasm ..OK, wie können wir jetzt eine 1 in das al pressen ? *g* Ganz einfach drückt einmal F3 und dann F2.. HAHA, das war der Vorteil für Anfänger !!! Richtig bequem ist das :)  also löschen wir mal die Zeile, und machen aus dem "push ebp" ein "mov al,1" .Das bedeutet , der Wert 1 ist nun im Register al im Speicher . OK, Drückt enter, und schon müsste das nachste Fenster kommen, indem das hier stehen müsste "in al,dx" . Um aus diesem Call wieder rauszukommen, müssen wir die ganze Zeile mit einem "ret" ersetzen. Also, statt "in al,dx" einfach "ret" schreiben. Enter drücken und beim nächsten Fenster auf ESC , um das Assembler Fenster uz schliessen. Um die Änderungen an der exe file nun wirklich vorzunehmen, drückt nur einmal auf F9 , dass aktualisiert die exe file, und dann F10 um Hiew zu schliessen. So, jetzt gibt al immer den Wert 1 zurück, und er müsste immer zur richtigen Stelle springen.. Startet mal die Exe, und was sehen eure leicht angefeuchteten Augen "Registered to :"   "Dont show this dialog at startup time" können wir natürlich einen Halen machen.. Das Prog ist nun voll registriert, aber ihr wollt doch sicher euren Namen sehen, oder ?? OK, geht auf Help und "Enter Name and Password" . Dort steht schon "This program is already registered...." Gebt hier nun euren Namen und irgendeine Serial ein, und schon kommt eine MsgBox  "Thank you for registering Animagic GIF".. und ihr könnt nun euren namen bewundern *g*. Das wars !!

Der Patch 

0001DCE3 :    55   ersetzen mit  B0

0001DCE4 :    8B   ersetzen mit  01

0001DCE5 :    EC ersetzen mit  C3

Letzte Worte

Wieder mal ein Proggy gecrackt, und meine Finger tun mir jetzt richtig weh :) Für so einen leichten Crack so schwere Fingerarbeit *g*.  Also, wenn ihr Probleme habt, oder ein Tutorial wollt, oder einen Crack requested (nur mit URL und nicht all zu gross!), dann mailt mir .

CyA aLL PpL....



Essay von:             PhatAzz
Page gestaltet:       16.09.1999 21:58