-
.
Nome della release: PE Analyzer
Linguaggio di programmazione: MASM32
Versione: 0.9.9 (Pre-Stable)
Descrizione: Lo scopo iniziale del software doveva essere quello di mostrare come analizzare un PE header in Assembly, tuttavia, mi sembra ora interessante sviluppare un software più completo (verrà aggiornato in futuro).
Data di pubblicazione: 20/10/2014
Ultimo Aggiornamento: 10/12/2014
Licenza: GNU/GPL v.3
Download: Mediafire (Zip) | Mega (Zip) | Zip contenente exe e codice (il codice è presente anche nel listato al termine del post).
Screenshot (Version 0.9.9, Pre-Stable):MenuSPOILER (clicca per visualizzare)
Show SectionsSPOILER (clicca per visualizzare)
Add SectionsSPOILER (clicca per visualizzare)
Software with new sectionSPOILER (clicca per visualizzare)
Import Table (1)SPOILER (clicca per visualizzare)
Import Table (2)SPOILER (clicca per visualizzare)
Altro:
Versione 0.9.9
Con la nuova versione 0.9.9 PE Analyzer esegue ora le seguenti operazioni:- Verifica validità DOS Header;
- Verifica validità NT Header;
- Mostra il file Offset ed il menu;
- Permette di visualizzare la Section Table;
- *Permette di aggiungere una nuova sezione;
- Mostra la Import Table (New!)
*La nuova sezione non puo' superare gli 8 caratteri (se ne vengono inseriti di più, il nome viene troncato). La grandezza, specificata di seguito, deve essere un valore numerico (decimale).
Migliorie della nuova versione (0.9.9): sono stati corretti alcuni piccoli bug, apparsi in realtà sviluppando questa nuova versione (problemi con i buffer e con l'output, nulla di che); alcune parti di codice sono state modificate rendendo possibile la visualizzazione della nuova sezione senza dover ricaricare l'exe; è stato introdotto un comodissimo menu, finalmente! Ed infine, è stata introdotta la possibilità di vedere la Import Table, con i risultati mostrati a video modulo per modulo: al termine di ogni modulo e relative funzioni, se si preme un tasto qualsiasi, si vedrà il blocco successivo, se si preme ESC si torna al menu.
Avvertenza: il software sembra funzionare, ma per evitare problemi, prima di aggiungere una sezione ad un exe, fate una copia dello stesso, così in caso di problemi dovrete solo copiare di nuovo l'eseguibile nella locazione precedente.
La nuova versione sembra comunque stabile, e non ha causato problemi agli eseguibili (nemmeno la precedente, in realtà).
L'unico problema puo' essere causato se viene inserita una nuova sezione troppo grande per lo spazio a disposizione, o comunque se viene inserita una sezione e lo spazio non è sufficiente (inserirò questo tipo di controllo, ma al momento una copia dell'eseguibile vi salva da imprevisti di questo tipo).
Teoricamente dovrebbe essere compatibile con la stragrande maggioranza dei processori x86; in caso di problemi informatemi, così upperò una versione che gira su processori inferiori al 686 (ma non credo ci saranno di questi problemi).
Dovrebbe girare su 32 e 64bit (io ho compilato con MASM32 su Windows 7 a 64bit).
Il peso dell'eseguibile è passato da 5.50KB a 6,50KB (su disco 8KB). Ed il codice ha qualche riga in più (circa 300).
Se avete domande sul codice o altro, scrivete pure qui sotto.
Di seguito il codice (la procedura più grande è readImportDescriptor, ma sotto ce ne sono altre come RVAToOffset):
Edited by RootkitNeo - 10/12/2014, 02:51. -
JS96.
User deleted
Figata! . -
.
Figo, però io non capirò mai a che serviranno di preciso questi tuoi codici . -
JS96.
User deleted
Comunque hai ragione root.
La cosa più bella di ASM, è proprio la dimensione ridotta dell'eseguibile.
Solo 5.5 KB per un programma così complesso. Pazzesco.. -
.
Grazie mille Jakub!
Grazie mille anche a te, Alex!
Puo' servire a molte cose, o solo ad alcune, dipende. La versione che vedi ora è base, ma ti permette di avere informazioni su un file exe, oltre al fatto di aggiungere una sezione. L'aggiunta di una sezione potrebbe servire ad esempio ad iniettare del codice nell'eseguibile. Se il codice che si vuole iniettare è qualcosa di piccolo potrebbe non essere comunque sufficiente il code cave (lo spazio della sezione CODE vuoto, non utilizzato)... in questo caso si puo' creare ad esempio una nuova sezione nell'eseguibile. Probabilmente il futuro aggiornamento permetterà di svolgere qulcosa di simile, ma sto ancora pensando a come strutturare il tutto.
Iniettare in questo modo rimane abbastanza scomodo in quanto è necessario inserire del codice macchina all'interno dell'eseguibile. E' necessario scriversi uno shellcode che svolta una determinata operazione, ma questo shellcode è appunto composto da codice macchina, non da codice in un linguaggio di alto livello o anche solo Assembly.. -
.
wow, davvero utile e ben fatto, sei un grande root . -
.
Grazie mille Dinco! Lasciami pure un +1 se merita il post, e merito io di riceverlo... . -
.
Ovviamente lo metto, anche se ne meriti 10 . -
El Mastino.
User deleted
Come da accordo pongo qui la domanda : qual'è l' utilità di questo soft ? Ovviamente la mia domanda è dovuta ad ignoranza e non ad altro . -
.
A parte l'ovvietà del sapere se quel file è un EXE valido, ti permette di ottenere alcune informazioni. Queste informazioni sono ad esempio le varie sezioni di cui è composto il file EXE. Il codice ad esempio è contenuto nella sezione CODE.
L'aggiunta di una nuova sezione, cosa che come si nota da uno degli screen in alto è possibile, ti permette di avere uno spazio (nuova sezione) di dimensione N byte. Questa sezione puoi utilizzarla con svariati scopi: tanto per citarne uno, puoi inserire del codice arbitrario e farlo eseguire, andando a modificare l'Entry Point del programma ad esempio (in pratica il programma appena parte esegue il tuo codice, e poi torna a quello che era l'Entry Point precedente). Ciò si puo' fare anche inserendo il codice in questione nella sezione CODE, ma se il code cave, ovvero la parte non utilizzata della sezione code, è troppo piccola... non puoi iniettare il codice. Grazie alla nuova sezione puoi inserirlo li!
Se usi XP ed Olly puoi ad esempio iniettare del codice all'interno della calcolatrice piuttosto che del blocco note, ed eseguire ciò che vuoi. Ora non è più così semplice in quanto viene utilizzato ASLR.
Un'altra cosa che puoi fare con questo software, dalla versione che rilascerò stasera, è quella di vedere la Import Table. Questa tabella ti mostra i moduli che importa il programma (tipo la userdll32 piuttosto che la gdi, tanto per citarne due) e per ogni DLL mostra le singole funzioni che vengono importate da questi moduli.
Wikipedia:CITAZIONEUna sezione importante è la import address table (IAT), che è usata come una tabella di lookup quando l'applicazione cerca di usare una funzione di una libreria condivisa esterna. Infatti un programma compilato non può sapere dove saranno caricate in memoria le librerie dalle quali dipende, così un indirect jump è necessario ogniqualvolta è effettuata una chiamata esterna. Quando il dynamic linker carica i moduli e li unisce nello stesso address space, scrive istruzioni di jump negli spazi della tabella IAT, cosicché questi puntino alle locazioni di memoria delle corrispondenti funzioni di libreria. Anche se questo aggiunge un jump extra anche nelle chiamate interne delle librerie (infatti anche le librerie useranno la IAT e non chiameranno direttamente le loro stesse funzioni), il decadimento delle prestazioni è veramente basso e vale la flessibilità delle librerie condivise. Se il compilatore sa prima del tempo che una chiamata sarà interna alla libreria (con l'attributo dllimport) può produrre codice più ottimizzato che risulterà semplicemente in un indirect call opcode.
Ha alcune applicazioni, ad esempio in ambito reversing. O solo per sapere quali funzioni vengono importate da un programma.
Al momento PE Analyzer ti mette nelle condizioni di iniziare a farti venire brutte idee (tipo l'aggiunta di una sezione appunto, che ti permette di fare altro come detto sopra)... in un secondo momento, con la versione 1.2, ci sarà la possibilità di compiere altre operazioni (che tengo ancora "segrete", anche perchè devo iniziare ancora lo sviluppo di queste).
Inoltre è un modo per studiare il PE header e far pratica con asm, dato che se sbaglio a calcolare qualcosa, crascha tutto e devo usare Olly per debuggare.
Lo stesso software lo si potrebbe tranquillamente scrivere in C/C++.
Se hai domande più specifiche ti risponderò questa sera El Mastino.. -
.
Software aggiornato alla Versione 0.9.9! Tutte le novità si possono trovare al topic principale, compresi i nuovi screenshot!!
Vi ringrazio anticipatamente se continuerete a testarlo, così ho un feedback da qualcuno.. -
.
Nessuno che ha provato la nuova versione? . -
JS96.
User deleted
Domani se ho tempo la provo. . -
.
Sono fiducioso. . -
zio tony1.
User deleted
salve a tutti sono nuovo domanda scusa ma dove il codice nella descrizione che purtroppo non trovo o non sono in grado di trovare .grazie .