
Un Coverage Explorer per Reverse Engineers
Lighthouse è un potente coverage explorer per il codice per IDA Pro e Binary Ninja, che fornisce ai ricercatori software controlli unici e interattivi per studiare le mappe di esecuzione di applicazioni native senza richiedere simboli o codice sorgente.
Questo progetto si è classificato 2° nell'IDA's 2017 Plug-In Contest ed è stato successivamente nominato ai Pwnie Awards 2021 per i suoi contributi all'industria della ricerca sulla sicurezza.
Un ringraziamento speciale a @0vercl0k per l'ispirazione.
Lighthouse è un plugin Python 2/3 multipiattaforma (Windows, macOS, Linux). Non richiede dipendenze di terze parti, rendendo il codice sia portabile che facile da installare.
Usa le istruzioni riportate di seguito per il tuo disassembler di riferimento.
import idaapi, os; print(os.path.join(idaapi.get_user_idadir(), "plugins"))/plugins/ di questo repository nella directory elencata.Lighthouse può essere installato tramite il plugin manager di Binary Ninja, con supporto per la versione v3.5 e successive.
Edit -> Preferences -> Manage PluginsEnable in basso a destra.Una volta installato correttamente, saranno disponibili alcune nuove voci di menu nel disassembler. Questi sono i punti di ingresso per un utente per caricare i dati di coverage e iniziare a usare Lighthouse.
Lighthouse è in grado di caricare alcuni diversi 'flavors' di dati di coverage. Per generare dati di coverage che possano essere caricati in Lighthouse, consulta il README nella directory coverage di questo repository.
Mentre Lighthouse è in uso, esso 'dipingerà' i dati di coverage attivi su tutti i visualizzatori di codice disponibili nel disassembler. Nello specifico, questo si applicherà al disassemblaggio lineare, al grafo e alle finestre del decompilatore.
In Binary Ninja, sono supportate solo le viste di disassemblaggio lineare, grafo e IL. Il supporto per la colorazione dell'output del decompilatore in Binary Ninja sarà aggiunto a Lighthouse nel prossimo futuro, man mano che la funzionalità si stabilizza.
La Coverage Overview è un widget agganciabile che si aprirà una volta che la coverage è stata caricata in Lighthouse.
Questo widget interattivo fornisce una vista a livello di funzione dei dati di coverage caricati. Ospita inoltre una serie di strumenti per gestire i dati caricati e guidare forme più avanzate di analisi della coverage.
Facendo clic con il tasto destro sulla tabella nella Coverage Overview si produrrà un menu contestuale con alcune comodità di base per estrarre informazioni dalla tabella, o manipolare il database come parte del tuo processo di reverse engineering.
Se ci sono altre azioni che pensi potrebbero essere utili da aggiungere a questo menu contestuale, apri una issue e saranno prese in considerazione per una futura release di Lighthouse.
La coverage caricata e le composizioni costruite dall'utente possono essere selezionate o eliminate tramite la combobox della coverage.
Lighthouse può generare report HTML di coverage rudimentali. Un report di esempio è visibile qui.
In fondo alla finestra della coverage overview si trova la coverage shell. Questa shell può essere usata per eseguire operazioni basate sulla logica che combinano o manipolano i set di coverage caricati.
Questa funzionalità è estremamente utile nell'esplorare le relazioni dell'esecuzione del programma attraverso esecuzioni multiple. In altre parole, la shell può essere usata per fare il 'diff' dell'esecuzione tra set di coverage ed estrarre un significato più profondo che altrimenti è oscurato nel rumore delle loro singole parti.
La composizione della coverage, o Composing come dimostrato sopra, si ottiene attraverso una semplice grammatica di espressioni e simboli di coverage 'shorthand' (da A a Z) sulla shell di composizione.
|, &, ^, -A, B, C, ..., Z, *(...)