
Tenet ist ein IDA Pro -Plugin zum Erkunden von Ausführungsspuren. Das Ziel dieses Plugins ist es, natürlichere, menschliche Steuerelemente für die Navigation von Ausführungsspuren gegen eine bestimmte Binärdatei bereitzustellen. Die Grundlage dieser Arbeit beruht auf dem Wunsch, neue oder innovative Methoden zur Untersuchung und Destillation komplexer Ausführungsmuster in der Software zu untersuchen und zu destillieren.
Weitere Kontext zu diesem Projekt finden Sie im Blogpost über die erste Veröffentlichung.
Besonderer Dank geht an Qira / Geohot et al. für die Inspiration.
Der Grundsatz ist ein plattformübergreifendes (Windows, MacOS, Linux) Python 3-Plugin. Es ist keine Abhängigkeiten von Drittanbietern, so dass der Code sowohl tragbar als auch einfach zu installieren ist.
Führen Sie aus der Python -Konsole Ihres Disassemblers den folgenden Befehl aus, um das Plugin -Verzeichnis zu finden:
import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins") Kopieren Sie den Inhalt des Repositorys /plugins/ Ordners in das gelistete Verzeichnis.
Starten Sie Ihren Disassembler neu.
Dieses Plugin wird nur für IDA 7.5 und neuer unterstützt.
Sobald sie ordnungsgemäß installiert sind, gibt es im Disassembler einen neuen Menüeintrag. Dies kann verwendet werden, um extern gesammelte Ausführungsspuren in den Grundsatz zu laden.

Da dies die erste Veröffentlichung ist, akzeptiert Tenet nur einfache menschenlesbare Textspuren. Weitere Informationen zum Trace -Format, den Einschränkungen und Referenz -Tracern finden Sie im Tracing -Format, die Einschränkungen und Referenz -Tracer im Tracing -Format, die Verfolgung.
Während der Verwendung von Tenet wird das Plugin Trails "malen", um den Ausführungsablauf (blau) und rückwärts (rot) von Ihrer gegenwärtigen Position in der aktiven Ausführungsspur von Ihrer gegenwärtigen Position anzuzeigen.

Um durch die Zeit nach vorne oder rückwärts step , scrollen Sie einfach, während Sie über die Zeitachse auf der rechten Seite des Disassemblers schweben . Um die Funktionsaufrufe zu step over , halten Sie SHIFT beim Scrollen gedrückt.
Die Spurenzeitleiste wird auf der rechten Seite des Disassemblers angedockt. Dieses Widget wird verwendet, um verschiedene Arten von Ereignissen entlang der Timeline der Trace zu visualisieren und die grundlegende Navigation wie oben beschrieben durchzuführen.

Durch Klicken und Ziehen über die Zeitachse ist es möglich, in einem bestimmten Abschnitt der Ausführungsspur zu zoomen. Diese Aktion kann jederzeit wiederholt werden, um die gewünschte Granularität zu erreichen.
Doppelklicken Sie auf den Anweisungszeiger im Registers -Fenster, das ihn rot hervorhebt und alle Orte enthüllt, die die Anweisung über die Spurenzeitleiste ausgeführt wurde.

Um zwischen den Ausführungen zu springen, scrollen Sie nach oben oder unten und schweben Sie den hervorgehobenen Befehlszeiger .
Darüber hinaus können Sie mit der rechten Maustaste in die Auflistung der Demontage klicken und eines der navigationsbasierten Menüeinträge auswählen, um schnell die Ausführung einer Interessenanweisung zu suchen.

Der native F2 -Hotkey von IDA kann auch verwendet werden, um Haltepunkte auf willkürlichen Anweisungen festzulegen.
Durch das Doppelklicken auf ein Byte im Stapel- oder Speicheransichten sehen Sie sofort alle Lesevorgänge/Schreibvorgänge dieser Adresse, die über die Zeitleiste der Spuren visualisiert wurde. Gelb zeigt eine Speicherlesen an , blau zeigt ein Speicherschreiben an .

Memory Breakpoints können mit der gleichen Technik navigiert werden, die für Ausführungsbestandteile beschrieben wird. Doppelklicken Sie auf ein Byte und scrollen Sie, während Sie das ausgewählte Byte schweben, um die Spur zu jedem seiner Zugriffe zu suchen.
Klicken Sie mit der rechten Maustaste auf ein Interessens -Byte können Sie Optionen zwischen Speicherlesen / Schreib- / Zugriff suchen, wenn eine spezifische Navigationsaktion vorhanden ist.

Klicken Sie auf die Speicheransicht und klicken Sie auf G , um entweder eine Adresse oder ein Datenbanksymbol einzugeben, um die Ansicht zu suchen.
Es ist möglich, einen Speicherbestandteil in einem Speicherbereich festzulegen, indem ein Speicherblock hervorgeht und doppelt darauf klickt, um einen Zugriffsbestandteil festzustellen.

Wie bei normalen Speicherbestandspunkten kann das Umschwung des Bereichs und das Scrollen verwendet werden, um zwischen den auf den ausgewählten Speicherregion hergestellten Zugriffe zu durchqueren.
In Reverse Engineering ist es ziemlich üblich, Situationen zu begegnen, in denen Sie sich fragen : "Welches Anweisungsanweis ist dieses Register für seinen aktuellen Wert festgelegt?"
Mit dem Grundsatz können Sie in einem einzigen Klick nach rückwärts zu dieser Anweisung suchen.

Nach rückwärts sucht ist bei weitem die häufigste Richtung, um über Registeränderungen zu navigieren. Für die Geschicklichkeit können Sie jedoch auch die nächste Registerzuordnung mit dem blauen Pfeil rechts neben dem Register einholen.
Eine einfache "Shell" wird bereitgestellt, um zu bestimmten Zeitstempeln in der Spur zu navigieren. Das Einfügen (oder tippen ...) einen Zeitstempel in die Schale mit oder ohne Kommas reicht aus.

Mit einem Ausrufezeichen können Sie auch einen bestimmten "Prozentsatz" in die Spur einholen. Eintritt !100 wird nach dem endgültigen Anweis in der Spur suchen, wo !50 etwa 50% des Weges durch die Spur suchen. !last wird nach dem letzten navigierbaren Anweisungen suchen, der im Disassembler betrachtet werden kann.
Tenet wird mit zwei Standardthemen geliefert - ein "helles" Thema und ein "dunkler". Abhängig von den Farben, die derzeit von Ihrem Disassembler verwendet werden, versucht Tenet, das Thema auszuwählen, das am besten geeignet erscheint.

Die Themendateien werden als einfaches JSON auf der Festplatte gespeichert und sind sehr konfigurierbar. Wenn Sie mit den Standardthemen oder Farben nicht zufrieden sind, können Sie Ihre eigenen Themen erstellen und sie einfach im Benutzer -Thema -Verzeichnis fallen lassen.
Tenet erinnert sich an Ihre Themenpräferenz für zukünftige Lasten und Verwendungen.
Zeit und Motivation Die zulässige Finanzierung, zukünftige Arbeiten können umfassen:
Ich begrüße externe Beiträge, Probleme und Feature -Anfragen. Bitte stellen Sie an der develop dieses Repositorys Anfragen an, wenn Sie möchten, dass sie für eine zukünftige Veröffentlichung in Betracht gezogen werden.