ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
                                  ² [x] RingZ3r0 Proudly Presents [x] ²
± ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ±
                                        ENALOTTO 3.0 Crack
                                        Pusillus
                                        13 gen 1999
------------------------------------------------------------------------------------------------------------
Tutorial dedicato al cracking, protezione abbastanza semplice, adatto per NewBies
Quequero
------------------------------------------------------------------------------------------------------------
 
L'AUTORE DI QUESTO TESTO NON SI PRENDE NESSUNA RESPONSABILITA' PER L'USO
CHE NE VERRA' FATTO POICHE' E' STATO ESPRESSAMENTE CONCEPITO PER PURI
SCOPI DITATTICI.

--> CRACKING TUTORIAL
data la poca difficolta di Questo tutorial è consigliato a chi è alle
primissime esperienze.

--> TOOLS NECESSARI

W32DASM 8.9 (reperibile su questo stesso sito NdQ)
HIEW (hacker view, editor esadecimale, (troverete anch'esso qui NdQ))

--> PROGRAMMA TARGET

ENALOTTO BETA 3.0 (http://www.daniele.net)

Il programma "target" e' un tool per lo sviluppo delle schedine
enalotto.


1) Installiamo il programma.

2) Proviamo a fare uno sviluppo di schedine abbastanza impegnativo.
Apparira' una messagebox con la scritta: "Con la versione beta e'
possibile inserire max 12 numeri".
Continuando ad usare il programma arriviamo al menu:
"Sistemi Ortogonali--->Applica sistema" e anche qui selezionando i vari
sistemi disponibili otteniamo una bella messagebox: " Con la versione
beta e' possibile applicare solo il sistema num10g5.ass"
Caspita, questo programma non funziona molto bene! cerchiamo di
migliorarlo!

3) Prendiamo nota del testo delle messagebox :"Con la versione beta e'..."
Chiudiamo il programma e facciamo una copia di enalotto.exe.
Lanciamo w32dasm e disassembliamo la copia che abbiamo appena fatto.
Tramite il menu' "Refs" e il sottomenu' "String Data references"
apriremo la lista delle stringhe di testo usate dal programma.
Andiamo a cercare il messaggio di cui abbiamo preso nota, puntiamolo
con il mouse e diamogli un doppio click.
Nella finestra principale di W32dasm apparira la parte di codice in
cui e' contenuta la stringa in questione:

----------------------------------
:00464C00 50 push eax
:00464C01 E8C8260500 call 004B72CE
:00464C06 8B4C2454 mov ecx, dword ptr [esp+54]

* Possible StringData Ref from Data Obj ->"num10g5"
|
:00464C0A 68305B5000 push 00505B30
:00464C0F 51 push ecx
:00464C10 E82BC30300 call 004A0F40
:00464C15 83C408 add esp, 00000008
:00464C18 F7D8 neg eax
:00464C1A 1BC0 sbb eax, eax
:00464C1C F7D8 neg eax
:00464C1E 84C0 test al, al
:00464C20 0F84CE000000 je 00464CF4
:00464C26 6A30 push 00000030
:00464C28 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Con la versine beta e' possibile "
->"applicare solo il sistema num10g5.ass"
|
:00464C2A 68E85A5000 push 00505AE8
:00464C2F 8BCD mov ecx, ebp
:00464C31 E84BAE0500 call 004BFA81

-----------------------------------

Una piccola delucidazione per chi non conosce nulla sulla sintassi
dell'output fornito dal disassemblatore:

:0043E30D 83FA64 cmp edx, 00000064
| | |
| | - Codice Mnemonico
| - Istruzione (base Hex)
- indirizzo del codice (base Hex)

Cerchiamo di capire cosa combina il programma prima di visualizzare la
famigerata messagebox:
All'indirizzo 00464C20 c'e' un'istruzione molto interessante: JE 00464CF4;
questo comando dice che deve essere eseguito un salto al verificarsi
di una particolare condizione e cioe' quando l'ultima operazione eseguita
risulta uguale ( JE Jump if Equal ).

(Se fosse eseguito il salto (je) il programma non processerebbe la stringa
e non sarebbe eseguta la call:
:00464C31 E84BAE0500 call 004BFA81
se seguite la call cn il wdasm vi accorgete che verra' invocato il comando
messageboxa).

Torniamo al nostro JE: Mmmm... minore o uguale a cosa?
Le istruzioni di salto sono condizionate dallo stato del registro di flag
che contiene svariate informazioni sul risultato dell'ultima operazione
eseguita dalla CPU. L'ultima operaziene eseguita dalla CPU e' quella
appena sopra l'struzione di je:

:00464C1E 84C0 test al, al

il comado TEST fa un and logico tra i due operandi e modifica solo il
registro di flag senza salvare il risultato dell'operazione. dando uno
sguardo al codice si intuisce che il programma non fa altro che comparare
il nome del file ammesso con quello selezionato:

:00464C06 8B4C2454 mov ecx, dword ptr [esp+54]

* Possible StringData Ref from Data Obj ->"num10g5"
|
:00464C0A 68305B5000 push 00505B30
:00464C0F 51 push ecx
:00464C10 E82BC30300 call 004A0F40
:00464C15 83C408 add esp, 00000008

il risultato di questa operazione viene salvato in AL e il programma con
TEST controlla l'esito della comparazione.
Bene andiamo a controllare cosa succede se viene eseguito il salto:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00464C20(C)
|
:00464CF4 81FBFC000000 cmp ebx, 000000FC
:00464CFA 0F84CE000000 je 00464DCE
:00464D00 6A30 push 00000030
:00464D02 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Il sistema non e' il num10g5.ass"
|
:00464D04 68C45A5000 push 00505AC4
:00464D09 8BCD mov ecx, ebp
:00464D0B E871AD0500 call 004BFA81


pare che venga eseguito un ulteriore controllo e alla riga 00464CFA c'e' un altro
salto... il principio e' del tutto analogo al controllo già esaminato.


Il modo piu semplice per eludere il controllo del nome del file è quello
di sostituire l'istruzione di salto condizionato con una di salto
incondizionato.

Con la barra verde spostiamoci sulla riga:

:00464C20 0F84CE000000 je 00464CF4

sulla riga di stato c'e' un'informazione di cui dobbiamo prendere nota:
l'indirizzo assoluto dell'istruzione in evidenza: @Offset00064020.
Eseguamo la stessa operazione per l'altra riga:
:00464CFA 0F84CE000000 je 00464DCE
l'offset è 000640FA.

Il controllo sull'nserimento massimo di 12 numeri è ancora più semplice:

----------------
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00457489(C)
|
:0045749F 83F80C cmp eax, 0000000C
:004574A2 7E14 jle 004574B8
:004574A4 6A30 push 00000030
:004574A6 53 push ebx

* Possible StringData Ref from Data Obj ->"Con la versione beta e' possibile "
->"inserire max 12 numeri!"
|
:004574A7 68F4565000 push 005056F4
:004574AC 8BCE mov ecx, esi
:004574AE E8CE850600 call 004BFA81
-----------------

Alla riga 0045749F viene comparato il contenuto di eax con il valore 0C che
guarda caso in decimale corrisponde a 12. Alla riga 004574A2 viene eseguito
un salto JLE (jump if less or equal), cioe se il registro di flag indica che
il risultato dell'ultima operazione è minore o uguale a 12.
basterà forzare anche qui il salto ;)
Come al solito prendiamo nota dell'offset alla riga che sarà modificata: 000568A2


4) Adesso andremo ad effettuare le modifiche sull'eseguibile:
Apriamo con HIEW il programma 'ENALOTTO.exe'.
Settiamo l'editor in modalita' "DECODE" con la sequenza dei tasti F4, F3.
Adesso dobbiamo spostarci all'indirizzo dove andremo a fare la modifica
premiamo F5 e inseriamo l'Offset di cui abbiamo preso nota 00064020.
Una volta dato l'invio saremo alla posizione desiderata. A questo
punto ci troveremo col cursore sul codice 0F84CE000000. Premiamo il tasto F3
e entriamo in modalita "EDIT". premendo F2 e' possibile operare con i codici
mnemonici, penserà HIEW a sostituirli con i corrispettivi codici HEX.
sostituiamo il "je" con un "jmp" ed il gioco e' fatto, attenzione però come si
potrà notare i due comandi utilizzano un diveso nomero di bytes e l'editor
ha spostato a capo gli ultimi due "00" andando ad incasinare il comado che seguiva.
Anche se in questo caso non sarebbe accaduto nulla, perche il codice sotto al
"jmp" non verrà mai eseguito, è sempre bene lavorare ordinatamente quindi
modifichiamo il "00" in "90" che corrisponde ad un NOP (no operation, un ciclo
a vuoto per la CPU).
premiamo F9 per rendere effettiva la modifica.

Le stesse operazioni vanno eseguite per il comando che e' all'offsett
000640FA.

Spostiamoci all'indirizzo 000568A2 qui basterà sostituire il "jle" con un "jmps"
per bypassare il controllo.




5) Usciamo da HIEW e rilanciamo ENALOTTO. Si potrà constatare che le limitazioni
non ci sono più :))

questo è tutto!

VI INVITO A CANCELLARE IL PROGRAMMA SE NON AVETE INTENZIONE DI ACQUISTARLO!!!

============================================================================
Copyright:

Questo testo può essere liberamente divulgato a patto di non essere modificato in nessuna sua parte.
La presente copia in particolare è riservata al progetto UIC su richiesta di Quequero.
============================================================================

Pusillus