
Extraire les étiquettes des fichiers IDA, Ghidra, Binary Ninja et Relyze et exporter la base de données x64dbg. Incluant l'adresse principale de radare2.
Cette commande extrait toutes les étiquettes trouvées dans le fichier LST fourni comme unique argument. Une base de données x64dbg est créée dans le répertoire courant à partir des étiquettes extraites.
Le fichier LST peut être généré dans IDA à partir du menu File : Produce file -> Create LST file...
$ lst2x64dbg sample.lst
Cette commande extrait toutes les étiquettes trouvées dans le fichier CSV fourni comme unique argument. Une base de données x64dbg est créée dans le répertoire courant à partir des étiquettes extraites. La valeur de l'imagebase doit être fournie.
Le fichier CSV peut être généré dans Ghidra à partir du menu Window en sélectionnant Symbol Table.
Dans la fenêtre de la table des symboles qui s'ouvre, triez les données par la colonne Location. Sélectionnez ensuite tous les symboles qui ne sont pas des emplacements externes. Une fois les symboles souhaités sélectionnés, faites un clic droit et sélectionnez : Export -> Export to CSV...
REMARQUE : Si vous sélectionnez des emplacements externes, ils seront ignorés.

Nommez ce fichier <module_name>.csv
$ ghidra2x64dbg -i 400000 sample.csv
La valeur de l'imagebase se trouve tout en haut du panneau de désassemblage dans la fenêtre CodeBrowser. Elle fait partie de l'en-tête DOS.

Ghidra dispose d'une option d'analyse désactivée par défaut qui peut fournir plus d'étiquettes pour le code d'un échantillon dans certaines situations. Cette option, WindowsPE x86 Propagate External Parameters, se trouve dans la fenêtre Options d'analyse lorsqu'un échantillon est ouvert pour la première fois dans l'outil CodeBrowser.

Cette commande extrait toutes les étiquettes trouvées dans un fichier JSON bnida de Binary Ninja donné comme unique argument. Une base de données x64dbg est créée dans le répertoire courant à partir des étiquettes extraites. La valeur de l'imagebase doit être fournie.
Pour générer un fichier bnida à partir de Binary Ninja, il faut d'abord installer le plugin selon les instructions :
https://zznop.github.io/bnida/
Une fois l'exécutable chargé dans Binary Ninja, naviguez vers le menu Tools et sélectionnez bnida: Export analysis data.

Nommez ce fichier <module_name>.json
$ binja2x64dbg -i 400000 sample.json
Cette commande extrait toutes les étiquettes trouvées dans une base de données x64dbg générée par Relyze donnée comme unique argument. Une base de données x64dbg est créée dans le répertoire courant à partir des étiquettes extraites.
Pour générer une base de données x64dbg dans Relyze, ouvrez simplement l'exécutable et, dans la vue Code, faites un clic droit et exportez.

Nommez ce fichier <module_name>_relyze.dd32 ou <module_name>_relyze.dd64
$ relyze2x64dbg sample_relyze.dd32
Les deux commandes prennent désormais en charge l'inclusion de l'emplacement de main() tel que détecté par radare2. Ajoutez simplement -r ou -main à l'une ou l'autre des commandes comme ceci :
$ lst2x64dbg -r 0x0040a53a sample.lst
Il suffit de copier et coller l'adresse virtuelle de main depuis l'interface de Cutter ou depuis la ligne de commande de radare2.

Chacun de ces outils vérifie le répertoire courant pour une base de données x64dbg créée lors d'une exécution précédente de l'un des outils. Tout décalage dans cette base de données qui possède déjà une étiquette ne sera pas modifié par une exécution ultérieure de l'un des outils. En d'autres termes, chaque outil enrichit la liste des étiquettes, mais n'écrase aucune étiquette existante.
Si vous avez créé manuellement des étiquettes, il est recommandé de ne les créer que dans un seul désassembleur. Faites également en sorte que la sortie de ce désassembleur soit la première traitée par l'un des outils ci-dessus. Ainsi, toutes vos étiquettes personnalisées seront garanties d'exister dans la nouvelle base de données x64dbg.
Dans une future itération de ce logiciel, il y aura un moyen de résoudre les conflits lors de l'étape de fusion du traitement.