
Un explorateur de couverture pour les reverse engineers
Lighthouse est un puissant explorateur de couverture de code pour IDA Pro et Binary Ninja, offrant aux chercheurs en logiciel des contrôles interactifs uniques pour étudier les cartes d'exécution d'applications natives sans nécessiter de symboles ni de code source.
Ce projet s'est classé 2ème au concours de plugins 2017 d'IDA et a ensuite été nominé aux Pwnie Awards 2021 pour ses contributions à l'industrie de la recherche en sécurité.
Remerciements particuliers à @0vercl0k pour l'inspiration.
Lighthouse est un plugin Python 2/3 multiplateforme (Windows, macOS, Linux). Il ne nécessite aucune dépendance tierce, ce qui rend le code à la fois portable et facile à installer.
Utilisez les instructions ci-dessous pour votre désassembleur respectif.
import idaapi, os; print(os.path.join(idaapi.get_user_idadir(), "plugins"))/plugins/ de ce dépôt dans le répertoire indiqué.Lighthouse peut être installé via le gestionnaire de plugins de Binary Ninja, compatible avec la v3.5 et les versions ultérieures.
Edit -> Preferences -> Manage PluginsEnable en bas à droite.Une fois correctement installé, quelques nouvelles entrées de menu seront disponibles dans le désassembleur. Ce sont les points d'entrée permettant à l'utilisateur de charger des données de couverture et de commencer à utiliser Lighthouse.
Lighthouse est capable de charger plusieurs « saveurs » différentes de données de couverture. Pour générer des données de couverture pouvant être chargées dans Lighthouse, veuillez consulter le README dans le répertoire coverage de ce dépôt.
Lorsque Lighthouse est utilisé, il « peint » les données de couverture actives sur tous les visionneuses de code disponibles dans le désassembleur. Plus précisément, cela s'applique à vos fenêtres de désassemblage linéaire, de graphe et de décompilateur.
Dans Binary Ninja, seules les vues de désassemblage linéaire, de graphe et d'IL sont prises en charge. Le support de la peinture de la sortie du décompilateur dans Binary Ninja sera ajouté à Lighthouse dans un futur proche à mesure que la fonctionnalité se stabilise.
L'Aperçu de la couverture est un widget ancrable qui s'ouvre une fois que la couverture a été chargée dans Lighthouse.
Ce widget interactif offre une vue au niveau des fonctions des données de couverture chargées. Il héberge également un certain nombre d'outils pour gérer les données chargées et mener des formes plus avancées d'analyse de couverture.
Un clic droit sur le tableau de l'Aperçu de la couverture produira un menu contextuel avec quelques commodités de base pour extraire des informations du tableau, ou manipuler la base de données dans le cadre de votre processus de reverse engineering.
Si vous pensez que d'autres actions pourraient être utiles à ajouter à ce menu contextuel, veuillez ouvrir une issue et elles seront examinées pour une future version de Lighthouse.
Les couvertures chargées et les compositions construites par l'utilisateur peuvent être sélectionnées ou supprimées via la combobox de couverture.
Lighthouse peut générer des rapports de couverture HTML rudimentaires. Un exemple de rapport est visible ici.
En bas de la fenêtre d'aperçu de la couverture se trouve le shell de couverture. Ce shell peut être utilisé pour effectuer des opérations logiques qui combinent ou manipulent les ensembles de couverture chargés.
Cette fonctionnalité est extrêmement utile pour explorer les relations d'exécution d'un programme à travers plusieurs exécutions. En d'autres termes, le shell peut être utilisé pour « différencier » l'exécution entre des ensembles de couverture et en extraire une signification plus profonde qui serait autrement obscurcie par le bruit de leurs parties individuelles.