PE Analyzer Assembly

« Older   Newer »
 
  Share  
.
  1.     +6    
     
    .
    Avatar

    Senior Member

    Group
    Manager
    Posts
    10,796
    Reputazione
    +266

    Status
    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):
    Menu


    Show Sections


    Add Sections


    Software with new section


    Import Table (1)


    Import Table (2)


    Altro:

    Versione 0.9.9
    Con la nuova versione 0.9.9 PE Analyzer esegue ora le seguenti operazioni:

    1. Verifica validità DOS Header;

    2. Verifica validità NT Header;

    3. Mostra il file Offset ed il menu;

    4. Permette di visualizzare la Section Table;

    5. *Permette di aggiungere una nuova sezione;

    6. 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). :P 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
     
    .
  2. JS96
         
     
    .

    User deleted


    Figata! :D
     
    .
  3.      
     
    .
    Avatar

    Where there's a user input, there's a vulnerability.

    Group
    Manager
    Posts
    11,133
    Reputazione
    +174

    Status
    Figo, però io non capirò mai a che serviranno di preciso questi tuoi codici :asd:
     
    .
  4. 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. :D
     
    .
  5.      
     
    .
    Avatar

    Senior Member

    Group
    Manager
    Posts
    10,796
    Reputazione
    +266

    Status
    Grazie mille Jakub! :D

    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.
     
    .
  6.      
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    1,708
    Reputazione
    +11
    Location
    Marsala

    Status
    wow, davvero utile e ben fatto, sei un grande root
     
    .
  7.      
     
    .
    Avatar

    Senior Member

    Group
    Manager
    Posts
    10,796
    Reputazione
    +266

    Status
    Grazie mille Dinco! :D Lasciami pure un +1 se merita il post, e merito io di riceverlo... :asd:
     
    .
  8.      
     
    .
    Avatar

    Advanced Member

    Group
    Member
    Posts
    1,708
    Reputazione
    +11
    Location
    Marsala

    Status
    Ovviamente lo metto, anche se ne meriti 10 :asd:
     
    .
  9. 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
     
    .
  10.      
     
    .
    Avatar

    Senior Member

    Group
    Manager
    Posts
    10,796
    Reputazione
    +266

    Status
    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:
    CITAZIONE
    Una 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. :asd:
    Lo stesso software lo si potrebbe tranquillamente scrivere in C/C++.

    Se hai domande più specifiche ti risponderò questa sera El Mastino. ;)
     
    .
  11.      
     
    .
    Avatar

    Senior Member

    Group
    Manager
    Posts
    10,796
    Reputazione
    +266

    Status
    Software aggiornato alla Versione 0.9.9! Tutte le novità si possono trovare al topic principale, compresi i nuovi screenshot!! :D

    Vi ringrazio anticipatamente se continuerete a testarlo, così ho un feedback da qualcuno.
     
    .
  12.      
     
    .
    Avatar

    Senior Member

    Group
    Manager
    Posts
    10,796
    Reputazione
    +266

    Status
    Nessuno che ha provato la nuova versione?
     
    .
  13. JS96
         
     
    .

    User deleted


    Domani se ho tempo la provo. ;)
     
    .
  14.      
     
    .
    Avatar

    Senior Member

    Group
    Manager
    Posts
    10,796
    Reputazione
    +266

    Status
    Sono fiducioso. :asd:
     
    .
  15. 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
     
    .
16 replies since 20/10/2014, 02:07   354 views
  Share  
.
Top