@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@Titolo: Come iniettare codice in un file exe @@ @@Data: 11.09.08; 00.34 @@ @@Autore originale: Iman Karim @@ @@ @@Difficoltà traduzione: 6/10 (l'autore non era inglese ) @@ @@Lingua Originale: Inglese @@ @@Documento Originale: http://home.inf.fh-rhein-sieg.de/~ikari ... nject.html @@ @@traduzione by:isaac @@@@@@@@@@@@@@@@@@@@@@@@@@@@
Contenuto: - Requisiti - Iniziamo - Un pò di ASM - Ultime parole
-Requisiti Un dedugger. Io preferisco OLLYDBG (il miglior debugger della terra ) Una applicazione in cui ignettare il nostro codice. Io usero l'applicazione di windows NOTEPAD.EXE Se volete usarlo anche voi, copiatelo in una cartella chiamata CodeInjectTest. Questo è tutto
-Iniziamo Il nostro obbiettivo è ignettare 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:
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 = <OK ONLY> PUSH 1008751 ; CAPTION = Our adress of the "INJECTED NOTEPAD" PUSH 1008751 ; MESSAGE = Same like above. PUSH 0 ; ICON = <NO ICON> CALL MessageBoxA; Run MessageBoxA with the Params above. Queste righe inserite in Olly dovrebbero assomigliare a questo:
Riesci a vedere gli arrow?! Questo è un nuovo step importante! Se lo salviamo e lo apriamo, non avremo nessun effetto. Perchè? Semplice,
la nostra routine non è ancora stata chiamata! (nota dal traduttore:
questo non era inglese e alcune frasi non le riesco davvero a capire xD) 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<adress of your first push"
Premi su "Assemble" e avrai di nuovo il codice marcato di rosso.
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
-Ultime parole- Non abusate dei debuggers per includere shellcodes o roba simile nei file EXE! Imparate e capite soltanto come fare! Ringraziamenti a: Tutti gli studenti di FH-BRS!