
Ein Coverage-Explorer für Reverse Engineers
Lighthouse ist ein leistungsstarker Code-Coverage-Explorer für IDA Pro und Binary Ninja, der Software-Forschern einzigartig interaktive Steuerelemente bietet, um Ausführungsmaps für native Anwendungen zu untersuchen, ohne dass Symbole oder Quellcode erforderlich sind.
Dieses Projekt belegte den 2. Platz in IDAs 2017 Plug-In Contest und wurde später für seine Beiträge zur Sicherheitsforschungsbranche für die Pwnie Awards 2021 nominiert.
Besonderer Dank gilt @0vercl0k für die Inspiration.
Lighthouse ist ein plattformübergreifendes (Windows, macOS, Linux) Python-2/3-Plugin. Es hat keinerlei Drittanbieter-Abhängigkeiten, was den Code sowohl portabel als auch einfach zu installieren macht.
Verwenden Sie die folgenden Anweisungen für Ihren jeweiligen Disassembler.
import idaapi, os; print(os.path.join(idaapi.get_user_idadir(), "plugins"))/plugins/-Ordners dieses Repositorys in das aufgelistete Verzeichnis.Lighthouse kann über den Plugin-Manager von Binary Ninja installiert werden und unterstützt v3.5 und neuer.
Edit -> Preferences -> Manage PluginsEnable unten rechts.Nach der ordnungsgemäßen Installation stehen im Disassembler einige neue Menüeinträge zur Verfügung. Dies sind die Einstiegspunkte für einen Benutzer, um Coverage-Daten zu laden und Lighthouse zu verwenden.
Lighthouse kann verschiedene 'Sorten' von Coverage-Daten laden. Um Coverage-Daten zu generieren, die in Lighthouse geladen werden können, lesen Sie bitte die README im coverage-Verzeichnis dieses Repositorys.
Während Lighthouse verwendet wird, 'bemalt' es die aktive Coverage über alle im Disassembler verfügbaren Code-Viewer. Konkret gilt dies für Ihre lineare Disassemblierung, den Graphen und die Dekompilierer-Fenster.
In Binary Ninja werden nur die lineare Disassemblierung, der Graph und die IL-Ansichten unterstützt. Die Unterstützung für das Bemalen der Dekompilierer-Ausgabe in Binary Ninja wird Lighthouse in naher Zukunft hinzugefügt, sobald sich die Funktion stabilisiert hat.
Die Coverage-Übersicht ist ein andockbares Widget, das sich öffnet, sobald Coverage in Lighthouse geladen wurde.
Dieses interaktive Widget bietet eine Ansicht der geladenen Coverage-Daten auf Funktionsebene. Es beherbergt außerdem eine Reihe von Werkzeugen zur Verwaltung geladener Daten und zur Durchführung fortgeschrittenerer Formen der Coverage-Analyse.
Ein Rechtsklick auf die Tabelle in der Coverage-Übersicht erzeugt ein Kontextmenü mit einigen grundlegenden Annehmlichkeiten, um Informationen aus der Tabelle zu extrahieren oder die Datenbank als Teil Ihres Reverse-Engineering-Prozesses zu manipulieren.
Wenn es weitere Aktionen gibt, von denen Sie glauben, dass sie diesem Kontextmenü hinzugefügt werden sollten, reichen Sie bitte ein Issue ein, und sie werden für eine zukünftige Version von Lighthouse in Betracht gezogen.
Geladene Coverage und vom Benutzer erstellte Kompositionen können über die Coverage-ComboBox ausgewählt oder gelöscht werden.
Lighthouse kann rudimentäre HTML-Coverage-Berichte generieren. Ein Beispielbericht ist hier zu sehen.
Am unteren Rand des Coverage-Übersichtsfensters befindet sich die Coverage-Shell. Diese Shell kann verwendet werden, um logikbasierte Operationen durchzuführen, die die geladenen Coverage-Sets kombinieren oder manipulieren.
Diese Funktion ist äußerst nützlich, um die Beziehungen der Programmausführung über mehrere Läufe hinweg zu untersuchen. Mit anderen Worten: Die Shell kann verwendet werden, um die Ausführung zwischen Coverage-Sets zu 'diffen' und eine tiefere Bedeutung zu extrahieren, die andernfalls im Rauschen ihrer einzelnen Teile verborgen bleibt.
Coverage-Komposition, oder Composing wie oben demonstriert, wird durch eine einfache Ausdrucksgrammatik und 'Kurzschrift'-Coverage-Symbole (A bis Z) auf der Composing-Shell erreicht.
|, &, ^, -A, B, C, ..., Z, *(...)