Dark Heaven - Tutorial: Registrierung von Rendersoft VRML Editor

Programm: 	Rendersoft VRML Editor v1.722
Beschreibung: 	Editor
Autor: 		(C) 1997-1998 RenderSoft Software and Web Publishing
Groesse: 	892.416 Bytes (RSVRMLED.EXE)


Werkzeug: - W32DASM v8.93


1. Lade VRML EDITOR und anschlieend W32DASM.


2. Disassembliere RSVRMLED.EXE ber [Debug/Attach to an Active Process].


3. Leider gibt das Programm bei einer falschen Registriernummer keine Fehler-
   meldung aus. Wir suchen deshalb mittels [Refs/String Data References] nach
   der Erfolgsmeldung "Thank you for registering RenderSoft". Mit einem 
   Doppelklick auf die Referenz wird die zugehrige Zeile im Listing angezeigt:
   0043A828.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043A7DB(C)
|
:0043A803 8D44241C                lea eax, dword ptr [esp+1C] ; <- Sprung suchen
:0043A807 50                      push eax

* Possible StringData Ref from Data Obj ->"%s"
                                  |
:0043A808 68743E4B00              push 004B3E74
:0043A80D 56                      push esi
:0043A80E E81D240200              call 0045CC30
:0043A813 83C40C                  add esp, 0000000C
:0043A816 56                      push esi
:0043A817 E864230200              call 0045CB80
:0043A81C 83C404                  add esp, 00000004
:0043A81F 8BCD                    mov ecx, ebp
:0043A821 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Note"
                                  |
:0043A823 68A8014B00              push 004B01A8

* Possible StringData Ref from Data Obj ->"Thank you for registering RenderSoft"
                                        ->"VRML Editor."
                                  |
:0043A828 68403E4B00              push 004B3E40          ; <- gefundene Referenz
:0043A82D E810CB0400              call 00487342
:0043A832 8D4C2410                lea ecx, dword ptr [esp+10]
:0043A836 C684242001000000        mov byte ptr [esp+00000120], 00
:0043A83E E8D62E0400              call 0047D719
:0043A843 8BCD                    mov ecx, ebp
:0043A845 E84FEC0300              call 00479499


4. Um den Sprungbefehl zur Fehlermeldung zu finden, begeben wir uns mittels
   [Goto/Goto Code Location] zur Adresse 0043A7DB.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043A757(C)
|
:0043A771 8D4C2410                lea ecx, dword ptr [esp+10] ; <- Sprung suchen
:0043A775 E8542E0400              call 0047D5CE
:0043A77A 8D542450                lea edx, dword ptr [esp+50]
:0043A77E 8D4C2410                lea ecx, dword ptr [esp+10]
:0043A782 52                      push edx
:0043A783 889C2424010000          mov byte ptr [esp+00000124], bl
:0043A78A E820310400              call 0047D8AF
:0043A78F 8D442410                lea eax, dword ptr [esp+10]

* Possible StringData Ref from Data Obj ->"\RSVRMLED.INI"
                                  |
:0043A793 68C4144B00              push 004B14C4
:0043A798 8D4C241C                lea ecx, dword ptr [esp+1C]
:0043A79C 50                      push eax
:0043A79D 51                      push ecx
:0043A79E E81B320400              call 0047D9BE
:0043A7A3 50                      push eax
:0043A7A4 8D4C2414                lea ecx, dword ptr [esp+14]
:0043A7A8 C684242401000002        mov byte ptr [esp+00000124], 02
:0043A7B0 E8AB300400              call 0047D860
:0043A7B5 8D4C2418                lea ecx, dword ptr [esp+18]
:0043A7B9 889C2420010000          mov byte ptr [esp+00000120], bl
:0043A7C0 E8542F0400              call 0047D719
:0043A7C5 8B542410                mov edx, dword ptr [esp+10]

* Possible StringData Ref from Data Obj ->"w"
                                  |
:0043A7C9 68E0104B00              push 004B10E0
:0043A7CE 52                      push edx
:0043A7CF E8EC240200              call 0045CCC0
:0043A7D4 8BF0                    mov esi, eax
:0043A7D6 83C408                  add esp, 00000008
:0043A7D9 85F6                    test esi, esi
:0043A7DB 7526                    jne 0043A803    ; <- Sprung zur Erfolgsmeldung
:0043A7DD 6A30                    push 00000030

* Possible StringData Ref from Data Obj ->"Error"
                                  |
:0043A7DF 68900D4B00              push 004B0D90


5. Um den Sprungbefehl zur obigen Routine zu finden, begeben wir uns mittels
   [Goto/Goto Code Location] zur Adresse 0043A757.

* Possible Reference to Dialog: DialogID_0091, CONTROL_ID:00FF, ""
                                  |
:0043A660 6AFF                    push FFFFFFFF
:0043A662 6871894900              push 00498971
:0043A667 64A100000000            mov eax, dword ptr fs:[00000000]
:0043A66D 50                      push eax
:0043A66E 64892500000000          mov dword ptr fs:[00000000], esp
:0043A675 81EC08010000            sub esp, 00000108
:0043A67B 53                      push ebx
:0043A67C 55                      push ebp
:0043A67D 56                      push esi
:0043A67E 8BE9                    mov ebp, ecx
:0043A680 57                      push edi
:0043A681 B90C000000              mov ecx, 0000000C
:0043A686 33C0                    xor eax, eax
:0043A688 8D7C241C                lea edi, dword ptr [esp+1C]
:0043A68C F3                      repz
:0043A68D AB                      stosd
:0043A68E 8D4C2414                lea ecx, dword ptr [esp+14]
:0043A692 66AB                    stosw
:0043A694 E8352F0400              call 0047D5CE
:0043A699 8D442414                lea eax, dword ptr [esp+14]
:0043A69D 8D4D5C                  lea ecx, dword ptr [ebp+5C]
:0043A6A0 50                      push eax
:0043A6A1 C784242401000000000000  mov dword ptr [esp+00000124], 00000000
:0043A6AC E8CDFD0300              call 0047A47E
:0043A6B1 8B7C2414                mov edi, dword ptr [esp+14]
:0043A6B5 83C9FF                  or ecx, FFFFFFFF
:0043A6B8 33C0                    xor eax, eax
:0043A6BA 8D54241C                lea edx, dword ptr [esp+1C]
:0043A6BE F2                      repnz
:0043A6BF AE                      scasb
:0043A6C0 F7D1                    not ecx
:0043A6C2 2BF9                    sub edi, ecx
:0043A6C4 BB01000000              mov ebx, 00000001
:0043A6C9 8BC1                    mov eax, ecx
:0043A6CB 8BF7                    mov esi, edi
:0043A6CD 8BFA                    mov edi, edx
:0043A6CF C1E902                  shr ecx, 02
:0043A6D2 F3                      repz
:0043A6D3 A5                      movsd
:0043A6D4 8BC8                    mov ecx, eax
:0043A6D6 33C0                    xor eax, eax
:0043A6D8 83E103                  and ecx, 00000003
:0043A6DB F3                      repz
:0043A6DC A4                      movsb
:0043A6DD 8A4C241C                mov cl, byte ptr [esp+1C]
:0043A6E1 80F970                  cmp cl, 70                   ; <- 70 = 112 = p
:0043A6E4 7407                    je 0043A6ED
:0043A6E6 80F950                  cmp cl, 50                   ; <- 50 =  90 = P
:0043A6E9 7402                    je 0043A6ED
:0043A6EB 8BC3                    mov eax, ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0043A6E4(C), :0043A6E9(C)
|
:0043A6ED 8A4C241D                mov cl, byte ptr [esp+1D]
:0043A6F1 80F972                  cmp cl, 72                   ; <- 72 = 114 = r
:0043A6F4 7407                    je 0043A6FD
:0043A6F6 80F952                  cmp cl, 52                   ; <- 52 =  82 = R
:0043A6F9 7402                    je 0043A6FD
:0043A6FB 8BC3                    mov eax, ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0043A6F4(C), :0043A6F9(C)
|
:0043A6FD 8A4C241E                mov cl, byte ptr [esp+1E]
:0043A701 80F973                  cmp cl, 73                   ; <- 73 = 115 = s
:0043A704 7407                    je 0043A70D
:0043A706 80F953                  cmp cl, 53                   ; <- 53 =  83 = S
:0043A709 7402                    je 0043A70D
:0043A70B 8BC3                    mov eax, ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0043A704(C), :0043A709(C)
|
:0043A70D 807C242331              cmp byte ptr [esp+23], 31     ; <- 8. = 31 = 1
:0043A712 7402                    je 0043A716
:0043A714 8BC3                    mov eax, ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043A712(C)
|
:0043A716 8A4C2427                mov cl, byte ptr [esp+27]
:0043A71A 80F97A                  cmp cl, 7A           ; <- 12. = 7A = 122 = "z"
:0043A71D 7407                    je 0043A726        
:0043A71F 80F95A                  cmp cl, 5A            ; <- 12. = 5A = 90 = "Z"
:0043A722 7402                    je 0043A726
:0043A724 8BC3                    mov eax, ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0043A71D(C), :0043A722(C)
|
:0043A726 85C0                    test eax, eax
:0043A728 0F851C010000            jne 0043A84A
:0043A72E 8D4C2450                lea ecx, dword ptr [esp+50]
:0043A732 68C8000000              push 000000C8
:0043A737 51                      push ecx
:0043A738 A318104D00              mov dword ptr [004D1018], eax
:0043A73D 891DB82B4C00            mov dword ptr [004C2BB8], ebx
:0043A743 891DC0254C00            mov dword ptr [004C25C0], ebx
:0043A749 891D68A14C00            mov dword ptr [004CA168], ebx

* Reference To: KERNEL32.GetWindowsDirectoryA, Ord:0151h
                                  |
:0043A74F FF1594AD4D00            Call dword ptr [004DAD94]
:0043A755 85C0                    test eax, eax
:0043A757 7518                    jne 0043A771
:0043A759 6A30                    push 00000030


6. Im obigen Auszug sehen wir die einzelnen Vergleiche der Registriernummer.
   Wenn wir jeweils einen Breakpoint setzen [F2], erhalten wir die angegebenen
   Inhalte.

   Die folgende Tabelle soll die Vorgehensweise veranschaulichen:

   [esp+1C] +1D +1E +1F +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30
   ----------------------------------------------------------------
      p      r   s   ?   ?   ?   ?   1   ?   ?   ?   z   ?   ?   ?
   Die mit den Fragezeichen gekennzeichneten Codepositionen werden
   vom Programm nicht kontrolliert.
   ----------------------------------------------------------------
      p      r   s   -   0   0   0   1   0   0   0   z   0   0   0
   Wir setzen deshalb beliebige Werte ein und testen den Code.
   ----------------------------------------------------------------

   Registration Number: prs-0001000z000


7. Mit dem gefundenen Code knnen wir VRML EDITOR registrieren und erhalten die
   Erfolgsmeldung "Thank you for registering RenderSoft VRML Editor".

   Registration Number: prs-0001000z000


8. Nach der erfolgreichen Registrierung trgt VRML Editor die Registriernummer
   in die Datei RSVRMLED.INI im Windows-Verzeichnis.



Viel Spa beim CRACKEN!
Dark Heaven
18.05.1999
