
Multi-Tool-Kollaborationslösung für Reverse Engineering.

CollaRE ist ein Werkzeug für kollaboratives Reverse Engineering, das es Teams ermöglichen soll, die während eines Projekts mehr als ein Werkzeug verwenden müssen, zusammenzuarbeiten, ohne die Dateien an einem separaten Ort teilen zu müssen. Es enthält außerdem eine sehr einfache Benutzerverwaltung und kann daher für einen Multi-Projekt-Server verwendet werden, auf dem verschiedene Teams an verschiedenen Projekten arbeiten.
Das Backend des Werkzeugs ist eine einfache Flask-App mit nginx davor, die in Docker läuft und mit Dateien sowie JSON-basierten Manifesten arbeitet, die die relevanten Daten enthalten. Das Frontend ist ein auf PyQT basierendes GUI-Werkzeug mit einer einfachen Oberfläche, mit der Projekte verwaltet und mit den Binärdateien sowie den zugehörigen Reverse-Engineering-Datenbanken gearbeitet werden kann. Derzeit unterstützt das Werkzeug Binary Ninja, Cutter (Rizin), Ghidra, Hopper Dissassembler, IDA, JEB und Android Studio (Decompiled by JADX). Die Implementierung ist so weit wie möglich von der internen Funktionsweise dieser Werkzeuge abstrahiert, um Probleme mit API-Änderungen zu vermeiden, und integriert sich daher nicht direkt in diese Werkzeuge in Form eines Plugins (außer für die unten beschriebenen Datenmigrations-Plugins). Die Arbeit basiert rein auf der Verwaltung der von diesen Werkzeugen erzeugten Dateien (buchstäblich nur auf der Grundlage der bekannten Dateierweiterungen) und einfachen SVN-artigen Check-out- und Check-in-Operationen.
Holen Sie sich das neueste Binär-Release aus diesem Repository oder klonen Sie das Repo und führen Sie unter Linux sudo python3 setup.py install aus oder verwenden Sie unter Windows die Befehlszeile und führen Sie python3 setup.py install aus. Unter Linux wird das Werkzeug in den PATH installiert und Sie können es einfach mit dem Befehl collare ausführen. Unter Windows wird die Datei unter C:\Users\<USERNAME>\AppData\Local\Programs\Python\<PYTHON_VERSION>\Scripts\collare.exe abgelegt (abhängig davon, wie Sie Python installiert haben).
Für Gnome-basierte Desktop-Oberflächen können Sie die folgende Desktop-Datei verwenden (Pfade zu Dateien können je nach Version von CollaRE und Python variieren):
[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
Um die Unterstützung für Cutter zu aktivieren, fügen Sie eine Datei Cutter zu Ihrem Pfad hinzu (wenn Sie cmd/terminal öffnen, sollte die Eingabe von Cutter die Anwendung starten).
Beim Speichern von Cutter-(Rizin-)Projekten müssen Sie manuell .rzdb anhängen. Entfernen Sie nicht die Erweiterung, die die Datei bereits hat (z. B. exe oder so).
Um die Unterstützung für Binary Ninja zu aktivieren, fügen Sie eine Datei binaryninja zu Ihrem Pfad hinzu (wenn Sie cmd/terminal öffnen, sollte die Eingabe von binaryninja die Anwendung starten).
Binary Ninja entfernt standardmäßig Dateierweiterungen, das Werkzeug berücksichtigt dies jedoch, sodass Sie die ursprüngliche Dateierweiterung nicht manuell wiederherstellen müssen. Das Speichern der Projekte wie gewohnt im Standardpfad reicht aus, um die lokale bndb-Datenbank erfolgreich hochzuladen.
Um die Unterstützung für Hopper Disassembler zu aktivieren, fügen Sie eine Datei Hopper zu Ihrem Pfad hinzu (wenn Sie cmd/terminal öffnen, sollte die Eingabe von Hopper die Anwendung starten).
Hopper entfernt standardmäßig Dateierweiterungen, das Werkzeug berücksichtigt dies jedoch, sodass Sie die ursprüngliche Dateierweiterung nicht manuell wiederherstellen müssen. Das Speichern der Projekte einfach mit Strg+S reicht aus, um die lokale hop-Datenbank erfolgreich hochzuladen.
Um die Unterstützung für JEB zu aktivieren, fügen Sie eine Datei jeb zu Ihrem Pfad hinzu (wenn Sie cmd/terminal öffnen, sollte die Eingabe von jeb die Anwendung starten). Dies kann erreicht werden, indem Sie das standardmäßige Runner-Skript für Ihr Betriebssystem in jeb umbenennen (unter Windows wäre dies eigentlich jeb.bat).
Um die Unterstützung für das Werkzeug IDA zu aktivieren, fügen Sie die Dateien ida64 und ida zu Ihrem Pfad hinzu (wenn Sie cmd/terminal öffnen, sollte die Eingabe von ida64/ida die Anwendung starten).
Um die Unterstützung für dieses Werkzeug zu aktivieren, fügen Sie eine Datei ghidraRun und analyzeHeadless (unter Windows .bat) zu Ihrem Pfad hinzu (wenn Sie cmd/terminal öffnen, sollte die Eingabe von ghidraRun die Anwendung starten). Beachten Sie, dass sich analyzeHeadless im Ordner support im Ghidra-Wurzelverzeichnis befindet. Stellen Sie daher sicher, dass Sie PATH entsprechend anpassen, um beide Dateien zu berücksichtigen.
Der Prozess der Initialisierung der Datenbank mit Ghidra ist etwas komplizierter, da Ghidra eine Datei nicht ohne die Erstellung eines Projekts verarbeiten kann. Um die Ghidra-Datenbank (als ghdb bezeichnet) hochladen zu können, werden Sie daher aufgefordert, ein Projekt manuell zu erstellen, wenn die automatische Verarbeitung fehlschlägt (grundsätzlich immer dann, wenn die verarbeitete Datei keine ELF/PE-Datei ist), und anschließend den Pfad zur gpr-Datei anzugeben (Entschuldigung dafür).
Da APK- und JAR-Dateien bei Reverse-Engineering-Bemühungen häufig vorkommen, unterstützt das CollaRE-Werkzeug auch die Arbeit mit diesen Dateitypen. Um die Unterstützung für diese Werkzeuge zu aktivieren, muss sichergestellt werden, dass sich die Dateien android-studio und jadx beide im Pfad befinden (wenn Sie cmd/terminal öffnen, sollte die Eingabe von android-studio/jadx die Anwendung starten). Das Werkzeug JADX wird verwendet, um die Dekompilierung der JAR/APK-Datei durchzuführen, und Android Studio wird verwendet, um die resultierenden Dateien zu öffnen. Beachten Sie, dass die Verwendung von Android Studio optional ist, da Sie jedes andere Werkzeug, das Gradle-Projekte verarbeitet, unter dem Befehl android-studio als Alias verwenden können (z. B. IntelliJ IDEA).
Nachdem Sie die Serverseite wie in ihrer eigenen Readme-Datei beschrieben bereitgestellt haben, müssen Sie die verwendete Zertifikatsdatei an alle Benutzer der Anwendung verteilen sowie das Standardkonto admin mit dem Passwort admin verwenden, um über den Tab Admin weitere Benutzerkonten zu erstellen (vergessen Sie nicht, das Passwort des Benutzers admin zu ändern). Wenn die Benutzer konfiguriert sind, kann jeder seine eigenen Projekte erstellen und mit der Arbeit mit dem Werkzeug selbst beginnen.
Um ein Projekt zu erstellen, muss sich der Benutzer zunächst beim Remote-Server authentifizieren, indem er die URL und Anmeldeinformationen eingibt und ein Zertifikat bereitstellt, um die Serveridentität zu validieren. Danach ändert sich der Status zu Connected und es ist möglich, vorhandene Projekte auszuwählen oder zu löschen oder ein neues Projekt zu erstellen, indem Sie einfach den Namen eingeben (nur alphanumerische Zeichen und _) und Benutzer auswählen, die am Projekt teilnehmen sollen (dies kann später im Tab Admin geändert werden). Beachten Sie, dass der Benutzer, der das Projekt erstellt, automatisch zur Benutzerliste hinzugefügt wird, sodass Sie sich nicht selbst auswählen müssen.

Sobald Sie sich im Tab Project View befinden, können Sie neue Ordner erstellen (nur alphanumerische Zeichen und _, sorry) und per Drag & Drop Dateien (oder Ordner) hochladen.

Da das Werkzeug derzeit keine Plugins oder nativen Hooks besitzt, die automatische Uploads beim Speichern des Projekts ermöglichen würden, muss das Hochladen der lokalen DB-Datei nach dem Erstellen der gewünschten Datenbanken manuell ausgelöst werden. Dies kann durch einen Rechtsklick auf die hochgeladene Binärdatei und die Auswahl des Werkzeugs erfolgen, mit dem Sie die Binärdatei verarbeiten möchten. Sie können eine grundlegende Analyse durchführen, es wird jedoch dringend empfohlen, die Datei einfach zu speichern, ohne etwas zu ändern (abgesehen vom Anhängen von rzdb bei Cutter und einem völlig anderen Prozess bei Ghidra). ÄNDERN SIE NICHT PFAD UND DATEINAMEN. Nachdem Sie dies getan und den Disassembler geschlossen haben, können Sie einfach mit der rechten Maustaste auf den Binärnamen klicken und die Option Push Local DBs auswählen. Dadurch wird die lokale Datenbank hochgeladen, und wenn Sie von nun an mit der DB-Datei arbeiten möchten, müssen Sie einen Check-out durchführen. Beachten Sie, dass jede Binärdatei in allen Werkzeugen separat verarbeitet werden kann, aber pro Binärdatei und Werkzeug nur eine DB-Datei vorhanden sein kann.

Wenn Sie die Datei nur ansehen möchten, können Sie mit der rechten Maustaste auf die gewünschte DB-Datei klicken und die Option Open File auswählen (oder einfach doppelklicken). Wenn die Datei für Sie ausgecheckt ist, wird die lokale Datei geöffnet und Sie können beliebige Änderungen an der DB-Datei vornehmen. Wenn Sie fertig sind (oder die Änderungen einfach übertragen möchten), können Sie die Option Check-in auswählen. Dadurch werden die Änderungen auf den Server hochgeladen und Sie werden gefragt, ob Sie die Datei für weitere Änderungen ausgecheckt lassen möchten. Wenn Sie Ihre lokalen Änderungen verwerfen möchten, wählen Sie die Option Undo Check-out aus dem Kontextmenü. Dadurch werden Ihre Änderungen verworfen und Sie können mit der Datei vom Server fortfahren. Wenn Sie eine Datei öffnen, ohne zuvor einen Check-out durchzuführen, wird sie in einem scheinbaren Nur-Lese-Modus geöffnet (Sie können Änderungen an der DB-Datei vornehmen, diese gehen jedoch beim nächsten Check-out oder Öffnen der Datei verloren).

Das Werkzeug unterstützt auch die Versionierung der DB-Dateien, sodass jede Check-in-Aktion als neue Version der DB-Datei zählt. Sie werden aufgefordert, einen Kommentar für die Version einzugeben, der dazu dient, den in dieser Version angewendeten Änderungen mehr Kontext zu geben. Es ist dann möglich, frühere Versionen der Dateien zu öffnen oder auszuchecken und daran zu arbeiten.

Der Ordner plugins in diesem Repository enthält Plugins für die unterstützten Werkzeuge, mit denen Sie Kommentare und Funktionsnamen zwischen den Werkzeugen austauschen können, falls Sie an einer Binärdatei mit mehreren Werkzeugen arbeiten. Befolgen Sie die Standard-Plugin-Installationsanweisungen für das jeweilige Werkzeug. Jedes Plugin bietet eine Import- und eine Export-Funktion. Wenn Sie planen, Daten zwischen den Werkzeugen auszutauschen, stellen Sie immer sicher, dass Sie zuerst Import ausführen, um das Umbenennen von Funktionen zu vermeiden, die bereits von jemand anderem umbenannt wurden. Wenn das Plugin einige Einschränkungen mit sich bringt, werden diese in der README-Datei des jeweiligen Plugins erwähnt. Beachten Sie, dass die Plugins dazu dienen, Daten in ein anderes Werkzeug zu migrieren, und nicht für die gleichzeitige Zusammenarbeit mehrerer Personen.
