Domanda:
Strumenti automatizzati per il reverse engineering dei formati di file?
Brendan Dolan-Gavitt
2013-03-27 22:17:59 UTC
view on stackexchange narkive permalink

Sono disponibili strumenti per automatizzare il processo dei formati di file di reverse engineering? In particolare, sono interessato agli strumenti che utilizzano l'analisi dinamica di un'applicazione per analizzare il formato, e meno interessato alla visualizzazione o agli strumenti di tipo editor esadecimale (ad es. 010 Editor).

Esiste una certa letteratura accademica sull'argomento:

Qualcosa di tutto ciò è stato messo in pratica?

Tre risposte:
#1
+9
0xC0000022L
2013-03-27 23:58:38 UTC
view on stackexchange narkive permalink

Non dichiari lo scopo. Se vuoi comprendere appieno il formato e non solo automatizzare alcuni aspetti iniziali dell'analisi, sarà molto difficile trovare uno strumento abbastanza generico. Questo è ciò per cui esistono linguaggi specifici del dominio e strumenti estensibili (010 Editor, linguaggi di scripting). Non sono a conoscenza di alcuno strumento che possa "fare tutto" al momento.

Strumenti come 010 Editor infatti forniscono ulteriori informazioni utili come un istogramma (che fornisce indizi sull'entropia, compressione / crittografia) e fornirti i modelli binari per affinare sempre di più la tua conoscenza del formato del file. L'aspetto più fastidioso è quanto sia limitato lo scripting e che non puoi, ad esempio, scrivere plugin (immagina di poter decomprimere bzip2 o sgonfiare stream e simili, cosa che si trova comunemente ma non è affatto supportata da 010 Editor). Uno dei principali punti dolenti di me e di 010 Editor è stato che ho incontrato alcune limitazioni sintattiche dei modelli binari per esprimere qualcosa di vitale e ho dovuto aggirarlo in modi strani (la struct parametrizzata è un grosso problema ), sebbene questo sia esattamente il problema che cerca di risolvere con il proprio DSL. Penso che abbiamo un disperato bisogno di una soluzione FLOSS (e in effetti stavo cercando di Lua izing frhed a un certo punto).

A formato di file potrebbe essere sotto un livello di crittografia o compressione e che potrebbe essere separato per sezione del file, non per file. Potrebbero esserci diversi livelli. Anche se non voglio arrivare al punto di affermare che è assolutamente impossibile inventare qualcosa del genere, c'è una ragione per cui IDA è interattivo , per esempio. Nella maggior parte delle attività RCE, anche la migliore euristica non può sostituire le capacità e l'esperienza di un esperto di reverse engineer. Per esperienza applicherei lo stesso al reverse engineering dei formati di file.

Anch'io ho invertito alcuni formati di file e di solito uso una combinazione di scrivere un parser in un linguaggio di scripting da un lato e scrivere un modello binario per 010 Editor dall'altro. Quest'ultimo fornisce un bel fallback, perché anche se l'analisi fallisce, posso andare lì, indagare su cosa sta succedendo, regolare e rieseguire. Insapona, risciacqua, ripeti ... ti viene l'idea.

La sfida più grande in assoluto è stata scoprire gli aspetti più arcani come gli interi codificati a 24 bit, a volte LSB e talvolta MSB prima, date, alberi basato su xor che contiene due indici da altrove, pochi bit utilizzati da un byte e pochi da un altro con un significato particolare ... E non riesco davvero a immaginare come potresti colmare queste lacune senza decodificare il codice leggendo / scrivendo il formato originariamente. In mancanza di documentazione / standard, è il miglior riferimento che hai.

Inoltre, non sottovalutare il potere della visualizzazione. Ovviamente un singolo angolo, come un istogramma, fornisce solo poche informazioni. Ma ci sono molti algoritmi interessanti da applicare a dati sconosciuti e vedere strutture.

Dovrei chiarire: non sto cercando qualcosa che automatizzi * tutto * - come dici tu, uno strumento come IDA sarebbe il migliore. Ma c'è molto spazio per migliorare tra completamente manuale e completamente automatizzato. Anche uno strumento che ha appena annotato un file con il codice che ha analizzato ogni intervallo di byte sarebbe estremamente prezioso.
@BrendanDolan-Gavitt: Sono totalmente d'accordo. Ahimè, non ne sono a conoscenza. Dipenderebbe dall'architettura e inoltre dalla piattaforma per essere significativo. Tuttavia, potrei immaginare che esista qualcosa del genere per analizzare l'output di `strace`, per esempio.
Vorrei anche aggiungere che sicuramente non sconto la visualizzazione; Ho lavorato un po 'per questo [qui] (http://amnesia.gtisc.gatech.edu/~brendan/hal_mixed_annotated.pdf) e [qui] (http://amnesia.gtisc.gatech.edu /~brendan/hal_dbi.pdf). Queste sono entrambe parti del formato di file PDB ed è molto utile vedere visivamente i modelli di accesso per avere un'idea di dove sono i confini della struttura.
#2
+2
joxeankoret
2013-03-27 22:52:09 UTC
view on stackexchange narkive permalink

L'accademia è molto lontana dall'industria, che è sempre molti, molti anni avanti. Penso che non ci sia nulla di "magico" per decodificare i formati di file. In effetti, ho invertito vari formati di file e la prima volta che l'ho fatto ho provato a scoprire se esistesse uno strumento del genere. Ma non c'era niente in quel momento e non credo che ci sia proprio niente oggi.

È possibile scrivere uno strumento che rilevi "automagicamente" alcuni modelli e crei una struttura iniziale su cui iniziare a lavorare senza la necessità di iniziare da zero ma non credo che esista nient'altro.

È un peccato se non esistono strumenti: posso pensare a molta automazione che sarebbe molto utile, in particolare se portassimo un'analisi del flusso di dati! Forse un'altra cosa da aggiungere alla mia lista di cose da fare ...
#3
+2
0xea
2013-03-28 02:28:25 UTC
view on stackexchange narkive permalink

Non è una risposta diretta alla tua domanda, ma immagino che potrebbe aiutare.

Ci sono stati più tentativi di analizzare protocolli di rete sconosciuti e immagino che alcune idee e tecniche potrebbero essere applicate all'analisi di formati di file sconosciuti. Alcuni dei documenti sono:

Esiste anche lo strumento Netzob:

Netzob è uno strumento open source per il reverse engineering, la generazione di traffico e il fuzzing dei protocolli di comunicazione. Permette di dedurre il formato del messaggio e la macchina a stati di un protocollo attraverso processi passivi e attivi. Il modello può successivamente essere utilizzato per simulare un traffico realistico e controllabile.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...