Gennaio 1999 |
"3DMark 99
Pro" |
Win '9x PROGRAM
Win Code Reversing |
|
by Quequero
|
|
|
Code Reversing |
|
|
Dove si trova: Qui
Dimensione: 15.4Mb
|
|
|
- Programmi usati: Softice
3.2 - Debugger
-
W32DASM
|
|
Difficolt� |
Easiest ( ) Easy ( X ) Medium
( ) Hard ( ) Pro ( ) |
There is a
crack, a crack in everything. That's how the light gets in.(The Sandman) |
3DMark 99
( Un modo coreografico di craccare un prg )
Scritto da Quequero
- Gli autori di questo programma possono essere contattati
su: http://www.3dmark.com
Cosa dicono gli autori:
- "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:
HKEY_LOCAL_MACHINE/Software/Futuremark Corporation/3DMark Registration
-
- RegKey "KDUN2-8DBTU-K8KV9"
- RegName "Quequero"
-
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"
:00405C9A 8B4760 mov eax, dword ptr
[edi+60]<---edi+60 = 666111666
:00405C9D 8B40F8 mov eax, dword ptr
[eax-08]
:00405CA0 85C0 test eax, eax
:00405CA2 0F8485000000 je 00405D2D
: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:
|:00405CF4(C)
|
:00405CD2
8A10 mov dl, byte ptr [eax]<--BINGO!!! Eax contiene il #
:00405CD4
8A1E mov bl, byte ptr [esi]
:00405CD6
8ACA mov cl, dl
:00405CD8
3AD3 cmp dl, bl
:00405CDA
751E jne 00405CFA
:00405CDC
84C9 test cl, cl
:00405CDE
7416 je 00405CF6
:00405CE0
8A5001 mov dl, byte ptr [eax+01]
:00405CE3
8A5E01 mov bl, byte ptr [esi+01]
:00405CE6
8ACA mov cl, dl
:00405CE8
3AD3 cmp dl, bl
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.
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.
- 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.
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.
Ciao e buon Crack a tutti.
Quequero.
Per eventuali comunicazioni o segnalazioni il mio indirizzo �: [email protected]