In questo articolo, vedremo come iniettare del codice dentro ad un file eseguibile .exe

Prima di cominciare

  • Un debugger come OLLYDBG
  • Una applicazione in cui iniettare il nostro codice.
  • Io usero l’applicazione di windows NOTEPAD.EXE
  • Se volete usarlo anche voi, copiatelo in una cartella chiamata CodeInjectTest.

Iniziamo

Il nostro obbiettivo è iniettare del codice in Notepad.EXE .
Nel nostro caso ingetteremo un semplice MessageBox all’inizio del Notepad.
Aprite il notepad, provatelo e controllate che sia quello originale e che funzioni.


Se ora siete sicuri che sia il Notepad originale apritelo con Olly.
Evvai! Se sei pronto dovresti avere questa finestra:

[clicca per ingrandire]
Dato che dobbiamo iniettare del codice abbiamo bisogno di spazio per farlo.
In un file EXE ci sono un sacco di CodeCaves dove non c’è niente (DB 00).
Allora, abbassiamo un pò la finestra della CPU finchè non troviamo un CodeCave (come questo).

Vedi il riquadro rosso? Questo è un CodeCave!
Quì possiamo iniettare del codice senza interferire con il funzionamento del programma.
Se conosci le API per richiamare un MessageBox non hai bisogno di leggere questa parte.

***** START QUOTE FROM THE WIN32 PROGRAMMERS REFERENCE

The MessageBox function creates, displays, and operates a message box.
The message box contains an application-defined message and title,
plus any combination of predefined icons and push buttons.

int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);

***** END QUOTE FROM THE WIN32 PROGRAMMERS REFERENCE

Questo è tutto quello che hai bisogno di sapere sui MessageBox
Ora è tempo di fare qualcosa con questi CodeCaves.
Prima di usare MessageBox abbiamo bisogno di creare dei testi da usare come output dei MessageBox.
Nell’immagine seguente ho selezionato alcune linee del CodeCaves e illuminato il menu BinaryEdit per voi.

Se avete premuto su Binary=>Edit oppure (CTRL+E) vedrete questa finestra.
Potete compilarlo come ho fatto io se volete.


Premete OK e vedrete il codice modificato in rosso:

Ora premete CTRL+A per rianalizzare il codice.


Ok! Se volete potete avere un MessageBox Caption diverso dal titolo, potete ripetere questo step per fare un secondo ASCII come l’ “INJECTED NOTEPAD”.

Un pò di ASM

Ora è tempo per un pò di ASM 😉
Abbiamo bisogno di invoare un MessageBox per ASM. Questo è molto facile!

PUSH 0 ; BUTTONS =
PUSH 1008751 ; CAPTION = Our adress of the "INJECTED NOTEPAD"
PUSH 1008751 ; MESSAGE = Same like above.
PUSH 0 ; ICON =
CALL MessageBoxA; Run MessageBoxA with the Params above.

Queste righe inserite in Olly dovrebbero assomigliare a questo:

Riesci a vedere le frecce?! Questo è un nuovo step importante!
Se lo salviamo e lo apriamo, non avremo nessun effetto. Perchè?
Semplice, la nostra routine non è ancora stata chiamata!
Hai bisogno di scrivere l’ Offset del tuo primo “PUSH 0” perchè abbiamo bisogno di fare un salto dall’origine dei programmi e tornare indietro di nuovo 😉
Se hai notato l’offset del primo PUSH down, vai all’origine del programma come di seguito.

Ora sei alla prima linea di codice che verrà eseguita.
Ti ricordi che la prima cosa che volevamo fare era di fare eseguire il nostro codice? 🙂
Evvai! Siamo nella giusta strada!
Seleziona ora dall’origine alcune linee e copiale negli appunti.

Incolla il contenuto degli appunti in un editor di testo e lasciatelo lì. Ne avremo bisogno in seguito.
Se avete lo avete incollato, andate alla prima linea del programma.
(Nell’immagine upper è il PUSH 70).
Doppi click su di esso e inserito nel box “JMP Guarda il box rosso! Questo è l’indirizzo di cui abbiamo bisogno per andare prima del nostro codice iniettato.
Se andiamo quì dopo l’iniezione di codice il programma lo eseguira come senza injection 🙂
Ma dobbiamo fare un’ultima cosa!
Confronta il “nuovo” origin con il vecchio che hai incollato negli appunti.
Noterai che ci sono delle linee sovrascritte! Ma queste linee servono per eseguire il programma senza errori.
Cerca le linee sovrascritte.
Nel mio caso le linee sono:

PUSH 70
PUSH NOTEPAD.01001898

Clicca sulla prima linea (il nostro JMP) e premi ENTER.
Apparirà l’invocazione del MessageBox
Dopo la chiamata del MessageBoxA abbiamo bisogno di inserire le linee sovrascritte e tornare indietro!

Ora hai fatto!
(Se vuoi provare il “JumBack”-Jump basta selezionarlo e premere ENTER.
Se verrai riportato alle giuste linee puoi stare sicuro che è ok! Altrimenti controlla Offset!)
Per salvare il “nuovo” Notepad guarda questa immagine:

Se premi su “All modifications” (tutte le modifiche) apparirà una nuova finestra.
Premi su “Copy all” su questa finestra.
Ora apparirà una nuova finestra con il nuovo codice ASM.
Chiudi questa nuova finestra (Solo quella finestra! Non tutta quella di OLLY DBG!)
Dopo il salvataggio, puoi scegliere un nome per il nuovo file.
Salvalo e apri il nuovo file. Se avrai eseguito tutto correttamente avrai questo risultato:

Premi su OK e Notepad si aprirà normalmente 😉