
Soluzione di collaborazione multi-strumento per il reverse engineering.

CollaRE è uno strumento per il reverse engineering collaborativo che consente ai team che devono usare più di un tool durante un progetto di collaborare senza la necessità di condividere i file in una posizione separata. Include anche una gestione utenti molto semplice e, come tale, può essere usato come server multi-progetto in cui diversi team lavorano su progetti differenti.
Il back-end dello strumento è una semplice Flask app con nginx di fronte, eseguita in Docker, che lavora con file e manifest basati su JSON che contengono i dati rilevanti. Il front-end è uno strumento GUI basato su PyQT con un'interfaccia semplice che consente di gestire i progetti e lavorare con i file binari e le corrispondenti basi di dati di reverse engineering. Al momento lo strumento supporta Binary Ninja, Cutter (Rizin), Ghidra, Hopper Dissassembler, IDA, JEB e Android Studio (Decompiled by JADX). L'implementazione è il più possibile astratta dal funzionamento interno di questi strumenti per evitare problemi con eventuali modifiche alle API e pertanto non si integra direttamente in questi strumenti sotto forma di plugin (eccezion fatta per i plugin di migrazione dati descritti di seguito). Il lavoro si basa esclusivamente sulla gestione dei file prodotti da questi strumenti (letteralmente solo sulle estensioni di file note) e su semplici operazioni in stile SVN di check-out e check-in.
Preleva l'ultima release binaria da questo repository oppure clona il repository ed esegui sudo python3 setup.py install su Linux, oppure usa la riga di comando su Windows ed esegui python3 setup.py install. Su Linux questo installerà lo strumento nel PATH e potrai eseguirlo semplicemente con il comando collare. Su Windows questo collocherà il file in C:\Users\<USERNAME>\AppData\Local\Programs\Python\<PYTHON_VERSION>\Scripts\collare.exe (a seconda di come hai installato Python).
Per le interfacce desktop basate su Gnome puoi usare il seguente file desktop (i percorsi dei file possono variare in base alla versione di CollaRE e di Python):
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=CollaRE
Exec=/usr/local/bin/collare
Icon=/usr/local/lib/python3.8/dist-packages/collare-1.2-py3.8.egg/collare/icons/collare.png
Terminal=false
Per abilitare il supporto per Cutter aggiungi un file Cutter al tuo path (quando apri cmd/terminal, scrivere Cutter dovrebbe avviare l'applicazione).
Quando salvi i progetti Cutter (rizin) devi aggiungere manualmente .rzdb. Non rimuovere l'estensione che il file possiede già (ad esempio exe o so).
Per abilitare il supporto per Binary Ninja aggiungi un file binaryninja al tuo path (quando apri cmd/terminal, scrivere binaryninja dovrebbe avviare l'applicazione).
Binary Ninja rimuove le estensioni dei file per impostazione predefinita, ma lo strumento tiene conto di questo, quindi non c'è bisogno di rimettere manualmente l'estensione originale del file. Salvare i progetti così come sono in un percorso predefinito è sufficiente per riuscire a fare push del database locale bndb.
Per abilitare il supporto per Hopper Disassembler aggiungi un file Hopper al tuo path (quando apri cmd/terminal, scrivere Hopper dovrebbe avviare l'applicazione).
Hopper rimuove le estensioni dei file per impostazione predefinita, ma lo strumento tiene conto di questo, quindi non c'è bisogno di rimettere manualmente l'estensione originale del file. Salvare i progetti semplicemente con Ctrl+S è sufficiente per riuscire a fare push del database locale hop.
Per abilitare il supporto per JEB aggiungi un file jeb al tuo path (quando apri cmd/terminal, scrivere jeb dovrebbe avviare l'applicazione). Questo può essere fatto rinominando il file script runner predefinito per il tuo sistema operativo in jeb (per Windows in realtà sarebbe jeb.bat).
Per abilitare il supporto per lo strumento IDA aggiungi i file ida64 e ida al tuo path (quando apri cmd/terminal, scrivere ida64/ida dovrebbe avviare l'applicazione).
Per abilitare il supporto per questo strumento aggiungi i file ghidraRun e analyzeHeadless (.bat per Windows) al tuo path (quando apri cmd/terminal, scrivere ghidraRun dovrebbe avviare l'applicazione). Nota che analyzeHeadless si trova nella cartella support nella directory principale di Ghidra, quindi assicurati di modificare il PATH per includere entrambi i file.
Il processo di inizializzazione del database con Ghidra è un po' più complicato, poiché non c'è modo per Ghidra di elaborare un file senza creare un progetto. Quindi, per poter inviare il database di Ghidra (chiamato ghdb), ti verrà chiesto di creare manualmente un progetto ogni volta che l'elaborazione automatica fallisce (in pratica ogni volta che il file che elabori non è ELF/PE) e quindi di specificare il percorso del file gpr (ci dispiace).
Poiché i file APK e JAR si incontrano spesso durante le attività di reverse engineering, lo strumento CollaRE supporta anche il lavoro con questi tipi di file. Per abilitare il supporto per questi strumenti è necessario assicurarsi che i file android-studio e jadx siano entrambi nel path (quando apri cmd/terminal, scrivere android-studio/jadx dovrebbe avviare l'applicazione). Lo strumento JADX viene usato per eseguire la decompilazione del file JAR/APK e Android Studio viene usato per aprire i file risultanti. Nota che l'uso di Android Studio è opzionale, poiché puoi associare qualsiasi altro strumento che gestisce progetti Gradle al comando android-studio (ad esempio IntelliJ IDEA).
Dopo aver distribuito il lato server come menzionato nel suo file readme, è necessario distribuire il file del certificato utilizzato a tutti gli utenti dell'applicazione e usare l'account predefinito admin con password admin per creare altri account utente (non dimenticare di cambiare la password dell'utente admin) tramite la scheda Admin. Una volta configurati gli utenti, chiunque può creare i propri progetti e iniziare a lavorare con lo strumento.
Per creare un progetto, l'utente deve prima autenticarsi sul server remoto inserendo l'URL e le credenziali e fornire un certificato per validare l'identità del server. Dopo di che, lo stato cambierà in Connected e sarà possibile selezionare o eliminare progetti esistenti o creare un nuovo progetto semplicemente inserendo il nome (solo caratteri alfanumerici e _) e selezionando gli utenti che parteciperanno al progetto (può essere modificato in seguito nella scheda Admin). Nota che l'utente che crea il progetto viene aggiunto automaticamente all'elenco utenti, quindi non devi selezionare te stesso.

Una volta che sei nella scheda Project View puoi creare nuove cartelle (solo caratteri alfanumerici e _, ci dispiace) e usare il trascinamento per caricare file (o cartelle).

Poiché lo strumento attualmente non dispone di plugin o hook nativi che consentano caricamenti automatici quando il progetto viene salvato, è necessario che l'invio del file DB locale venga avviato manualmente dopo aver creato i database desiderati. Questo può essere fatto facendo clic con il tasto destro sul file binario caricato e scegliendo lo strumento con cui vuoi elaborare il binario. Puoi effettuare un'analisi di base, ma è fortemente consigliato salvare semplicemente il file senza modificare nulla (a parte aggiungere rzdb in Cutter e il processo completamente diverso con Ghidra). NON MODIFICARE IL PERCORSO E IL NOME DEL FILE. Dopo aver fatto questo e aver chiuso il disassembler, puoi semplicemente fare clic con il tasto destro sul nome del binario e selezionare l'opzione Push Local DBs. Questo caricherà il database locale e d'ora in poi, quando vorrai lavorare con il file DB, dovrai eseguire il Check-out. Nota che ogni binario può essere elaborato separatamente con tutti gli strumenti, ma per ogni binario e strumento può esistere un solo file DB.

Quando vuoi solo ispezionare il file, puoi fare clic con il tasto destro sul file DB desiderato e selezionare l'opzione Open File (o semplicemente fare doppio clic). Se il file è stato estratto da te (check-out), questo aprirà il file locale e potrai liberamente apportare qualsiasi modifica al file DB. Quando hai finito (o quando semplicemente vuoi inviare le modifiche), puoi selezionare l'opzione Check-in. Questo caricherà le modifiche sul server e ti chiederà se vuoi mantenere il file estratto (checked-out) per ulteriori modifiche. Se vuoi scartare le modifiche locali, seleziona l'opzione Undo Check-out dal menu contestuale. Questo annullerà le tue modifiche e ti consentirà di continuare con il file dal server. Aprire un file senza eseguire prima un'operazione di Check-out lo aprirà in una sorta di modalità fittizia di sola lettura (puoi apportare modifiche al file DB, ma andranno perse la prossima volta che farai il check-out o aprirai il file).

Lo strumento supporta anche il versionamento dei file DB in modo che ogni azione Check-in conti come una nuova versione del file DB. Ti verrà chiesto di inserire un commento per la versione, che viene usato per fornire più contesto alle modifiche applicate in quella versione. È quindi possibile aprire o estrarre (check-out) le versioni precedenti dei file e lavorare su quelle.

La cartella plugins all'interno di questo repository contiene plugin per gli strumenti supportati che consentono di condividere commenti e nomi di funzioni tra gli strumenti nel caso in cui lavori su un binario con più strumenti. Segui le istruzioni standard di installazione dei plugin per lo strumento che ti interessa. Ogni plugin offre una funzione Import e una Export. Quando prevedi di condividere i dati tra gli strumenti, assicurati sempre di eseguire prima l'Import dei dati per evitare di rinominare funzioni che sono già state rinominate da qualcun altro. Se il plugin presenta alcuni inconvenienti, questi sono menzionati nel file README del plugin specifico. Nota che i plugin sono pensati per migrare i dati verso un altro strumento piuttosto che per una collaborazione simultanea di più persone.
