Salve... questo è un articolo che pubblicai su www.ebeteinfiore.it (un sito del mio paese :-).
Ho deciso di riproporlo qua... spero che vi piaccia. E? molto semplice e di facile comprendonio per tutti (almeno spero). E' scritto per tutti (anche per quelli che non hanno mai visto assembler in vita loro...)
Oggi giorno, con l'avanzare dell'informatica e delle teconologie, sopratutto con la grandissima diffusione di software piratato, si sente spesso parlare di crack... non è della droga che parlo, ma di come ad esempio, funzionano i programmini che vi danno il codice seriale per registrare un software, o di come, ad esempio, funzionano i programmi per far partire un videogame masterizzato senza cd... il punto è semplice. Si parla di ingegneria al contrario (reversing) quando, dato un programma, questo viene disassemblato, e si ricavano le informazioni necessarie per capire come funziona, ad esempio, un algoritmo che genera i codici dei crack... ma andiamo con calma...
Disassemblare, cosa vuol dire? Vuol dire prendere il programma, darlo in pasto ad un disassemblatore, e ricavarne il codice Assembler. per chi non lo sapesse, un software viene scritto in un linguaggio detto "di secondo livello", simile al naturale (ad esempio, JAVA o C++). Questo, una volta compilato, viene tramutato in un insieme di bit che svolgono determinati compiti... disassemblare vuol dire prendere questo programma e ricavarne le istruzione che esso da alla memoria in codice Assembler. Vediamo un pò come funziona il tutto... per prima cosa, avrete bisogno di due file: il crackme (un piccolo programma da craccare), che troverete all'indirizzo
www.quequero.org/uicwiki/images/CM01.zip
e Olly debugger, disponibile all'indirizzo
www.ollydbg.de/download
Fatto questo, estraete dall'archivio zip il file crackme e olydbg. Aprite ollydbg, andate su file->open, e cercate il crackme che avete unzippato (nella cartella CM01). Apreite CRACKME.exe e vi apparirà una finestra con un sacco di parole strane e di numeri... nel riquadro principale, la prima e seconda colonna, indica l'area di memoria in formato esadecimale al quiale il programma fa riferimento, alla terza colonna, abbiamo il programma in assembler che ci dice cosa fa quella determinata microistruzione, alla quarta, abbiamo una sorta di codifica da assembler in ascii. vogliamo craccare il njostro programma, bene, per prima cosa, cerchiamo il messaggio dove si trova la frase di congratulazioni (che ci dice che abbiamo craccato il software in modo corretto). Si trova all'indirizzo 0040134F della prima colonna (quella con i numeri in grigio).
Risalendo, cerchiamo il comando che ci dice di inserire nome utente e password. lo troviamo alla riga 0040121E(facile da capire, se leggiamo l'ascii, vedremo una chiamata del tipo DLG_REGISTER), che ci indica proprio dove apparirà la finestra di registrazione.
in 00401223 (la riga subito dopo), troveremo la seguente scritta:
CMP EAX, 0.
Questo equivale ad un if: se EAX (un registro) è uguale a 0, allora andiamo alla finestra di registrazione avvenuta con successo. I puristi dell'informatica, possono risalire sul codice e vedere quando il registro viene posto a zero in questo modo, si può risalire all'username e alla password (il mio metodo preferito :-). Se Vogliamo affrettare le cose, invece del comando CMP EAX,0, sostituiamo la seguente riga di codice (basta che facciamo doppio click sulla riga)
JMP 0040121E
Questo si chiama Jump forzato, e ci porta direttamente alla finestra di registrazione, indipendentemente dall'username e password immessa (provare per credere).
Clicchiamo suil pulsante a forma di play, andiamo su help->Register, e inseriamo una username e una password qualsiasi... come vogliamo... e vedremo che comparirà la scritta "good work". Complimenti, avete crakkato il vostro primo programma.
Naturalmente, con i programmi commerciali non è cos' semplice.. se volete saperne di più, leggetevi un manuale sulkl'assembler. Per cominciare, vi consiglio di visitare il sito di quequero
www.quequero.org
Fatemi sapere se è stato utile... a presto (per la cronaca... OllyDebug funziona che è una meraviglia sotto wine :-)