
Solution de collaboration en rétro-ingénierie multi-outils.

CollaRE est un outil de rétro-ingénierie collaborative qui vise à permettre aux équipes qui ont besoin d'utiliser plus d'un outil au cours d'un projet de collaborer sans avoir à partager les fichiers dans un emplacement séparé. Il comprend également une gestion des utilisateurs très simple et peut ainsi être utilisé pour un serveur multi-projets où différentes équipes travaillent sur différents projets.
Le back-end de l'outil est une simple Flask app avec nginx devant elle, exécutée dans Docker, qui fonctionne avec des fichiers et des manifestes JSON contenant les données pertinentes. Le front-end est un outil GUI basé sur PyQT avec une interface simple qui permet de gérer les projets et de travailler avec les fichiers binaires et leurs bases de données de rétro-ingénierie correspondantes. À l'heure actuelle, l'outil prend en charge Binary Ninja, Cutter (Rizin), Ghidra, Hopper Dissassembler, IDA, JEB et Android Studio (décompilé par JADX). L'implémentation est abstraite du fonctionnement interne de ces outils autant que possible afin d'éviter les problèmes liés aux changements d'API et ne s'intègre donc pas directement dans ces outils sous forme de plugin (à l'exception des plugins de migration de données décrits ci-dessous). Le travail repose purement sur la gestion des fichiers produits par ces outils (littéralement basé sur les extensions de fichiers bien connues) et sur de simples opérations de check-out et check-in de type SVN.
Récupérez la dernière version binaire de ce dépôt ou clonez le dépôt et exécutez sudo python3 setup.py install sous Linux ou utilisez la ligne de commande sous Windows et exécutez python3 setup.py install. Sous Linux, cela installera l'outil dans le PATH et vous pourrez le lancer simplement avec la commande collare. Sous Windows, cela placera le fichier dans C:\Users\<USERNAME>\AppData\Local\Programs\Python\<PYTHON_VERSION>\Scripts\collare.exe (selon la façon dont vous avez installé Python).
Pour les interfaces de bureau basées sur Gnome, vous pouvez utiliser le fichier de bureau suivant (les chemins vers les fichiers peuvent varier selon la version de CollaRE et de 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
Pour activer la prise en charge de Cutter, ajoutez un fichier Cutter à votre PATH (lorsque vous ouvrez cmd/terminal, taper Cutter devrait démarrer l'application).
Lorsque vous enregistrez des projets Cutter (Rizin), vous devez ajouter manuellement l'extension .rzdb. Ne retirez pas l'extension que le fichier possède déjà (exe ou so par exemple).
Pour activer la prise en charge de Binary Ninja, ajoutez un fichier binaryninja à votre PATH (lorsque vous ouvrez cmd/terminal, taper binaryninja devrait démarrer l'application).
Binary Ninja supprime les extensions de fichiers par défaut, mais l'outil en tient compte, il n'est donc pas nécessaire de rajouter manuellement l'extension de fichier d'origine. Enregistrer les projets tels quels dans un chemin par défaut suffit pour pouvoir envoyer la base de données locale bndb.
Pour activer la prise en charge de Hopper Disassembler, ajoutez un fichier Hopper à votre PATH (lorsque vous ouvrez cmd/terminal, taper Hopper devrait démarrer l'application).
Hopper supprime les extensions de fichiers par défaut, mais l'outil en tient compte, il n'est donc pas nécessaire de rajouter manuellement l'extension de fichier d'origine. Enregistrer simplement les projets avec Ctrl+S suffit pour pouvoir envoyer la base de données locale hop.
Pour activer la prise en charge de JEB, ajoutez un fichier jeb à votre PATH (lorsque vous ouvrez cmd/terminal, taper jeb devrait démarrer l'application). Cela peut être fait en renommant le script de lancement par défaut de votre système d'exploitation en jeb (pour Windows, ce serait en réalité jeb.bat).
Pour activer la prise en charge de l'outil IDA, ajoutez des fichiers ida64 et ida à votre PATH (lorsque vous ouvrez cmd/terminal, taper ida64/ida devrait démarrer l'application).
Pour activer la prise en charge de cet outil, ajoutez un fichier ghidraRun et analyzeHeadless (.bat sous Windows) à votre PATH (lorsque vous ouvrez cmd/terminal, taper ghidraRun devrait démarrer l'application). Notez que analyzeHeadless se trouve dans le dossier support du répertoire racine de Ghidra, alors assurez-vous d'ajuster le PATH pour inclure les deux fichiers.
Le processus d'initialisation de la base de données avec Ghidra est un peu plus compliqué car Ghidra ne peut pas traiter un fichier sans créer de projet. Ainsi, pour pouvoir envoyer la base de données Ghidra (appelée ghdb), il vous sera demandé de créer un projet manuellement chaque fois que le traitement automatique échoue (en gros, chaque fois que le fichier que vous traitez n'est pas un ELF/PE), puis de spécifier le chemin vers le fichier gpr (désolé pour cela).
Comme les fichiers APK et JAR sont souvent rencontrés lors des travaux de rétro-ingénierie, l'outil CollaRE prend également en charge ce type de fichiers. Pour activer la prise en charge de ces outils, il est nécessaire de s'assurer que les fichiers android-studio et jadx sont tous les deux dans le PATH (lorsque vous ouvrez cmd/terminal, taper android-studio/jadx devrait démarrer l'application). L'outil JADX est utilisé pour effectuer la décompilation du fichier JAR/APK et Android Studio est utilisé pour ouvrir les fichiers résultants. Notez que l'utilisation d'Android Studio est facultative car vous pouvez créer un alias vers n'importe quel autre outil gérant les projets Gradle sous la commande android-studio (comme IntelliJ IDEA).
Après avoir déployé le côté serveur comme mentionné dans son propre fichier readme, il est nécessaire de distribuer le fichier de certificat utilisé à tous les utilisateurs de l'application et d'utiliser le compte admin par défaut avec le mot de passe admin pour créer d'autres comptes utilisateurs (n'oubliez pas de changer le mot de passe de l'utilisateur admin) via l'onglet Admin. Une fois les utilisateurs configurés, n'importe qui peut créer ses propres projets et commencer à travailler avec l'outil lui-même.
Pour créer un projet, l'utilisateur doit d'abord s'authentifier auprès du serveur distant en saisissant l'URL, les identifiants et en fournissant un certificat pour valider l'identité du serveur. Après cela, le statut passera à Connected et il sera possible de sélectionner ou supprimer des projets existants ou de créer un nouveau projet en saisissant simplement le nom (caractères alphanumériques et _ uniquement) et en sélectionnant les utilisateurs qui participeront au projet (peut être modifié plus tard dans l'onglet Admin). Notez que l'utilisateur qui crée le projet est automatiquement ajouté à la liste des utilisateurs, vous n'avez donc pas à vous sélectionner vous-même.

Une fois que vous êtes sur l'onglet Project View, vous pouvez créer de nouveaux dossiers (caractères alphanumériques et _ uniquement, désolé) et utiliser le glisser-déposer pour téléverser des fichiers (ou des dossiers).

Étant donné que l'outil ne dispose actuellement d'aucun plugin ni hook natif permettant des téléversements automatiques lors de l'enregistrement du projet, il est nécessaire de déclencher manuellement l'envoi du fichier DB local après avoir créé les bases de données souhaitées. Pour ce faire, cliquez avec le bouton droit sur le fichier binaire téléversé et choisissez l'outil avec lequel vous souhaitez traiter le binaire. Vous pouvez effectuer une analyse de base, mais il est fortement recommandé de simplement enregistrer le fichier sans rien modifier (à part ajouter rzdb dans Cutter et un processus complètement différent avec Ghidra). NE MODIFIEZ PAS LE CHEMIN ET LE NOM DU FICHIER. Après avoir fait cela et fermé le désassembleur, vous pouvez simplement cliquer avec le bouton droit sur le nom du binaire et sélectionner l'option Push Local DBs. Cela téléversera la base de données locale et désormais, lorsque vous voudrez travailler avec le fichier DB, vous devrez effectuer un Check-out. Notez que chaque binaire peut être traité séparément dans tous les outils, mais un seul fichier DB par binaire et par outil peut exister.

Lorsque vous souhaitez simplement inspecter le fichier, vous pouvez cliquer avec le bouton droit sur le fichier DB souhaité et sélectionner l'option Open File (ou simplement double-cliquer). Si vous avez effectué un Check-out du fichier, cela ouvrira le fichier local et vous pourrez librement apporter toutes les modifications au fichier DB. Une fois terminé (ou lorsque vous souhaitez simplement envoyer les modifications), vous pouvez sélectionner l'option Check-in. Cela téléversera les modifications sur le serveur et vous demandera si vous souhaitez conserver le fichier extrait pour d'autres modifications. Si vous voulez abandonner vos modifications locales, sélectionnez l'option Undo Check-out dans le menu contextuel. Cela abandonnera vos modifications et vous permettra de continuer avec le fichier depuis le serveur. Ouvrir un fichier sans effectuer d'opération Check-out au préalable l'ouvrira dans un faux mode lecture seule (vous pouvez apporter des modifications au fichier DB, mais elles seront perdues la prochaine fois que vous ferez un Check-out ou ouvrirez le fichier).

L'outil prend également en charge le versionnage des fichiers DB : chaque action Check-in compte comme une nouvelle version du fichier DB. Il vous sera demandé de saisir un commentaire pour la version, qui sert à donner plus de contexte aux modifications appliquées dans cette version. Il est alors possible d'ouvrir ou d'extraire (Check-out) les versions précédentes des fichiers et de travailler sur celles-ci.

Le dossier plugins de ce dépôt contient des plugins pour les outils pris en charge, qui vous permettent de partager des commentaires et des noms de fonctions entre les outils dans le cas où vous travaillez sur un même binaire avec plusieurs outils. Suivez les instructions d'installation standard des plugins pour l'outil qui vous intéresse. Chaque plugin offre une fonction Import et une fonction Export. Lorsque vous prévoyez de partager les données entre les outils, assurez-vous toujours d'importer (Import) les données d'abord pour éviter de renommer des fonctions qui ont déjà été renommées par quelqu'un d'autre. Si le plugin comporte des pièges, ceux-ci sont mentionnés dans le fichier README du plugin concerné. Notez que les plugins sont destinés à migrer les données vers un autre outil plutôt qu'à une collaboration simultanée de plusieurs personnes.
