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
 
 

Introduzione

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.
 

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.

Ciao e buon Crack a tutti.

Quequero.

Per eventuali comunicazioni o segnalazioni il mio indirizzo �: [email protected]