Presentazione di IPyIDA: un plug-in Python per il tuo toolkit di ingegneria inversa

Presentazione di IPyIDA: un plug-in Python per il tuo toolkit di ingegneria inversa

ESET Research annuncia IPyIDA 2.0, un plug-in Python che integra IPython e Jupyter Notebook in IDA

IDA Pro di Hex-Rays è probabilmente lo strumento più popolare oggi per il software di reverse engineering. Per i ricercatori ESET, questo strumento è un disassemblatore preferito e ha ispirato lo sviluppo del IPyIDA plugin che incorpora un file Kernel IPython in IDAPro. In continuo sviluppo dal 2014, siamo lieti di annunciare il rilascio della versione 2.0. IPyIDA ha uno scopo simile a quello di un altro plugin chiamato IDAIPython, ma con una svolta: mentre IDA IPython supporta solo Windows, IPyIDA supporta macOS, Linux e Windows.

Se hai già familiarità con IDA Pro e IPython, passa a ultima sezione di questo articolo su IPyIDA. Se non hai familiarità con IPython, passa a sezione centrale. Infine, se desideri una breve introduzione a IDA Pro, continua a leggere.

Cos'è IDA Pro?

IDA Pro è un disassemblatore che traduce il codice macchina in codice assembly. Dopo aver caricato un file, IDA Pro lo disassembla e memorizza l'analisi nei file del database. IDA Pro fornisce varie finestre nel database, ognuna delle quali aiuta in modo univoco il ricercatore a trovare e comprendere meglio il codice di interesse.

Diamo un'occhiata ad alcune di queste finestre caricando il file MathLibrary.dll, che può essere compilato con Microsoft tutorial sulla creazione di un file DLL.

Finestra di uscita

La finestra Output visualizza i messaggi sullo stato dell'analisi di un file, i messaggi di errore per le operazioni richieste dall'utente e l'output di alcuni plug-in. La Figura 1 mostra la finestra Output dopo il primo caricamento MathLibrary.dll.

Presentazione di IPyIDA: un plugin Python per il tuo toolkit di reverse engineering PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Figura 1. La finestra Output IDA

Nella parte inferiore di questa finestra è presente un campo di input che accetta i comandi. La Figura 2 mostra i due fornitori di linguaggi di comando predefiniti forniti con IDA a partire dalla versione 7.3: IDC per i comandi scritti in un linguaggio simile al C nativo di IDA e il Plug-in IDAPython per i comandi scritti in Python.

Presentazione di IPyIDA: un plugin Python per il tuo toolkit di reverse engineering PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Figura 2. Il campo di input per digitare i comandi Python in IDA

Finestra di visualizzazione IDA

La finestra IDA View, nota anche come finestra di disassemblaggio, ha due formati di visualizzazione: vista grafico e vista testo. La vista grafico visualizza il flusso del programma suddividendo le funzioni in blocchi con un unico punto di ingresso e un unico punto di uscita. La Figura 3 mostra la visualizzazione del grafico.

Presentazione di IPyIDA: un plugin Python per il tuo toolkit di reverse engineering PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Figura 3. La visualizzazione del grafico di disassemblaggio IDA

La visualizzazione testo fornisce una visualizzazione lineare del disassemblaggio che mostra indirizzi virtuali, codice assembly e commenti. La Figura 4 mostra la visualizzazione del testo.

Presentazione di IPyIDA: un plugin Python per il tuo toolkit di reverse engineering PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Figura 4. La visualizzazione del testo di disassemblaggio IDA

Oltre a queste e alle molte altre finestre fornite da IDA, IDA consente di scrivere plug-in personalizzati che ne estendono le funzionalità e risolvono problemi pratici di reverse engineering. Passiamo a IPython e ad alcune caratteristiche interessanti che offre ai reverse engineer che utilizzano gli script Python in IDA.

Uno sguardo a IPython

Mentre IDAPython soddisfa le esigenze di base per l'esecuzione di script e comandi Python in IDA, gli appassionati di Python sono stati catturati da IPython febbre. IPython è un toolkit che offre un'esperienza più interattiva con Python. IPython utilizza un modello a due processi costituito da un kernel e un client. Il kernel è un processo che riceve comandi dal client, li esegue e restituisce i risultati. Il client può essere qualsiasi console interattiva come Console di Giove, Console Qt di Jupyter, o Notebook Jupyter.

La natura interattiva di questi client deriva dalla serie di funzionalità che aggiungono alla classica shell Python. La figura 5 mostra l'utilizzo di un blocco di codice multilinea per definire una funzione in IPython.

Presentazione di IPyIDA: un plugin Python per il tuo toolkit di reverse engineering PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Figura 5. Utilizzo di un blocco di codice multilinea per definire una funzione in IPython

Si noti l'evidenziazione della sintassi di numeri interi, parole chiave, funzioni incorporate e stringhe.

Premendo il pulsante Linguetta key, IPython fornisce un elenco di attributi, oggetti o funzioni rilevanti che possono completare il codice. La Figura 6 mostra le funzioni dell'elenco di completamento tramite tabulazione relative a un oggetto stringa.

Presentazione di IPyIDA: un plugin Python per il tuo toolkit di reverse engineering PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Figura 6. Completamento tramite tabulazione in IPython

Il completamento della scheda è più ricco se Jedi è installato.

IPython fornisce anche funzioni magiche, che sono funzioni che vengono tipicamente chiamate con a % or %% prefix e accetta argomenti con una sintassi in stile riga di comando. La figura 7 mostra il %tempo funzione magica, che cronometra l'esecuzione di un'espressione Python.

Presentazione di IPyIDA: un plugin Python per il tuo toolkit di reverse engineering PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Figura 7. Una funzione magica in IPython

Usando il ! carattere all'inizio di una riga di comando, la console IPython passa il comando alla shell di sistema sottostante da eseguire. Ad esempio, un comando popolare è seme, che installa e gestisce i pacchetti da Indice dei pacchetti Python (PiPi). La figura 8 mostra il !pippo comando eseguito da IPython.

Presentazione di IPyIDA: un plugin Python per il tuo toolkit di reverse engineering PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Figura 8. Esecuzione dei comandi della shell di sistema da IPython

IPython offre molte altre funzionalità interattive che possono essere esplorate in documentazione ufficiale.

IPyIDA: portare IPython in IDA

Con il rilascio di IPyIDA 2.0, la scrittura di script Python in IDA è più semplice grazie ai seguenti vantaggi:

  • Supporto per IDA su Windows, Linux e macOS
  • Uno script di installazione per una facile configurazione, anche in a ambiente virtuale
  • Una console Jupyter Qt in esecuzione in una finestra IDA
  • Un kernel IPython che può connettersi a front-end, come Jupyter Console, dall'esterno di IDA.
  • Un proxy del kernel Jupyter per supportare l'apertura di un notebook Jupyter che si riconnette al kernel IPython con l'estensione %open_notebook funzione magica

La Figura 9 mostra il processo di apertura di un Jupyter Notebook da IPyIDA.

Presentazione di IPyIDA: un plugin Python per il tuo toolkit di reverse engineering PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Figura 9. Il %open_notebook funzione magica in IPyIDA

La Figura 10 mostra una console Jupyter in esecuzione in una sessione terminale all'esterno di IDA che si connette al kernel IPython in IDA.

Presentazione di IPyIDA: un plugin Python per il tuo toolkit di reverse engineering PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Figura 10. Una console Jupyter esterna a IDA che si riconnette al kernel IPython in IDA

La scelta della console Jupyter Qt per IPyIDA offre funzionalità interattive aggiuntive alla tradizionale console IPython, come la grafica in linea, il salvataggio e la stampa della sessione corrente e l'evidenziazione completa della sintassi. Questi sono illustrati nel documentazione ufficiale per la console Jupyter Qt.

IPyIDA fornisce anche le proprie funzionalità interattive ispirate a IDA. La Figura 11 mostra che facendo clic tenendo premuto Ctrl (facendo clic su Cmd su macOS) sugli indirizzi o sui nomi delle variabili nella console IPython, la visualizzazione passa all'indirizzo virtuale nella finestra di disassemblaggio.

Presentazione di IPyIDA: un plugin Python per il tuo toolkit di reverse engineering PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Figura 11. Facendo clic tenendo premuto Ctrl su una variabile o un indirizzo in IPyIDA si passa all'indirizzo nella finestra di disassemblaggio di IDA

La Figura 12 mostra un dump esadecimale per un array di byte con contenuto non ASCII.

Presentazione di IPyIDA: un plugin Python per il tuo toolkit di reverse engineering PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Figura 12. IPyIDA visualizza i dump esadecimali

Se sei nuovo in IDA Pro, IPyIDA è di grande aiuto per familiarizzare con il API dell'IDA. Se sei un veterano, IPyIDA rende lo scripting Python molto più semplice, e quindi il tempo dedicato al reverse engineering si spera più mirato e fruttuoso.

Timestamp:

Di più da Viviamo la sicurezza