Reverse engineering: come creare una patch per un programma

Patch - Reverse Engineering

Reverse Engineering, significa semplicemente analizzare un dispositivo o un software che non hai costruito, per apprendere come è stato fatto ai fini di riprodurlo o modificarlo.

Per chi non sa di cosa stiamo parlando, inizio solo con il dire che per me è un’arte che consiste nel esaminare molto attentamente un programma al fine di riprodurlo o ad esempio nel caso di programmi protetti, eliminare o scoprire come viene generato un seriale. Ovviamente il reverse engineering per quanto messo in discussione, in Europa non è considerato illegale, diventa illegale quando ad esempio noi creiamo una crack oppure troviamo il seriale e lo mettiamo a disposizione di tutti in internet, quindi fate molta attenzione a quello che fate.
Bene quello che voglio mostrarvi è un semplicissimo modo per creare una patch, il programma che andiamo a reversare è un programma di addestramento, quindi nulla di commerciale.

Quello che ci servirà sarà:
-OllyDbg: http://www.ollydbg.de/
-Hex Workshop Hex Editor: http://www.hexworkshop.com/
-CFF Explorer: http://www.ntcore.com/exsuite.php
-Un compilatore C, io uso DevC++: http://www.bloodshed.net/devcpp.html
-CM01: http://quequero.org/Crackmes

Benissimo incominciamo con la fase di patching:
Iniziamo a fare “conoscenza” con il nostro programma da reversare, una volta che lo abbiamo scaricato apriamolo e vediamo come funziona, vediamo subito che andando su help c’è il bottone per registrare il programma:

Se proviamo a inserire qualcosa a caso ci restituirà errore:

Benissimo possiamo chiudere il nostro programma, aprire OllyDbg ed andare su File-Open e selezioniamo il nostro programma. Come tutti i programmi, anch’esso usa delle API(Application programming interface),ossia un insieme di procedure e funzioni che semplificano notevolmente la vita ai programmatori nella costruzione di un programma.

Quello che noi dobbiamo andare ad analizzare è in particolare l’API: GetDlgItemText, questa funzione si occupa di prelevare i caratteri scritti nel box Name e Serial. Ne esisto di due tipi: GetDlgItemTextA e GetDlgItemTextW .

Ora quello che dobbiamo fare è inserire due interruzioni detti breakpoint a queste funzioni e per farlo selezioniamo in alto Plugin-Command line e scriviamo bp GetDlgItemTextA e premiamo invio e infine bp GetDlgItemTextW e di nuovo invio. Ora avviamo il debug con F9 e come possiamo vedere OllyDbg, in futuro abbrevio con olly, ci apre il programma e noi inseriamo nuovamente i dati nella registrazione e clicchiamo su Ok.

Come dati di registrazione ho inserito:
Name: qwer
Serial: 1234

Olly ci ha fermato qui:
75F53D74 > 8BFF MOV EDI,EDI

Da come possiamo vedere in alto, vicino alla scritta CPU, ci troviamo nel modulo user32.dll, noi dobbiamo tornare nel codice del nostro programma, premendo Alt+F9 (Excute till user code) svariate volte arriviamo qui:

Dove quelle due call saranno le funzioni che servono a generare il seriale, per ora di questo non ce ne preoccupiamo.
Una volta arrivati a questo punto eseguiamo un istruzione alla volta con F8 ed andando avanti così incontriamo la seguente istruzione:
00401243 . 74 07 JE SHORT CRACKME.0040124C
Se noi continuiamo ad andare ulteriormente avanti, ci comparirà il messaggio di errore del seriale, quindi il salto da invertire è proprio quello.
Bene a questo punto proviamo a vedere se funziona, riavviamo il tutto premendo Ctrl+F2 e una volta fatto ritorniamo al salto senza steppare dentro di esso. Basta steppare fino all’istruzione che lo precede. Una volta fatto, ci posizioniamo con il mouse sopra il salto e modifichiamo il JE(Jump short if equal (ZF=1)) in JNZ (Jump short if not zero (ZF=0)), facendo doppio clic sul salto, una volta modificato, steppiamo all’intermo e ci comparirà:

Benissimo abbiamo registrato il programma, a questo punto passiamo alla patch vera e propria, apriamo con CFF Explorer il nostro programma.

Ritorniamo ad olly, notiamo l’indirizzo di prima da modificare:
Istruzione di prima: 00401243 74 07 JE SHORT CRACKME.0040124C
Istruzione modificata: 00401243 75 07 JNZ SHORT CRACKME.0040124C

In CFF Explorer clicchiamo su Address converter e inseriamo l’indirizzo 00401243:

A noi interessa solo File Offset, bene ora possiamo chiudere tutto, segnandoci prima il File Offset, e apriamo Hex Workshop, caricando il nostro crackme.
Subito dopo premiamo Ctrl+G e inseriamo 843 come nella figura sottostante:

Per ultima cosa modifichiamo il 74 in 75, salviamo il tutto e siamo a posto,
d’ora in poi il nostro programma accetterà qualsiasi seriale.

STAMPA

21 Comments

  1. Emanuele 17 febbraio 2012
  2. Turmax 17 febbraio 2012
  3. vitunskas.elvinas 28 luglio 2012
  4. slovati 9 ottobre 2011
  5. divivoma 30 settembre 2011
  6. lucagiuliodori 30 settembre 2011
  7. stefano88 30 settembre 2011
  8. divivoma 30 settembre 2011
  9. Emanuele 30 settembre 2011
  10. stefano88 30 settembre 2011
  11. DeST 30 settembre 2011
  12. neo51 30 settembre 2011
  13. lucagiuliodori 30 settembre 2011
  14. Emanuele 30 settembre 2011
  15. Fabrizio87 30 settembre 2011
  16. Fabrizio87 30 settembre 2011
  17. stefano88 30 settembre 2011
  18. telegiangi61 1 ottobre 2011
  19. LELLO.SERGIACOMO 7 settembre 2014
  20. Ciro99 14 luglio 2014

Leave a Reply