Reverse engineering: come creare una patch per un programma

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.

Scarica subito una copia gratis

25 Commenti

  1. Avatar photo divivoma 30 Settembre 2011
  2. Avatar photo lucagiuliodori 30 Settembre 2011
  3. Avatar photo stefano88 30 Settembre 2011
    • Avatar photo Angelo Palmisano 22 Ottobre 2015
    • Avatar photo alfa159 5 Maggio 2017
  4. Avatar photo divivoma 30 Settembre 2011
  5. Avatar photo Emanuele 30 Settembre 2011
  6. Avatar photo stefano88 30 Settembre 2011
  7. Avatar photo DeST 30 Settembre 2011
  8. Avatar photo neo51 30 Settembre 2011
  9. Avatar photo lucagiuliodori 30 Settembre 2011
  10. Avatar photo Emanuele 30 Settembre 2011
  11. Avatar photo Fabrizio87 30 Settembre 2011
  12. Avatar photo Fabrizio87 30 Settembre 2011
  13. Avatar photo stefano88 30 Settembre 2011
  14. Avatar photo telegiangi61 1 Ottobre 2011
  15. Avatar photo slovati 9 Ottobre 2011
  16. Avatar photo Emanuele 17 Febbraio 2012
  17. Avatar photo Turmax 17 Febbraio 2012
  18. Avatar photo vitunskas.elvinas 28 Luglio 2012
  19. Avatar photo Ciro99 14 Luglio 2014
  20. Avatar photo LELLO.SERGIACOMO 7 Settembre 2014
  21. Avatar photo Antonio Farias 18 Giugno 2015
    • Avatar photo SaraE 18 Giugno 2015

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend