"3DMark è un benchmark che focalizza
le sue potenzialità sulla misurazione delle prestazioni 3D delle
nuove schede."
Parliamo del sistema di registrazione
La registrazione avviene tramite un box all'interno
del menù "Register" "Register 3DMark...", vengono richiesti:-
Nome
:
Numero seriale :
Il codice di registrazione
viene calcolato in base al nome. Il seriale è composto da 15 caratteri
alfanumerici (tutti maiuscoli) che assumono questa forma: XXXXX-XXXXX-XXXXX
Una volta registrato
il programma salva il nome ed il serial in:
Non copiare
il mio numero ma creane uno da solo, non credi sia più divertente
ed utile?
Vediamo cosa possiamo fare
Vediamo che possiamo fare, per prima cosa
apriamo il menu di registrazione e vediamo come è composto, fatto
ciò inseriamo un nome "Quequero" ed un numero, in genere io uso
"666111666", apriamo softice con ^D, piazziamo un breakpoint sulla funzione
GetWindowTextA (la A stà ad indicare che si vuole brekkare sulla
funzione a 32-bit), usciamo con F5 e clicchiamo su "OK", come speravamo
softice brekka sulla funzione, premiamo F11 per uscirne fuori e guardiamo...guardiamo..guardiamo...
Dunque, la prima schermata non sembra avere
nulla di sospetto allora premiamo F12, ancora una volta e poi altre tre,
in tutto 5 volte, a questo punto dovremmo trovarci davanti a questa sezione
di codice:
* Reference To: MFC42.Ordinal:18BE,
Ord:18BEh
|
:00405C87 E856E30800
Call 00493FE2
:00405C8C 8B4F64
mov ecx, dword ptr [edi+64]<----- Approdiamo
qui
; Edi+64 e Ecx contengono
; il nostro nome
:00405C8F 8B41F8
mov eax, dword ptr [ecx-08]
:00405C92 85C0
test eax, eax<---Controlla che i box siano
pieni
:00405C94 0F8493000000
je 00405D2D<----se è no allora "Beggar
off"
:00405CA8 83F811
cmp eax, 00000011<----17 caratteri nel box
del # ?
:00405CAB 741D
je 00405CCA<---se si salta altrimenti "Beggar
off"
:00405CAD 6A00
push 00000000
:00405CAF 6A00
push 00000000
* Possible Reference to String Resource
ID=61598: "Incorrect registration information. Please enter the correct..."
|
:00405CB1 689EF00000
push 0000F09E
:00405CB6 B950D44B00
mov ecx, 004BD450<----Genera il messagebox
:00405CBB E8E04E0400
call 0044ABA0
:00405CC0 50 push eax
Spero che vi stiate chiedendo:"Perchè
sto' tizio s'è fermato dopo aver premuto per 5 volte F12?"
La risposta è semplicissima: Ho disassemblato
il prg con W32DASM ed ho cercato la "Beggar off" cioè: "Incorrect
registration information ecc..."
Il disassembler mi ha mostrato questo pezzo
di codice ed io l'ho trovato col softice ok?
Spero proprio di si, continuando, dicevo che
siamo arrivati alla funzione mov ecx, dword ptr [edi+64],
dove edi+64 contiene il nostro nome, per verificarlo basta premere una
volta F10, scrivere "d edi+64", prendere i primi 4 byte (EC 5B 91 00) e
riscriverli al contrario, cioè: "d 00915BEC", premere ok ed ecco
il nome, facendo step troviamo all'indirizzo 00405C92 un test che controlla
la presenza di caratteri nei box del nome e del seriale, andiamo avanti
finchè non giungiamo all'istruzione cmp eax, 11; questa istruzione
controlla che i caratteri siano 17 (11h=17 decimale) cioè 15 alfanumerici
più 2 "-", benissimo, cancelliamo tutti i bp con bc*, piazziamone
uno su 015F:00405CA8 ed usciamo dal debugger, scriviamo un numero come:
12345-12345-12345, premiamo ok e vediamo che ora la funzione non salta
più, arriviamo al JE 00405CCA ed ora saltiamo, dovremmo avere questo
codice:
* Referenced by a (U)nconditional
or (C)onditional Jump at Address:
|:00405CAB(C)
|
:00405CCA E8D1FBFFFF
call 004058A0
:00405CCF 8B7760
mov esi, dword ptr [edi+60]
* Referenced by a (U)nconditional
or (C)onditional Jump at Address:
Facciamo una volta step ed esaminiamo eax,
BINGO!!! Contiene il numero che cercavamo, adesso potremmo continuare ad
esaminare il codice per eliminare il # check e fargli accettare qualunque
carattere giusto?
NO, ora noi faremo in modo di far apparire
il giusto codice al posto della "Beggar off", ma come? Seguitemi...
Basta cambiare la chiamata call
0044ABA0 in call 004058A0 e sostituire
mov ecx, 004BD450 con mov
eax, 004BB4A0, con questo cambiamento facciamo
assumere ad eax il valore che conterrebbe il vero serial e lo mettiamo
su schermo, in questo modo dovremmo necessariamente inserire un nome ed
un numero qualsiasi per far apparire il box, per comodità potremmo
noppare il salto dopo il check che controlla il numero dei caratteri e
quelli che controllano la presenza di caratteri nei box, non è comunque
necessario, basta ricordarsi di inserire un nome qualunque ed un numero
a piacere che non abbia 17 cifre.
Il
'Crack'
Sostituire:
000050B0
B950D44B00E8E04E0400
con:
000050B0
B8A0B44B00E8E0FBFFFF
Questi sono
opzionali:
0004C410
83F8040F84930000008B0EE8
000050A0
85C00F848500000083F811741D6A00
con:
0004C410
83F8049090909090908B0EE8
000050A0
85C090909090909083F81190906A00
Se noppiamo
anche questi salti si dovrà inserire solo il nome.
Note
Eccoci alla conclusione,
oggi abbiamo dimostrato come un prog può essere attaccato da più
lati e con soluzioni differenti, in questo tutorial abbiamo massaggiato
leggermente il codice del programma, ciò non si dovrebbe fare perchè
si potrebbe alterare qualche funzione (ovviamente qui non ci sono problemi).
Questa tecnica può
essere applicata in quasi tutti i prog, quindi divertitevi ed a presto...
Ringrazio ED!SON per il suo magnifico tutorial
e The Sandman che mi ha aiutato a capire come funzionavano i sistemi di
protezione.
Dho!
Vorrei ricordare che questo documento è
stato scritto solo a scopo didattico e che il software va comprato e non
rubato.
Se stai cercando crack o simili sei pregato
di andare altrove.