MP3-Wolf
1.05 | ||
Data |
by Kurdt Kobain |
|
15/07/2001 |
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 ! |
.... |
|
.... |
Difficoltà |
(x)NewBies ( )Intermedio ( )Avanzato ( )Master |
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 |
URL o FTP del programma |
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.