
Un frontend PyQt5 per il plugin binjatron per Binary Ninja che include funzionalità di evidenziazione pensate per facilitare ai principianti l'apprendimento del reverse engineering.
La capacità di fare reverse engineering di binari x86 è un'abilità importante anche al di fuori del settore della sicurezza informatica. Tuttavia, anche con l'abbondanza di materiali didattici disponibili, rimane un'abilità difficile da apprendere. Molti studenti hanno espresso frustrazione per la quantità di conoscenze di base richieste per fare anche solo progressi modesti su binari semplici.
Binary Ninja è spesso commercializzato agli studenti grazie al suo costo relativamente basso, all'interfaccia pulita e alla facilità d'uso. I linguaggi intermedi di basso e medio livello forniscono inoltre un modo semplice per capire cosa fanno le istruzioni. Questo progetto mira a rendere Binary Ninja uno strumento ancora migliore per i principianti, facilitando la visualizzazione dell'esecuzione di un binario.
Questo progetto è il prodotto del programma di stage estivo 2017 di NCC Group. I componenti di debug visivo possono essere considerati un successore spirituale di Microcorruption, una CTF di sicurezza per sistemi embedded prodotta da Matasano Security. Ulteriori aggiornamenti saranno tracciati su https://github.com/ehennenfent/binja_dynamics. NCC Group non è responsabile per eventuali ulteriori modifiche apportate al repository dopo il 18 agosto 2017.
All'interno della cartella dei plugin di Binary Ninja, esegui:
git clone https://github.com/ehennenfent/binja_dynamics.git
cd binja_dynamics
./install.sh
Dopo aver caricato un binario, fai clic sulla voce Enable Dynamic Analysis Tools nel menu Strumenti. Si aprirà una finestra del debugger che potrai controllare tramite i pulsanti sulla barra degli strumenti. Mentre avanzi passo dopo passo nell'esecuzione, l'interfaccia si aggiornerà in tempo reale per riflettere lo stato del programma. Grazie a Binjatron, l'istruzione corrente e qualsiasi punto di interruzione vengono evidenziati nella vista binaria. Per ogni indirizzo di memoria e per i registri, il valore viene evidenziato in arancione ogni volta che è cambiato a seguito dell'istruzione precedente. In modo simile, l'inizio e la fine del frame di stack corrente (così come la posizione prevista dell'indirizzo di ritorno) vengono evidenziati per rendere più facile ai principianti identificare quali porzioni della memoria sono importanti da osservare. Il visualizzatore del backtrace mostra un backtrace dei frame di stack correnti e fornisce un pulsante che salta automaticamente la vista binaria alla posizione data dall'indirizzo di memoria in cui il plugin si aspetta di trovare l'indirizzo di ritorno. In alcune funzioni, il frame di stack non viene smontato nel modo previsto dal plugin, quindi questo indirizzo di ritorno previsto potrebbe non essere sempre corretto.

(Nello screenshot sopra, il base pointer è mostrato in verde oliva)
Occasionalmente, può essere necessario consultare il codice sorgente per comprendere il comportamento esatto delle interfacce. In previsione di ciò, molte delle decisioni progettuali e dei dettagli implementativi sono spiegati nei commenti inline.
La wiki è ancora relativamente scarna, ma contenuti come l'elenco degli ostacoli e il log di sviluppo possono essere utili per la risoluzione dei problemi.
Prendi in considerazione di consultare il repository binja_sensei per esempi che potrebbero aiutarti a iniziare.
Escludendo Binary Ninja, install.sh gestirà queste dipendenze per te.