▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
▓                               [x] RingZ3r0  Proudly Presents [x]                            ▓
▒                ┌───────────────────────────────────────────────────────────                 ▒
                 │                    ENALOTTO 3.0 Crack                    │
                                            Pusillus
                                          13 gen 1999

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 molti siti dedicati al cracking)
   HIEW            (hacker view, editor esadecimale)
 
--> 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!!!