
Disassemblatore interattivo facilmente riconfigurabile e modificabile con API per plugin compatibile con IDAPython
ScratchABit è un disassemblatore incrementale interattivo con capacità di analisi del flusso di dati/controllo. ScratchABit è dedicato agli sforzi della comunità OpenSource del reverse engineering (reverse engineering per produrre driver/firmware OpenSource per hardware non adeguatamente supportato dai vendor, per l'interoperabilità hardware e software, per la ricerca sulla sicurezza).
ScratchABit supporta l'API IDAPython, ben nota nella comunità, per scrivere moduli di disassemblaggio/estensione.
ScratchABit è un lavoro in corso, le funzionalità vengono aggiunte man mano che sono necessarie, i contributi sono benvenuti.
ScratchABit è rilasciato sotto i termini della GNU General Public License v3 (GPLv3).
Non dovrebbe essere scritto in un linguaggio offuscato. Questi includono linguaggi troppo di basso livello, che permettono di accedere a variabili non inizializzate, che non differenziano tra variabili e funzioni/procedure, che iniziano gli indici degli array da numeri arbitrari, ecc., ecc. ScratchABit è scritto in Python (versione moderna, Python3) per il tuo piacere e sanità mentale.
Il framework dell'interfaccia utente dovrebbe permettere l'interazione dell'utente al livello necessario, non aggiungere dipendenze, gonfiore, problemi e incompatibilità tra le versioni del framework. ScratchABit attualmente utilizza una semplice interfaccia utente testuale a schermo intero, usando sequenze di escape ANSI/VT100 (sì, anche la libreria curses è stata considerata una dipendenza troppo pesante da imporre agli utenti).
Dovrebbe sfruttare formati di testo facili da usare per memorizzare il "database", per facilitare il riutilizzo e la scrittura di strumenti, e l'archiviazione in sistemi di controllo versione.
Per usare ScratchABit, hai bisogno di Python3 installato (testato con Python 3.3 fino a 3.7) e un terminale VT100 (minimo) o XTerm (consigliato) o emulatore di terminale (qualsiasi sistema Unix dovrebbe essere compatibile, come Linux/BSD/ecc., vedere FAQ sotto per maggiori dettagli).
Clona il codice usando:
git clone --recursive https://github.com/pfalcon/ScratchABit
Se hai clonato il codice senza --recursive, esegui git submodule update --init nella directory ScratchABit.
ScratchABit ora include plugin CPU basati su Capstone Engine, che permettono l'accesso a diverse architetture CPU. Per usarli, il modulo Python per Capstone (recente) deve essere installato (di preferenza rispetto ai pacchetti forniti dalle distribuzioni OS, spesso obsoleti). Il modo più semplice è installarlo nella directory dei pacchetti utente Python:
pip3 install --no-cache-dir --user capstone
Un'alternativa è installarlo in un ambiente virtuale Python all'interno della directory ScratchABit:
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
Ogni volta che apri una nuova sessione di terminale per lavorare con ScratchABit, esegui di nuovo il comando source .venv/bin/activate per attivare l'ambiente virtuale.
Se nulla di quanto sopra funziona, puoi provare a installare il pacchetto capstone a livello di sistema (non consigliato):
sudo pip3 install --system capstone
Se vuoi disassemblare un file in formato eseguibile auto-descrittivo (come ELF), passalo semplicemente come argomento a ScratchABit.py. Il repository include diversi file example-*.elf per varie architetture per un avvio rapido. Ad esempio, per provare la versione x86 32bit:
python3 ScratchABit.py example-x86_32.elf
In alternativa, se vuoi disassemblare un file binario grezzo, devi creare un file .def (definizione) per specificare quali aree di memoria sono definite per il codice, a quale indirizzo caricare il file binario, ecc. (Nota: un file .def può essere utile anche per file .elf e simili). Il repository include un semplice codice binario grezzo x86_64 e il corrispondente file example-x86_64.def (guarda al suo interno per una descrizione delle opzioni disponibili):
python3 ScratchABit.py example-x86_64.def
Premi F9 per accedere ai menu (il mouse funziona anche nei terminali XTerm-compatibili). Premi F1 per ottenere aiuto sui tasti funzione (la maggior parte delle azioni sono accessibili anche tramite menu). Il flusso di lavoro di ScratchABit è simile ad altri disassemblatori interattivi (un po' di esperienza pregressa o letture di base possono essere utili).
I plugin processore IDAPython possono essere caricati da qualsiasi punto del modulo Python. In alternativa, puoi creare un link simbolico/copiare i file .py del plugin nella sottodirectory plugins/cpu/.
Dopo aver reso disponibile il plugin, crea un nuovo file di definizione basato su example-x86_64.def che imposta il nome del modulo plugin (senza estensione .py) nella riga cpu xxx.
Per un esempio molto semplice che utilizza un plugin esterno, vedi questo file esp8266.def che funziona con il plugin xtensa.py dal repository ida-xtensa2.
D: Quali processori/architetture sono supportati?
R: ScratchABit non supporta alcuna architettura di processore autonomamente, è completamente riattrezzabile tramite plugin API IDAPython. Molti plugin sono disponibili, scrivere un nuovo plugin è facile. Per permettere agli utenti di provare ScratchABit, un semplice plugin per processore x86 è incluso nella distribuzione, che utilizza il disassemblatore Pymsasid sotto il cofano.
Dalla versione 2.0, è incluso anche un plugin Capstone, che permette l'accesso a diverse architetture, tra cui x86, ARM, MIPS, PowerPC, SPARC, ecc. (il supporto delle architetture viene abilitato gradualmente in base ai test degli utenti).
Puoi leggere riguardo ai plugin distribuiti con ScratchABit nel README per la directory plugins/cpu/.
D: Debugger?
R: ScratchABit è dedicato all'analisi statica e al facile supporto per nuove architetture CPU (basta scrivere un nuovo plugin CPU in Python - puoi ottenere risultati iniziali in poche ore). L'analisi dinamica non è stata concepita come funzionalità principale e non ci sono piani immediati per implementarla. Le patch sono comunque benvenute.
D: Decompilatore?
R: Esiste un progetto correlato, chiamato ScratchABlock per l'analisi approfondita del programma, la trasformazione e la decompilazione. È previsto che man mano che ScratchABlock matura, alcune delle sue funzionalità saranno disponibili all'interno di ScratchABit (forse tramite plugin).
D: Non sono su Linux, come posso eseguire ScratchABit?
R: Installa Linux in un emulatore/VM sul tuo sistema e goditi.
D: Screenshot obbligatorio?
R: Sicuro:
