Vanor - Tutorial: Registrierung von Wplay V1.70 Beta4


Programm: 	Wplay v1.70 (Beta 4)
Beschreibung: 	MP3 Player
Autor: 		(c)1999 Thomas Lenart
Gre: 		964.096 Bytes (WPlay.exe)


Werkzeug: - W32DSM89

1. Lade Wplay und anschlieend W32DSM89.

2. So nun mssen wir herausbekommen um welche Art von Schutz es sich handelt. 
   Dazu starten wir "WPlay" und beim Start erscheint auch schon ein Fenster
   mit dem Button "Enter Code".
   
   Nun steht eines fest :         

   Wplay nuzt eine Serial-Number als Schutz.

   Um nun einen Anhaltspunkt fr unsere Serial zu bekommen,trage nun
   irgendwelche Daten im Freischaltmen ein.
  
   Die auftauchende Fehlermeldung unbedingt merken !!!
   
3. Disassembliere nun WPlay.EXE (speichere sicherheitshalber den Quellcode ab)
   und starte den Debugger ber [Debug/Attach to an Activ Process].

4. Suche nun mittels [Refs/String Data References] nach der Fehlermeldung
   "The Key is not correct. Please ". Durch Doppelklicks werden die
   entsprechenden Zeilen im Listing angezeigt. Diesmal finden wir nur eine
   Referenz an der Adresse :0043C527 .

* Possible StringData Ref from Code Obj ->"You are a registered user. Thank "
                                        ->"you!"
                                  
:0043C5B0 B81CC64300              mov eax, 0043C61C
:0043C5B5 E88240FFFF              call 0043063C
:0043C5BA EB15                    jmp 0043C5D1

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043C5A3(C)
|
:0043C5BC 6A00                    push 00000000
:0043C5BE 668B0D10C64300          mov cx, word ptr [0043C610]
:0043C5C5 B201                    mov dl, 01

* Possible StringData Ref from Code Obj ->"The Key is not correct. Please "
                                        ->"register WPlay and receive your "
                                        ->"own personal code."
                                  
:0043C5C7 B84CC64300              mov eax, 0043C64C
:0043C5CC E86B40FFFF              call 0043063C
 
SNIP

 Aha ! Nun scrollen wir mal nach oben und schauen mal wo die Fehlermeldung
 aufgerufen wird.
 Das ist bei 0043C5A3.Gut gehen wir nun dorthin.

:0043C584 55                      push ebp
:0043C585 8BEC                    mov ebp, esp
:0043C587 6A00                    push 00000000
:0043C589 53                      push ebx
:0043C58A 56                      push esi
:0043C58B 57                      push edi
:0043C58C 8BD8                    mov ebx, eax
:0043C58E 33C0                    xor eax, eax
:0043C590 55                      push ebp
:0043C591 6802C64300              push 0043C602
:0043C596 64FF30                  push dword ptr fs:[eax]
:0043C599 648920                  mov dword ptr fs:[eax], esp
:0043C59C E8EBFCFFFF              call 0043C28C				; CheckRoutine
:0043C5A1 84C0                    test al, al				; al=0 -> Fehler
:0043C5A3 7417                    je 0043C5BC				; Aufruf der Fehlermeldung
:0043C5A5 6A00                    push 00000000
:0043C5A7 668B0D10C64300          mov cx, word ptr [0043C610]
:0043C5AE B202                    mov dl, 02
 SNIP

 So nun folgen wir mal den CALL in Zeile 0043C59C.

* Referenced by a CALL at Address:
|:0043C59C   
|
:0043C28C 55                      push ebp
:0043C28D 8BEC                    mov ebp, esp
:0043C28F 33C9                    xor ecx, ecx
:0043C291 51                      push ecx
:0043C292 51                      push ecx
:0043C293 51                      push ecx
:0043C294 51                      push ecx
:0043C295 53                      push ebx
:0043C296 56                      push esi
:0043C297 57                      push edi
:0043C298 BF64B74600              mov edi, 0046B764
:0043C29D 33C0                    xor eax, eax
:0043C29F 55                      push ebp
:0043C2A0 6842C54300              push 0043C542
:0043C2A5 64FF30                  push dword ptr fs:[eax]
:0043C2A8 648920                  mov dword ptr fs:[eax], esp
:0043C2AB C645FF00                mov [ebp-01], 00
:0043C2AF 8D55F8                  lea edx, dword ptr [ebp-08]
:0043C2B2 A1F4B64600              mov eax, dword ptr [0046B6F4]
:0043C2B7 8B8028020000            mov eax, dword ptr [eax+00000228]
:0043C2BD E8D26EFDFF              call 00413194
:0043C2C2 8B45F8                  mov eax, dword ptr [ebp-08]
:0043C2C5 E8BA75FCFF              call 00403884
:0043C2CA 83F81E                  cmp eax, 0000001E			; Hat Serial 30 Stellen ?
:0043C2CD 0F854C020000            jne 0043C51F				; wenn nicht Fehler
:0043C2D3 BB01000000              mov ebx, 00000001
:0043C2D8 8BF7                    mov esi, edi

 SNIP

:0043C41A E861FDFFFF              call 0043C180
:0043C41F 3BD8                    cmp ebx, eax				; 1.BP setzen (19.-22. Stelle der Serial wird 														; verglichen)
:0043C421 0F85F8000000            jne 0043C51F				; wenn nicht gleich Fehler (Falsche Serial)
:0043C427 E888FDFFFF              call 0043C1B4
:0043C42C 3BF0                    cmp esi, eax				; 2.BP setzen (23.-30. Stelle der Serial wird hier 													; verglichen) 
:0043C42E 0F85EB000000            jne 0043C51F				; wenn nicht gleich Fehler (Falsche Serial)

-> in edi befindet sich nun unsere Serial

:0043C434 8A4707                  mov al, byte ptr [edi+07]		; 8. Stelle der Serial
:0043C437 E8A8FDFFFF              call 0043C1E4
:0043C43C 83F803                  cmp eax, 00000003			; mu den Wert 3 haben
:0043C43F 0F85DA000000            jne 0043C51F				; wenn nicht gleich Fehler (Falsche Serial)
:0043C445 8A4708                  mov al, byte ptr [edi+08]		; 9. Stelle der Serial
:0043C448 E897FDFFFF              call 0043C1E4
:0043C44D 83F802                  cmp eax, 00000002			; mu den Wert 2 haben
:0043C450 0F85C9000000            jne 0043C51F				; wenn nicht gleich Fehler (Falsche Serial)
:0043C456 807F042D                cmp byte ptr [edi+04], 2D		; 5. Stelle der Serial mu ein "-" sein (Hex=2D)
:0043C45A 0F85BF000000            jne 0043C51F				; wenn nicht gleich Fehler (Falsche Serial)
:0043C460 807F0D2D                cmp byte ptr [edi+0D], 2D		; 14. Stelle der Serial mu wiederum ein "-"
:0043C464 0F85B5000000            jne 0043C51F				; wenn nicht gleich Fehler (Falsche Serial)
:0043C46A 8D45F0                  lea eax, dword ptr [ebp-10]
:0043C46D 8A17                    mov dl, byte ptr [edi]
:0043C46F E8AC73FCFF              call 00403820
:0043C474 8B45F0                  mov eax, dword ptr [ebp-10]
:0043C477 8D55F4                  lea edx, dword ptr [ebp-0C]
:0043C47A E8859BFCFF              call 00406004
:0043C47F 8B45F4                  mov eax, dword ptr [ebp-0C]		; 1.Stelle der Serial
:0043C482 BA5CC54300              mov edx, 0043C55C			; in 0043C55C steht ein "K"
:0043C487 E80875FCFF              call 00403994				; Checkroutine
:0043C48C 0F858D000000            jne 0043C51F				; wenn nicht gleich Fehler (Falsche Serial)
:0043C492 8D45F0                  lea eax, dword ptr [ebp-10]
:0043C495 8A5701                  mov dl, byte ptr [edi+01]
:0043C498 E88373FCFF              call 00403820
:0043C49D 8B45F0                  mov eax, dword ptr [ebp-10]
:0043C4A0 8D55F4                  lea edx, dword ptr [ebp-0C]
:0043C4A3 E85C9BFCFF              call 00406004
:0043C4A8 8B45F4                  mov eax, dword ptr [ebp-0C]		; 2.Stelle der Serial
:0043C4AB BA68C54300              mov edx, 0043C568			; in 0043C568 steht ein "A"
:0043C4B0 E8DF74FCFF              call 00403994				; Checkroutine
:0043C4B5 7568                    jne 0043C51F				; wenn nicht gleich Fehler (Falsche Serial)
:0043C4B7 8D45F0                  lea eax, dword ptr [ebp-10]
:0043C4BA 8A5702                  mov dl, byte ptr [edi+02]
:0043C4BD E85E73FCFF              call 00403820
:0043C4C2 8B45F0                  mov eax, dword ptr [ebp-10]
:0043C4C5 8D55F4                  lea edx, dword ptr [ebp-0C]
:0043C4C8 E8379BFCFF              call 00406004
:0043C4CD 8B45F4                  mov eax, dword ptr [ebp-0C]		; 3.Stelle der Serial
:0043C4D0 BA74C54300              mov edx, 0043C574			; in 0043C574 steht ein "G"
:0043C4D5 E8BA74FCFF              call 00403994				; Checkroutine
:0043C4DA 7543                    jne 0043C51F				; wenn nicht gleich Fehler (Falsche Serial)
:0043C4DC 8D45F0                  lea eax, dword ptr [ebp-10]
:0043C4DF 8A5703                  mov dl, byte ptr [edi+03]
:0043C4E2 E83973FCFF              call 00403820
:0043C4E7 8B45F0                  mov eax, dword ptr [ebp-10]
:0043C4EA 8D55F4                  lea edx, dword ptr [ebp-0C]
:0043C4ED E8129BFCFF              call 00406004
:0043C4F2 8B45F4                  mov eax, dword ptr [ebp-0C]		; 4.Stelle der Serial
:0043C4F5 BA80C54300              mov edx, 0043C580			; in 0043C580 steht ein "I"
:0043C4FA E89574FCFF              call 00403994				; Checkroutine
:0043C4FF 751E                    jne 0043C51F				; wenn nicht gleich Fehler (Falsche Serial)

:0043C501 8A4705                  mov al, byte ptr [edi+05]		; 6. Stelle der Serial
:0043C504 E8DBFCFFFF              call 0043C1E4
:0043C509 83F803                  cmp eax, 00000003			; mu den Wert 3 haben
:0043C50C 7511                    jne 0043C51F				; wenn nicht gleich Fehler (Falsche Serial)
:0043C50E 8A4706                  mov al, byte ptr [edi+06]		; 7. Stelle der Serial
:0043C511 E8CEFCFFFF              call 0043C1E4
:0043C516 83F802                  cmp eax, 00000002			; mu den Wert 2 haben
:0043C519 7504                    jne 0043C51F				; wenn nicht gleich Fehler (Falsche Serial)
:0043C51B C645FF01                mov [ebp-01], 01

 SNIP

5. Nachdem wir nun haben wir genug Info's gesammelt. Lat uns die mal in die 
   Praxis umsetzen:

   1. die Serial mu 30 Stellen haben
   2. an der 6. und 8. Stelle mu eine 3 stehen
   3. an der 7. und 9. Stelle mu eine 2 stehen
   4. an der 5. Und 14. Stelle steht ein Bindestrich
   5. die ersten 4 Stellen sind eine feste Gre (KAGI)

   Wir knnen also nun unsere Fake-Serial erstellen, um nur noch die fehlenden
   Stellen herauszubekommen. Fr die fehlenden Stellen nehmen wir beliebige
   Zahlen oder Buchstaben (am besten wie folgt)

	Fake-Serial: KAGI-32321111-1234567890ABCDEF 

   Nun setzen unsere Breakpoints und starten "WPlay" im Debugger.

   Als Serial nehmen wir unsere Fake-Serial. So nun [Check Key] drcken. 
   Wow,das Programm stoppt beim 1.Breakpoint (Adresse 0043C41F).
   Nun schauen wir uns mal den Inhalt der Registeradressen [ebx] und [eax] an.

   ebx    : 00005678(h)       -> 19.- 22. Stelle unserer Fake-Serial
   eax    : 0000A2AC(h)       -> 19.- 22. Stelle der richtigen Serial ?

   So, damit wir im Programm weiter kommen (und keine Fehlermeldung erhalten
   wollen) mssen wir den Registerinhalt von ebx verndern. Dazu klicken wir
   Modify Data , geben bei Enter Value -> 0000A2AC ein, klicken auf ebx 
   und besttigen das ganze mit einem Klick auf `Modify. Nun drcken F9 und 
   gelangen somit zum 2.Breakpoint (Adresse 0043C42C). Wir schauen uns den Inhalt
   der Register [esi] und [eax] an.
   
   esi    : 90ABCDEF(h)       -> 23.- 30. Stelle unserer Fake-Serial
   eax    : 06535EF3(h)       -> 23.- 30. Stelle der richtigen Serial ?

   Wir haben somit eine vorlufige Serial gefunden.

             Fake-Serial      : KAGI-32321111-1234567890ABCDEF
             vorlufige Serial: KAGI-32321111-1234A2AC06535EF3

   Diese vorlufige Serial geben wir nun in der Register-Box von Wplay ein.
   Aber was sehen wir denn da ? Die vorlufige Serial ist falsch !!!

   Also starten wir das Programm wieder im Debugger (unsere Breakpoints mssen
   noch aktiv sein). Diesmal arbeiten wir mit der vorlufigen Serial, also
   schnell reingehmmert und auf [Check Key] klicken.
   Das Programm stoppt wieder beim 1.Breakpoint und wir sehen uns gleich mal
   Die Register [ebx] und [eax] an.
   
   ebx    : 0000A2AC(h)       -> 19.- 22. Stelle unserer vorlufigen Serial
   eax    : 0000A2AC(h)       -> 19.- 22. Stelle der richtigen Serial ?

   Anscheinend ist nicht die ganze Serial verkehrt, sondern wohl nur wenige
   Zahlen. Wir tracen also mit F9 einfach bis zum 2.Breakpoint und dort sehen
   wir in die Register [esi] und [eax].

   esi    : 06535EF3(h)       -> 23.- 30. Stelle unserer vorlufigen Serial
   eax    : F73D6C87(h)       -> 23.- 30. Stelle der richtigen Serial ?

   Somit ergibt sich eine neue Serial:

                          KAGI-32321111-1234A2ACF73D6C87

   Wir deaktivieren nun alle Breakpoints und geben diese Serial in Wplay ein.
   Siehe da, ein nettes Fenster mit dem Hinweis "You are a registered user.
   Thank you !" erscheint.

   Unsere Aufgabe ist somit erfllt und ich hoffe Ihr konntet mal wieder was
   Lernen.

8. Hinweis :

   Nach erfolgreicher Registrierung schreibt Wplay die Registrierdaten
   unverschlsselt in die Datei "wplay.ini" im "Wplay"-Verzeichnis !


Viel Spa beim CRACKEN!
Vanor [DOOM]
07.04.1999


 