Zoom Icon

Corso UIC Newbies 02 Kyr0n3

From UIC

Corso UIC Newbies 02 Kyr0n3

Contents


Infos
Author: Kyr0n3
Email: Email
Website: Home page
Date: 15/06/2000 (dd/mm/yyyy)
Level: Working brain required
Language: Italian Image:Flag_Italian.gif
Comments: Commenti, se volete



Introduzione

In questa lezione si affrontano tre CrackMe (programmuzzi consistenti nella sola protezione da bypassare) che vi introdurranno nel magico mondo del Cracking/Reverse Engineering.

Questa è la mia prima performance dal momento in cui mi sono iscritto all'UIC, avevo provato ad affrontare la Lezione 1, ma sono talmente sfigato/newbie che non ci sono riuscito... proprio così sono un NewBie Totalone, non so neanche programmare ed è per questo che più che reversare crackerò per il momento, quando comincierò a saperne un po' di più di ASM e affini comincierò a fare sul serio... per adesso rido... ma più che altro *faccio ridere* :-)


Tools


Link e Riferimenti

Questo è il Corso UIC Newbies n°02 disponibile alla pagina Corsi UIC Newbies


Essay

Essay Tin suggerisce di usare il W32Dasm, ma io da newbie con forti tendenze al lamerismo, che tra l'altro mi sento un fico, voglio provare ad usare SoftIce che mi eccita di più del W32...

Cominciamo: szippati i crackme; doppio click su CrackMe1... Arriva subito il target: questo simpatico 'NAG SCREEN' (non sto urlando...) che chiede di essere sodomizzato... paletto in mano, avanti tutta!!

Per vedere da dove posso cominciare clicco col tasto destro del mouse su Crackme1 e seleziono anteprima per controllare a quali 'API' si appoggia il prog., me le segno con l'intenzione di provarle tutte una ad una [fortuna che sono poche... :-)] 'CTRL+D' per chiamare Sice (SoftIce), inserisco un bpx (Breakpoint) sulla prima funzione della lista (GetModuleHandleA) perciò il comando per Sice è: bpx getmodulehandlea, poi schiaccio F5 per uscire da Sice quindi avvio il crackme e... 'PpOpP': una botta di culo fa sì che sia proprio la funzione che chiama il nag. Schiaccio F11 perché ho letto che si fa così (non scherzo, non so *esattamente* perché, cmq si fa per uscire dalla chiamata... (di chi, di che...? Boh!), poi steppo con F12 fino a leggere nella riga verde in basso tra il codice ed il box dove si inseriscono i comandi 'Crackme...' che vuol dire che sono entrato nel codice del prog., ecco la chiamata che ho bpxato:

cs:00401002 call Kernel32!GetModuleHandleA

Mi segno l'OPCODE [che sarebbe il numero esadecimale tra 00401002 e CALL... e che non riporto perché il Que dice di evitare (why?)], indi avvio Hiew e lo cerco (l'op) con il tasto F7 inserendolo nella riga sotto (HEX:...), adesso che ci sono sopra [sempre all'op :-)] schiaccio F3 per editare ed inserisco tante istruzioni 'NOP' (Not Operation = nessuna operazioni) quante ne servono per sovrascrivere l'op della call, perciò 90 (che è il codice esadecimale relativo all'istruzione asm nop) per cinque volte. Adesso F9 per salvare e F10 per uscire da Hiew... Apro Sice per levare il bpx (comando 'BC0'), F5 per uscire da Sice... Doppio click su Crackme1 e surprise: il nag poppa e la finestra del prog. no... che cazzo ho fatto?! :-[

Riszippo il crackme e lo riapro, ripeto la solfetta con Sice e mi guardo il codice nella sua nudità [voyerismo...? :-)] ...qualche riga dopo la call di prima ce n'è un'altra:

cs:0040101E call User32!MessageBoxA

Faccio a questa call quello che ho fatto all'altra (Hiew... Seek & Destroy OP... Update...). CrackMe1 SpUtTaNaTo... Fico! :-9

Il CracMe2 chiede un seriale... do un'occhiata all'anteprima del file (vedi inizio crackme1) e vedo che usa le stesse api del primo. Apro Sice e metto un bpx messageboxa, non inserisco nessun serial (lascio la scritta che c'è già: "Enter Serial Here") e clicco su OK. Sice poppa, F11, arriva il nag 'wrong serial', clicco OK e Sice ripoppa nel codice all'istruzione successiva alla call bpxata. Faccio un po' di backtrace (scorro il codice sopra alla call in cerca di qualche JMP = salto) e trovo:

cs:004011A7 call User32!GetWindowTextLengthA
cs:004011AC mov [004020E9], eax
cs:004011B1 mov esi, eax
cs:004011B3 cmp esi, 0C
cs:004011B6 jnz 004011D6

Ma vuoi vedere che il bpx lo dovevo mettere su questa di call... Vabbè, cmq questo è il punto da massacrare, e più precisamente il salto condizionato (JNZ) che ci manda al nag d'errore. Apro il Crackme in Hiew, vado sull'op, lo noppo (90 per due volte), lo salvo e me la rido... :-))))))))

Crackme3, altro serial, altra anteprima stesse api (bzzzzzzz...). Questa volta il bpx lo schiaffo su GetWindowTextLengthA, F5, schiaccio Ok senza inserire niente e Sice poppa, F11 e mi ritrovo nel codicillo di questo terzo Crackme... Questa volta non traccio indietro perché i vari salti me li trovo sotto... e sono una marea!! Cmq, per reversare me li dovrei analizzare uno ad uno, ma come ho già detto ancora non ci capisco un granché, quindi al posto del primo JNZ...

cs:004011BB jnz 0040121C

Metto un JMP che porti a 004011FE, cioè subito dopo l'ultimo JNZ...


cs:004011FE push 30

che dovrebbe essere il push per il nag di congratulazioni... Procedo: apro il CrackMe3 in Hiew, vado sull'op, F3 e poi F2 (così posso inserire direttamente il codice asm. Anche perché l'op di jmp 004011FE non lo conosco...). Finito ciò schiaccio ESC, F9, F10. Riapro il Crackme, non inserisco niente e clicco OK... AZZZ!!! Winzozzone98 dice che il prog. ha eseguito un'operazione non valida... mi sa che stavolta non è colpa di Bill (ULP...!). Provo a mettere il JMP un po' dappertutto ma ottengo sempre la stessa message box (quella di winzoz), dopo svariati tentativi decido che l'unica via è quella di cambiare ogni singolo JNZ in JZ, procedo come ho già fatto per il jmp (editando le istruzioni in Hiew direttamente in asm), salvo il tutto, da adesso in poi il nag d'errore uscirà solo con il serial giusto oppure con un serial di 18 caratteri (il primo CMP...


cs:004011B8 cmp esi, 12

confronta il seriale inserito con 12 esadecimale, cioè 18 decimale, quindi se prima con 18 caratteri andava bene (con JNZ) adesso non più...!)

Finito... lo so... è una soluzione da... come dire... da newbie... però... è quello che sono, no?! ;-)

Byz, Kyr0n3

P.S. Scusate le lamerate, maturerò presto, in tutti i sensi... :-]


Note Finali

Vorrei ringraziare tutti coloro che in ML hanno aiutato la mia "Crisi SoftIce 4.05", in particolare Phobos (tnx!) e poi il creatore di tutto ciò: il Quequero nazionale senza il quale non sarei qui a scrivere di cose che fino a tre settimane fa neanche pensavo possibili... Grazie Que (non è una leccata, anche perché a che cazzo mi servirebbe?) Alla prossima raga, posso? Ma sì dai... Ciauzzz a tutti!


Disclaimer

I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.

Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.