Dark Heaven - Tutorial: Registrierung von GIF Movie Gear v2.51
Dark Heaven - Tutorial: Registrierung von GIF Movie Gear v2.62


A) GIF Movie Gear v2.51
-----------------------

Programm: 	GIF Movie Gear v2.51
Beschreibung: 	Gestaltung von GIF-Animationen
Autor: 		(C) 1996-98 gamani productions
Groesse: 	371.200 Bytes (MOVGEAR.EXE)


Werkzeug: - W32DASM v8.93


1. Lade GIF MOVIE GEAR und anschlieend W32DASM.


2. Deassembliere nun MOVGEAR.EXE ber [Debug/Attach to an Active Process].


3. Suche nun mittels [Refs/String Data References] nach der Fehlermeldung "The
   information you have provided is invalid." (String Resource ID = 40212).
   Durch einen Doppelklick auf die Referenz wird die entsprechende Zeile im
   Listing angezeigt: 004290D6.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00429023(C)
|
:004290CF 6A30                    push 00000030       ; <- Sprung hierher suchen

* Possible Reference to String Resource ID=40213: "Invalid Registration Info"
                                  |
:004290D1 68159D0000              push 00009D15

* Possible Reference to String Resource ID=40212: "The information you have provided is invalid. Please be sure"
                                  |
:004290D6 68149D0000              push 00009D14          ; <- gefundene Referenz
:004290DB 56                      push esi
:004290DC E88F22FEFF              call 0040B370
:004290E1 83C410                  add esp, 00000010


4. Um den Sprungbefehl zur Fehlermeldung zu finden, suchen wir mittels
   [Search/Find Text] nach der Adresse 004290CF.

* Possible Reference to Dialog: DialogID_0070, CONTROL_ID:0450, ""
                                  |
:00429004 6850040000              push 00000450
:00429009 56                      push esi
:0042900A FFD7                    call edi
:0042900C 50                      push eax
:0042900D FFD3                    call ebx
:0042900F 8D4C2478                lea ecx, dword ptr [esp+78]
:00429013 8D542414                lea edx, dword ptr [esp+14]
:00429017 51                      push ecx
:00429018 52                      push edx
:00429019 E872FDFFFF              call 00428D90                ; <- Execute Call
:0042901E 83C408                  add esp, 00000008
:00429021 85C0                    test eax, eax
:00429023 0F84A6000000            je 004290CF      ; <- Sprung zur Fehlermeldung
:00429029 8D442410                lea eax, dword ptr [esp+10]
:0042902D 8D4C240C                lea ecx, dword ptr [esp+0C]
:00429031 50                      push eax
:00429032 51                      push ecx
:00429033 6A00                    push 00000000
:00429035 683F000F00              push 000F003F
:0042903A 6A00                    push 00000000
:0042903C 68F4404400              push 004440F4
:00429041 6A00                    push 00000000


5. In Zeile 00429019 folgen wir dem Funktionsaufruf (call 00428D90) mittels
   [Execute Text/Execute Call].

* Referenced by a CALL at Addresses:
|:00428ED9   , :00429019   
|
:00428D90 53                      push ebx                ; <- von call 00428D90
:00428D91 55                      push ebp
:00428D92 8B6C2410                mov ebp, dword ptr [esp+10]
:00428D96 56                      push esi
:00428D97 57                      push edi
:00428D98 807D006D                cmp byte ptr [ebp+00], 6D   ; <- Kontrolle "m"
:00428D9C 0F85A2000000            jne 00428E44
:00428DA2 807D0176                cmp byte ptr [ebp+01], 76   ; <- Kontrolle "v"
:00428DA6 0F8598000000            jne 00428E44
:00428DAC 807D0267                cmp byte ptr [ebp+02], 67   ; <- Kontrolle "g"
:00428DB0 0F858E000000            jne 00428E44
:00428DB6 807D0332                cmp byte ptr [ebp+03], 32   " <- Kontrolle "2"
:00428DBA 0F8584000000            jne 00428E44

* Possible Indirect StringData Ref from Data Obj ->"mvg21951736"
                                  |
:00428DC0 BBF0014400              mov ebx, 004401F0

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00428DE6(C)
|
:00428DC5 8B13                    mov edx, dword ptr [ebx]
:00428DC7 83C9FF                  or ecx, FFFFFFFF
:00428DCA 8BFA                    mov edi, edx
:00428DCC 33C0                    xor eax, eax
:00428DCE F2                      repnz
:00428DCF AE                      scasb
:00428DD0 F7D1                    not ecx
:00428DD2 49                      dec ecx
:00428DD3 8BFA                    mov edi, edx
:00428DD5 8BF5                    mov esi, ebp
:00428DD7 33C0                    xor eax, eax
:00428DD9 F3                      repz
:00428DDA A6                      cmpsb
:00428DDB 7467                    je 00428E44
:00428DDD 83C304                  add ebx, 00000004
:00428DE0 81FB20024400            cmp ebx, 00440220
:00428DE6 72DD                    jb 00428DC5
:00428DE8 807D0473                cmp byte ptr [ebp+04], 73   ; <- Kontrolle "s"
:00428DEC 7501                    jne 00428DEF
:00428DEE 45                      inc ebp

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00428DEC(C)
|
:00428DEF 83C507                  add ebp, 00000007           <- an 8. / 9. Posi
:00428DF2 55                      push ebp
:00428DF3 E8A8710000              call 0042FFA0
:00428DF8 8B542418                mov edx, dword ptr [esp+18]
:00428DFC 83C404                  add esp, 00000004
:00428DFF 8BFA                    mov edi, edx
:00428E01 33C9                    xor ecx, ecx
:00428E03 8A12                    mov dl, byte ptr [edx]
:00428E05 BEFE060000              mov esi, 000006FE
:00428E0A 84D2                    test dl, dl
:00428E0C 7428                    je 00428E36

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00428E34(C)
|
:00428E0E 41                      inc ecx
:00428E0F 0FBED2                  movsx edx, dl
:00428E12 8BD9                    mov ebx, ecx
:00428E14 0FAFDA                  imul ebx, edx
:00428E17 03F3                    add esi, ebx
:00428E19 81FEFD0D0000            cmp esi, 00000DFD
:00428E1F 7E06                    jle 00428E27
:00428E21 81EEFD0D0000            sub esi, 00000DFD

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00428E1F(C)
|
:00428E27 83F90A                  cmp ecx, 0000000A
:00428E2A 7E02                    jle 00428E2E
:00428E2C 33C9                    xor ecx, ecx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00428E2A(C)
|
:00428E2E 8A5701                  mov dl, byte ptr [edi+01]
:00428E31 47                      inc edi
:00428E32 84D2                    test dl, dl
:00428E34 75D8                    jne 00428E0E

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00428E0C(C)
|
:00428E36 3BF0                    cmp esi, eax            ; <- Breakpoint setzen
:00428E38 750A                    jne 00428E44
:00428E3A B801000000              mov eax, 00000001
:00428E3F 5F                      pop edi
:00428E40 5E                      pop esi
:00428E41 5D                      pop ebp
:00428E42 5B                      pop ebx
:00428E43 C3                      ret


6. Ab Zeile 00428D98 werden die ersten 4 Codezeichen kontrolliert: mvg2. Wir
   bilden somit einen vorlufigen Code: mvg2112233.

   In Zeile 00428DE8 wird das 5. Codezeichen kontrolliert. Ist es ein "s", wird
   die aktuelle Codeposition um eins erhht. In meinem Fall war es eine "1" und
   ich gelangte gleich zu Zeile 00428DEF. Hier wird der Positionszeiger um 7
   erhht, also auf das 8. Codezeichen (wenn vorher "s", dann 9. Position).

   Wir gelangen also im Code zu den letzten 3 Zeichen "233". Diese werden nun
   eingelesen und in Zeile 00428E36 mit dem aus dem Namen berechneten Wert ver-
   glichen.

   In Zeile 00428E36 setzen wir unseren Breakpoint [F2] auf den Vergleich,
   wechseln zu GIF MOVIE GEAR und geben die Registrierdaten ein.

   z.B. Name: Dark Heaven
        Code: mvg2112233


7. Nach der Eingabebesttigung wird W32DASM beim Breakpoint aktiv und wir knnen
   uns den Inhalt der einzelnen Register des Vergleichs anschauen.

   In meinem Fall: cmp esi, eax -> 3F9 (hex) = 1017 (dez), E9 (hex) = 233 (dez)

   Der Wert E9 entspricht meinem eingegebenen Codewert (233). Dieser mu demnach
   auf den Wert 3F9 (1017) gendert werden:

   Gendeter Code: mvg21121017.

   Somit setzt sich der Code wie folgt zusammen:
   mvg2      "s"     122     1017
   Kennung   Site   Serial   Code


8. Mit dem berechneten Code knnen wir nun GIF MOVIE GEAR registrieren.

   z.B. Name: Dark Heaven
        Code: mvg21121017


9. Nun betrachten wir die Angabe des oben fehlenden "s". Wir geben den vor-
   lufigen Code mvg2s112233 ein. Beim Breakpoint sehen wir den wiederum den
   Vergleich:

   cmp esi, eax -> 3F9 (hex) = 1017 (dez), E9 (hex) = 233 (dez)

   Wir ndern den Code also zu: mvg2s1121017

   Nach der Eingabe dieses Codes sind wir stolzer Besitzer einer Site License.



10. Nach der erfolgreichen Registrierung trgt GIF MOVIE GEAR folgenden
    Schlssel in die Registry ein:

[HKEY_CURRENT_USER\Software\gamani\GIFMovieGear\2.0]
"Placement"=hex:2c,00,00,00,00,00,00,00,01,00,00,00,ff,ff,ff,ff,ff,ff,ff,ff,ff,\
  ff,ff,ff,ff,ff,ff,ff,2c,00,00,00,2c,00,00,00,84,02,00,00,dc,01,00,00
"Pref"=hex:64,00,00,00,00,00,00,00,24,00,00,00,00,00,00,00,00,00,00,00,6a,04,\
  00,00,00,00,00,00,00,00,00,00,07,00,00,00,01,00,00,00,01,02,88,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00
"RegName"="Dark Heaven"
"RegCode"="mvg21121017"


bzw. im 2. Fall:

[HKEY_CURRENT_USER\Software\gamani\GIFMovieGear\2.0]
"Placement"=hex:2c,00,00,00,00,00,00,00,01,00,00,00,ff,ff,ff,ff,ff,ff,ff,ff,ff,\
  ff,ff,ff,ff,ff,ff,ff,2c,00,00,00,2c,00,00,00,84,02,00,00,dc,01,00,00
"Pref"=hex:64,00,00,00,00,00,00,00,24,00,00,00,00,00,00,00,00,00,00,00,6a,04,\
  00,00,00,00,00,00,00,00,00,00,07,00,00,00,01,00,00,00,01,02,88,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00
"RegName"="Dark Heaven"
"RegCode"="mvg2s1121017"



Viel Spa beim CRACKEN!
Dark Heaven
24.01.1999


B) GIF Movie Gear v2.62
-----------------------

Programm: 	GIF Movie Gear v2.62
Beschreibung: 	Gestaltung von GIF-Animationen
Autor: 		(C) 1996-98 gamani productions
Groesse: 	410.112 Bytes (MOVGEAR.EXE)


Werkzeug: - W32DASM v8.93


1. Lade GIF MOVIE GEAR und anschlieend W32DASM.


2. Deassembliere nun MOVGEAR.EXE ber [Debug/Attach to an Active Process].


3. Suche nun mittels [Refs/String Data References] nach der Fehlermeldung "The
   information you have provided is invalid." (String Resource ID = 40212).
   Durch einen Doppelklick auf die Referenz wird die entsprechende Zeile im
   Listing angezeigt: 0042BAD6.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042BA23(C)
|
:0042BACF 6A30                    push 00000030       ; <- Sprung hierher suchen

* Possible Reference to String Resource ID=40213: "Invalid Registration Info"
                                  |
:0042BAD1 68159D0000              push 00009D15

* Possible Reference to String Resource ID=40212: "The information you have                                             provided is invalid. Please be sure"
                                  |
:0042BAD6 68149D0000              push 00009D14          ; <- gefundene Referenz
:0042BADB 56                      push esi
:0042BADC E8FF00FEFF              call 0040BBE0
:0042BAE1 83C410                  add esp, 00000010


4. Um den Sprungbefehl zur Fehlermeldung zu finden, suchen wir mittels
   [Search/Find Text] nach der Adresse 0042BACF.

* Possible Reference to Dialog: DialogID_0091, CONTROL_ID:0450, ""
                                  |
:0042BA04 6850040000              push 00000450
:0042BA09 56                      push esi
:0042BA0A FFD7                    call edi
:0042BA0C 50                      push eax
:0042BA0D FFD3                    call ebx
:0042BA0F 8D4C2478                lea ecx, dword ptr [esp+78]
:0042BA13 8D542414                lea edx, dword ptr [esp+14]
:0042BA17 51                      push ecx
:0042BA18 52                      push edx
:0042BA19 E872FDFFFF              call 0042B790                ; <- Execute Call
:0042BA1E 83C408                  add esp, 00000008
:0042BA21 85C0                    test eax, eax
:0042BA23 0F84A6000000            je 0042BACF      ; <- Sprung zur Fehlermeldung
:0042BA29 8D442410                lea eax, dword ptr [esp+10]
:0042BA2D 8D4C240C                lea ecx, dword ptr [esp+0C]
:0042BA31 50                      push eax
:0042BA32 51                      push ecx
:0042BA33 6A00                    push 00000000
:0042BA35 683F000F00              push 000F003F
:0042BA3A 6A00                    push 00000000
:0042BA3C 6874B44400              push 0044B474
:0042BA41 6A00                    push 00000000


5. In Zeile 0042BA1E folgen wir dem Funktionsaufruf (call 0042B790) mittels
   [Execute Text/Execute Call].

* Referenced by a CALL at Addresses:
|:0042B8D9   , :0042BA19   
|
:0042B790 53                      push ebx                ; <- von call 0042B790
:0042B791 55                      push ebp
:0042B792 8B6C2410                mov ebp, dword ptr [esp+10]
:0042B796 56                      push esi
:0042B797 57                      push edi
:0042B798 807D006D                cmp byte ptr [ebp+00], 6D   ; <- Kontrolle "m"
:0042B79C 0F85A2000000            jne 0042B844
:0042B7A2 807D0176                cmp byte ptr [ebp+01], 76   ; <- Kontrolle "v"
:0042B7A6 0F8598000000            jne 0042B844
:0042B7AC 807D0267                cmp byte ptr [ebp+02], 67   ; <- Kontrolle "g"
:0042B7B0 0F858E000000            jne 0042B844
:0042B7B6 807D0332                cmp byte ptr [ebp+03], 32   ; <- Kontrolle "2"
:0042B7BA 0F8584000000            jne 0042B844

* Possible Indirect StringData Ref from Data Obj ->"mvg21951736"
                                  |
:0042B7C0 BB90724400              mov ebx, 00447290

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042B7E6(C)
|
:0042B7C5 8B13                    mov edx, dword ptr [ebx]
:0042B7C7 83C9FF                  or ecx, FFFFFFFF
:0042B7CA 8BFA                    mov edi, edx
:0042B7CC 33C0                    xor eax, eax
:0042B7CE F2                      repnz
:0042B7CF AE                      scasb
:0042B7D0 F7D1                    not ecx
:0042B7D2 49                      dec ecx
:0042B7D3 8BFA                    mov edi, edx
:0042B7D5 8BF5                    mov esi, ebp
:0042B7D7 33C0                    xor eax, eax
:0042B7D9 F3                      repz
:0042B7DA A6                      cmpsb
:0042B7DB 7467                    je 0042B844
:0042B7DD 83C304                  add ebx, 00000004
:0042B7E0 81FBE8724400            cmp ebx, 004472E8
:0042B7E6 72DD                    jb 0042B7C5
:0042B7E8 807D0473                cmp byte ptr [ebp+04], 73   ; <- Kontrolle "s"
:0042B7EC 7501                    jne 0042B7EF
:0042B7EE 45                      inc ebp

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042B7EC(C)
|
:0042B7EF 83C507                  add ebp, 00000007           <- an 8. / 9. Posi
:0042B7F2 55                      push ebp
:0042B7F3 E8F8BC0000              call 004374F0
:0042B7F8 8B542418                mov edx, dword ptr [esp+18]
:0042B7FC 83C404                  add esp, 00000004
:0042B7FF 8BFA                    mov edi, edx
:0042B801 33C9                    xor ecx, ecx
:0042B803 8A12                    mov dl, byte ptr [edx]
:0042B805 BEFE060000              mov esi, 000006FE
:0042B80A 84D2                    test dl, dl
:0042B80C 7428                    je 0042B836

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042B834(C)
|
:0042B80E 41                      inc ecx
:0042B80F 0FBED2                  movsx edx, dl
:0042B812 8BD9                    mov ebx, ecx
:0042B814 0FAFDA                  imul ebx, edx
:0042B817 03F3                    add esi, ebx
:0042B819 81FEFD0D0000            cmp esi, 00000DFD
:0042B81F 7E06                    jle 0042B827
:0042B821 81EEFD0D0000            sub esi, 00000DFD

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042B81F(C)
|
:0042B827 83F90A                  cmp ecx, 0000000A
:0042B82A 7E02                    jle 0042B82E
:0042B82C 33C9                    xor ecx, ecx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042B82A(C)
|
:0042B82E 8A5701                  mov dl, byte ptr [edi+01]
:0042B831 47                      inc edi
:0042B832 84D2                    test dl, dl
:0042B834 75D8                    jne 0042B80E

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042B80C(C)
|
:0042B836 3BF0                    cmp esi, eax            ; <- Breakpoint setzen
:0042B838 750A                    jne 0042B844
:0042B83A B801000000              mov eax, 00000001
:0042B83F 5F                      pop edi
:0042B840 5E                      pop esi
:0042B841 5D                      pop ebp
:0042B842 5B                      pop ebx
:0042B843 C3                      ret


6. Ab Zeile 0042B798 werden die ersten 4 Codezeichen kontrolliert: mvg2. Wir
   bilden somit einen vorlufigen Code: mvg2112233.

   In Zeile 0042B7E8 wird das 5. Codezeichen kontrolliert. Ist es ein "s", wird
   die aktuelle Codeposition um eins erhht. In Zeile 0042B7EF wird der Posi-
   tionszeiger um 7 erhht, also auf das 8. Codezeichen (wenn vorher "s", dann
   9. Position).

   Vorlufiger Code: mvg2s112233

   Wir gelangen also im Code zu den letzten 3 Zeichen "233". Diese werden nun
   eingelesen und in Zeile 0042B836 mit dem aus dem Namen berechneten Wert ver-
   glichen (cmp esi, eax).

   In Zeile 0042B836 setzen wir somit unseren Breakpoint [F2] auf den Vergleich,
   wechseln zu GIF MOVIE GEAR und geben die Registrierdaten ein.

   z.B. Name: Dark Heaven
        Code: mvg2s112233


7. Nach der Eingabebesttigung wird W32DASM beim Breakpoint aktiv und wir knnen
   uns den Inhalt der einzelnen Register des Vergleichs anschauen.

   In meinem Fall: cmp esi, eax -> 3F9 (hex) = 1017 (dez), E9 (hex) = 233 (dez)

   Der Wert E9 entspricht meinem eingegebenen Codewert (233). Dieser mu demnach
   auf den Wert 3F9 (1017) gendert werden:

   Gendeter Code: mvg2s1121017.

   Somit setzt sich der Code wie folgt zusammen:
   mvg2      "s"     122     1017
   Kennung   Site   Serial   Code


8. Mit dem berechneten Code knnen wir nun GIF MOVIE GEAR registrieren und 
   werden stolzer Besitzer einer Site License.

   z.B. Name: Dark Heaven
        Code: mvg2s1121017


10. Nach der erfolgreichen Registrierung trgt GIF MOVIE GEAR die Registrier- 
    daten in den folgenden Registry-Schlssel:
 
    [HKEY_CURRENT_USER\Software\gamani\GIFMovieGear\2.0]
    "RegName"="Dark Heaven"
    "RegCode"="mvg2s1121017"



Viel Spa beim CRACKEN!
Dark Heaven
06.03.1999


