MP3-Wolf 1.05
a caccia del seriale

Data

by Kurdt Kobain

 

15/07/2001

UIC's Home Page

Published by Quequero

It's better to burn out than to fade away

Ma sbaglio o ti vedo particolarmente Nirvana-Addicted? :P

Gabba Gabba Hey !

....

RIP_Kurdt su IRC/#crack.it

....

Difficoltà

(x)NewBies ( )Intermedio ( )Avanzato ( )Master

 

 


 
MP3-Wolf 1.05
a caccia del seriale

Written by Kurdt Kobain

Introduzione

Davvero sorprendente! Questa è l'esatta copia di ImageWolf almeno per quanto riguarda l'aspetto! Complimenti a quelli della Trellian x il bellissimo banner che compare nella parte superiore del programma! Dovreste vederlo, è ancora più bello di quello di ImageWolf.  

Tools usati

SoftIce

URL o FTP del programma

 
http://www.trellian.com/mwolf/index.phpl

Notizie sul programma

E' un semplicissimo motore di ricerca non solo per file mp3 ma anche per wav, midi, mp2, ecc...

Essay

 

Mi sono davvero stupito quando ho preso il Sice ed ho cominciato a debuggare questo programma ... la protezione è esattamente identica a quella di ImageWolf, quindi dato che avevo già trovato il # per questo prog. partivo avvantaggiato. Come al solito accediamo al box di registrazione, inseriamo un nome, un seriale, entriamo in Sice, settiamo un bp sulla funzione GetDlgItemTextA, usciamo, clickiamo su OK e Sice poppa.

 

:00406F98        push 00000414
:00406F9D        push [ebp+08]
:00406FA0        call esi <- = call User32!GetDlgItemTextA
:00406FA2        lea eax, dword ptr [ebp+FFFFFF00]
:00406FA8        push 00000050
:00406FAA        push eax
:00406FAB        push 00000405
:00406FB0        push [ebp+08]
:00406FB3        call esi <- = call User32!GetDlgItemTextA
:00406FB5        lea eax, dword ptr [ebp-80]

 

Sia all'indirizzo 406FA0 sia all'indirizzo 406FB3 abbiamo due call esi che in realtà corrispondono alla chiamata alla funzione su cui abbiamo brekato, infatti qualche riga prima c'era un'istruzione di questo tipo: 

 

:00406F8C        mov esi, User32!GetDlgItemTextA

 

Qualche comando più in là vediamo qualcosa di interessante:

 

 

:00406FF5        lea eax,[ebp-100] 
:00406FFB        push eax <- puntato da eax abbiamo il nostro nome
:00406FFC        call 0040F290
:00407001        lea eax,[ebp-80] 
:00407004        push eax <- qui il seriale
:00407005        call 0040F290
:0040700A        lea eax,[ebp-80] 
:0040700D        push eax <- seriale
:0040700E        lea eax,[ebp-100]
:00407014        push eax <- nome
:00407015        call 004077C0 <- chiamata con generazione e confronto seriali
:0040701A        add esp, 00000010
:0040701D        test eax, eax <- controlla se eax = 0
:0040701F        jne 00407061 <- salta se non lo è (seriale giusto)

 

Adesso dobbiamo entrare nella call per vedere cosa succede. 

 

:004077DF        cmp byte ptr [edi], 4D <- confronto con M
:004077E2        jne 004078F3
<- salta alla fine della call senza nemmeno controllare il resto del seriale
:004077E8        cmp byte ptr [edi+01], 57
<- confronto con W
:004077EC        jne 004078F3
<- anche qui salta alla fine della call senza nemmeno controllare il resto del seriale se non trova la W
:004077F2        push 0000002D
<- 2D = -

 

Come si può vedere da queste righe il codice numerico deve essere preceduto dalle lettere MW e da un "-". Se non abbiamo inserito il codice nella forma MW-xxx dobbiamo uscire da Sice, correggere il seriale e ricominciare da capo con il debuggin. 

 

Ora dato che abbiamo inserito anche la M, la W e il - possiamo continuare fino a questo punto:  

 

:0040787B        mov cl, byte ptr [edx] <- char del nome in cl
:0040787D        test cl, cl
<- controlla se è zero
:0040787F        je 00407893
:00407881        xor eax, eax
:00407883        add cl, 08
:00407886        xor byte ptr [ebp+eax-08], cl
<- da qui...
:0040788A        inc eax
:0040788B        cmp eax, 04
:0040788E        jl 00407886
<- ...a qui viene ripetuto 4 volte
:00407890        inc edx
<- char seguente
:00407891        jmp 0040787B
:00407893        mov eax, dword ptr [ebp-08]
<- in eax abbiamo il nostro seriale seguito da altre cifre che poi verrano eliminate
:00407896        test eax, eax
:00407898        jge 0040789E

 

Gli unici calcoli effettuati sui char del nome si trovano agli indirizzi 407883 (una semplice addizzione) e 407886 (uno xor ripetuto x 4 volte x ogni char).

 

:004078B8        cmp eax, ecx <- confronta eax con ecx (ecx= 999999h)
:004078BA        jle 004078C4
<- salta se inferiore o uguale
:004078BC        push 0A
<- prepara il divisore
:004078BE        cdq
<- divide eax x 0Ah (10d)
:004078BF        pop esi
:004078C0        idiv esi
:004078C2        jmp 004078B8
<- ritorna sopra

 

Questi comandi eliminano uno ad uno le cifre del seriale in eccedenza fino a portarle a 6 (il limite è rappresentato da 999999d = F423Fh, appunto il valore massimo a 6 cifre).

 

:004078C4        push eax <- con ? eax possiamo già vedere il seriale esatto
:004078C5        push 0041B1A4
:004078CA        lea eax, dword ptr [ebp-70]
:004078CD        push 00000014
:004078CF        push eax
:004078D0        call 00411088
<- confronto seriali e caricamento in memoria di quello esatto
:004078D5        add esp, 00000010
:004078D8        inc ebx
:004078D9        lea eax, dword ptr [ebp-70]
<- ora eax punta il seriale esatto
:004078DC        push ebx
:004078DD        push eax

 

Finalmente possiamo vedere il seriale che cercavamo. Poche istruzioni dopo c'è una chiamata che dovrebbe confrontare i due seriali (presi entrambi senza MW-). Alla fine della call se i due seriali corrispondono avremo in eax il valore 1, in caso contrario 0. Poi abbiamo il ret e il controllo finale che va a vedere proprio il valore di eax (salto registrazione, no salto no registrazione)! Adesso uscite da Sice, cambiate il seriale che avevate inserito con quello appena trovato ed ora siete registrati. Complimenti! 

 

Kurdt Kobain


 

 

Note finali

 

Davvero bravi quelli della Trellian, hanno fatto una serie di programmi tutti con la stessa protezione, le uniche cose che cambiano sono gli indirizzi, quindi non dovrebbe essere difficile provare a trovare il seriale per gli altri programmi leggendo questo tute.

Vorrei ringraziare tutti quelli della UIC e quelli della Trellian, non x il programma ma x il banner ... è troppo bello! Ciao

 

 

NIRVANA

 

 

Disclaimer

Vorrei ricordare che il software va comprato e  non fregato, dovete registrare il vostro prodotto dopo il periodo di valutazione. Non mi ritengo responsabile per eventuali danni causati al vostro computer determinati dall'uso improprio di questo tutorial. Questo documento è stato scritto per invogliare il consumatore a non registrare illegalmente i propri programmi, e non a fargli fare uso dei tantissimi file crack presenti in rete, infatti tale documento aiuta a comprendere lo sforzo immane che ogni singolo programmatore ha dovuto portare avanti per fornire ai rispettivi consumatori i migliori prodotti possibili.

Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly.