Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
tenet — Ein Trace-Explorer für Reverse Engineers | Kitploit
Tools/GitHubGitHub/gaasedelen/tenet
Dynamische Analyse (Sandboxing)Reverse EngineeringDebuggerBinäranalyse
GitHubgaasedelen/tenet

tenet

Ein Trace-Explorer für Reverse Engineers

Repository anzeigen
1.5k169vor 4 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Tenet - Ein Trace-Explorer für Reverse Engineers

Tenet Trace Explorer

Übersicht

Tenet ist ein IDA Pro-Plugin zum Durchsuchen von Ausführungs-Traces. Das Ziel dieses Plugins ist es, natürlichere, menschliche Steuerungen für die Navigation durch Ausführungs-Traces in einer gegebenen Binärdatei bereitzustellen. Die Grundlage dieser Arbeit entspringt dem Wunsch, neue oder innovative Methoden zu erforschen, um komplexe Ausführungsmuster in Software zu untersuchen und zu destillieren.

Für weitere Informationen zu diesem Projekt lesen Sie bitte den Blogbeitrag über die Erstveröffentlichung.

Besonderer Dank gilt QIRA / geohot et al. für die Inspiration.

Versionen

  • v0.2 – Imagebase-Erkennung, Zellenvisualisierung, Breakpoint-Überarbeitung, Fehlerkorrekturen.
  • v0.1 – Erstveröffentlichung

Installation

Tenet ist ein plattformübergreifendes (Windows, macOS, Linux) Python 3-Plugin. Es benötigt keine Abhängigkeiten von Drittanbietern, was den Code sowohl portabel als auch einfach zu installieren macht.

  1. Führen Sie in der Python-Konsole Ihres Disassemblers den folgenden Befehl aus, um das Plugin-Verzeichnis zu finden:

    • IDA Pro: import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins")
  2. Kopieren Sie den Inhalt des /plugins/-Ordners dieses Repositorys in das genannte Verzeichnis.

  3. Starten Sie Ihren Disassembler neu.

Dieses Plugin wird nur für IDA 7.5 und neuer unterstützt.

Verwendung

Nach erfolgreicher Installation steht ein neuer Menüeintrag im Disassembler zur Verfügung. Damit können extern gesammelte Ausführungs-Traces in Tenet geladen werden.

Tenet-Trace laden

Da dies die Erstveröffentlichung ist, akzeptiert Tenet derzeit nur einfache, menschenlesbare Text-Traces. Bitte lesen Sie die Tracing-Readme in diesem Repository für weitere Informationen zum Trace-Format, zu Einschränkungen und zu Referenz-Tracern.

Bidirektionale Erkundung

Während der Verwendung von Tenet 'malt' das Plugin Pfade, die den Ausführungsfluss vorwärts (blau) und rückwärts (rot) von Ihrer aktuellen Position im aktiven Ausführungs-Trace anzeigen.

Tenet trails

Um step vorwärts oder rückwärts durch die Zeit zu bewegen, scrollen Sie einfach über der Zeitleiste auf der rechten Seite des Disassemblers. Um step over bei Funktionsaufrufen auszuführen, halten Sie SHIFT gedrückt, während Sie scrollen.

Trace-Zeitleiste

Die Trace-Zeitleiste wird auf der rechten Seite des Disassemblers angedockt. Dieses Widget dient zur Visualisierung verschiedener Ereignistypen entlang der Trace-Zeitleiste und zur grundlegenden Navigation wie oben beschrieben.

Vergrößern der Trace-Zeitleiste

Durch Klicken und Ziehen über die Zeitleiste kann ein bestimmter Abschnitt des Ausführungs-Traces vergrößert werden. Diese Aktion kann beliebig oft wiederholt werden, um die gewünschte Granularität zu erreichen.

Ausführungs-Breakpoints

Ein Doppelklick auf den Befehlszeiger im Registerfenster hebt ihn rot hervor und zeigt alle Stellen an, an denen der Befehl entlang der Trace-Zeitleiste ausgeführt wurde.

Setzen eines Breakpoints auf den aktuellen Befehl

Um zwischen Ausführungen zu springen, scrollen Sie nach oben oder unten, während Sie über den hervorgehobenen Befehlszeiger fahren.

Zusätzlich können Sie einen Rechtsklick in der Disassembly-Liste ausführen und einen der navigationsbasierten Menüeinträge auswählen, um schnell zur Ausführung eines interessierenden Befehls zu springen.

Springen zur ersten Ausführung eines Befehls

Der native F2-Shortcut von IDA kann ebenfalls verwendet werden, um Breakpoints auf beliebige Befehle zu setzen.

Speicher-Breakpoints

Durch Doppelklicken auf ein Byte in der Stack- oder Speicheransicht sehen Sie sofort alle Lese-/Schreibzugriffe auf diese Adresse, die über die Trace-Zeitleiste visualisiert werden. Gelb kennzeichnet einen Lese-Zugriff, blau einen Schreib-Zugriff.

Untersuchen von Speicherzugriffen mithilfe von Speicher-Breakpoints

Speicher-Breakpoints können mit der gleichen Technik wie Ausführungs-Breakpoints navigiert werden. Doppelklicken Sie auf ein Byte und scrollen Sie, während Sie über dem ausgewählten Byte fahren, um den Trace zu jedem seiner Zugriffe zu springen.

Ein Rechtsklick auf ein interessierendes Byte bietet Ihnen Optionen, um zwischen Speicher-Lese-/Schreib-/Zugriffen zu springen, falls Sie eine bestimmte Navigationsaktion im Sinn haben.

Speichernavigation

Um die Speicheransicht zu einer beliebigen Adresse zu navigieren, klicken Sie auf die Speicheransicht und drücken Sie G, um entweder eine Adresse oder ein Datenbanksymbol einzugeben, zu dem die Ansicht springen soll.

Bereichs-Breakpoints

Es ist möglich, einen Speicher-Breakpoint über einen Speicherbereich zu setzen, indem Sie einen Speicherblock markieren und doppelklicken, um einen Zugriffs-Breakpoint zu setzen.

Speicherbereich-Zugriffs-Breakpoints

Wie bei normalen Speicher-Breakpoints kann durch Überfahren des Bereichs und Scrollen zwischen den Zugriffen auf den ausgewählten Speicherbereich navigiert werden.

Register-Sprung

Beim Reverse Engineering trifft man häufig auf Situationen, in denen man sich fragt: 'Welcher Befehl hat dieses Register auf seinen aktuellen Wert gesetzt?'

Mit Tenet können Sie mit einem einzigen Klick zu diesem Befehl zurückspringen.

Springen zum vorherigen Register-Schreibzugriff

Das Zurückspringen ist bei weitem die häufigste Navigationsrichtung bei Registeränderungen ... aber der Geschicklichkeit halber können Sie auch vorwärts zur nächsten Registerzuweisung springen, indem Sie den blauen Pfeil rechts neben dem Register verwenden.

Zeitstempel-Shell

Eine einfache 'Shell' wird bereitgestellt, um zu bestimmten Zeitstempeln im Trace zu navigieren. Das Einfügen (oder Eingeben ...) eines Zeitstempels in die Shell mit oder ohne Kommas ist ausreichend.

Navigation im Trace mit der Zeitstempel-Shell

Mit einem Ausrufezeichen können Sie auch zu einem bestimmten 'Prozentsatz' im Trace springen. Die Eingabe von !100 springt zum letzten Befehl im Trace, während !50 ungefähr zur Hälfte des Tracks springt. !last springt zum letzten navigierbaren Befehl, der im Disassembler angezeigt werden kann.

Designs

Tenet wird mit zwei Standard-Designs ausgeliefert – einem 'hellen' und einem 'dunklen'. Abhängig von den aktuell von Ihrem Disassembler verwendeten Farben versucht Tenet, das am besten geeignete Design auszuwählen.

Tenet-Designs

Die Design-Dateien werden als einfaches JSON auf der Festplatte gespeichert und sind hochgradig konfigurierbar. Wenn Sie mit den Standard-Designs oder -Farben nicht zufrieden sind, können Sie Ihre eigenen Designs erstellen und sie einfach in das Benutzer-Design-Verzeichnis legen.

Tenet merkt sich Ihre Design-Präferenz für zukünftige Ladevorgänge und Verwendungen.

FAQ

F: Wie kann ich mit Tenet einen Ausführungs-Trace aufzeichnen?

  • A: Tenet ist ein Trace-Reader, kein Trace-Recorder. Sie müssen dynamische binäre Instrumentierungs-Frameworks (oder andere verwandte Technologien) verwenden, um einen kompatiblen Ausführungstrace zu generieren. Bitte lesen Sie die Tracing-Readme für weitere Informationen zu vorhandenen Tracern oder zur Implementierung eines eigenen.

F: Welche Trace-Architekturen unterstützt Tenet beim Laden?

  • A: Nur x86 und AMD64, aber die Codebasis ist fast vollständig architekturunabhängig.

F: Wie groß kann eine Trace-Datei sein, die Tenet laden/navigieren kann?

  • A: Tenets Trace-Reader ist reines Python, es wurde als MVP geschrieben. Es gibt keine Garantie, dass Traces mit mehr als 10 Millionen Instruktionen vernünftig navigiert werden können, bis ein natives Backend es ersetzt.

F: Ich habe einen Ausführungs-Trace geladen, jetzt gibt es eine '.tt'-Datei. Was ist das?

  • A: Wenn Tenet einen bestimmten Text-Trace lädt, parst, indexiert und komprimiert es den Trace in ein leistungsfähigeres Format. Bei nachfolgenden Ladevorgängen versucht Tenet, die '.tt'-Datei zu laden, die in einem Bruchteil der Zeit geladen werden sollte, die für das Laden des ursprünglichen Text-Traces benötigt wird.

F: Das Plugin ist abgestürzt / hat einen Fehler geworfen / zeigt fehlerhafte Trace-Informationen an. Was soll ich tun?

  • A: Wenn Sie auf ein Problem oder eine Ungenauigkeit stoßen, die reproduziert werden kann, melden Sie bitte ein Issue im Repository und laden Sie einen Beispiel-Trace plus ausführbare Datei hoch.

F: Der Speicher in meinem Trace ändert sich, aber es gibt keine Schreibzugriffe auf den Bereich. Ist das ein Bug!?

  • A: Ihre Log-Datei hat möglicherweise nicht alle Speicherschreibzugriffe erfasst. Zum Beispiel erhalten usermode DBIs im Allgemeinen keinen Memory-Callback für externe Schreibzugriffe auf den Prozessspeicher. Dies tritt am häufigsten beim Lesen aus einer Datei oder von einem Socket auf – es ist der Kernel, der den Speicher in Ihren designierten Usermode-Puffer schreibt, was das Ereignis für die traditionelle Instrumentierung unsichtbar macht.
    • Microsoft TTD zeigt im Allgemeinen das gleiche Verhalten; es ist schwierig, dies ohne Modellierung von Syscalls zu lösen.

F: Wird dies auf Binary Ninja / Ghidra / ... portiert?

  • A: Möglicherweise, aber nicht in absehbarer Zeit (es sei denn, es gibt einen erheblichen Anreiz). Als forschungsorientiertes Projekt liegt die treibende Motivation in der Entwicklung neuartiger Strategien zur Organisation und Erkundung der Programmausführung – nicht in deren Portierung.

F: Meine Organisation möchte dieses Projekt unterstützen. Wie können wir helfen?

  • A: Ohne Finanzierung ist die Zeit, die ich diesem Projekt widmen kann, begrenzt. Wenn Ihre Organisation von den hier vorgestellten Ideen begeistert ist und in der Lage ist, Kapital zur Finanzierung von dedizierter F&E bereitzustellen, kontaktieren Sie uns bitte.

Zukünftige Arbeiten

Zeit und Motivation Finanzierung vorausgesetzt, könnten zukünftige Arbeiten Folgendes umfassen:

  • Filtern / Zusammenführen von Bibliotheksaufrufen aus Traces
  • Pointer-Analyse (z. B. Annotationen) für die Register-/Stack-Ansichten
  • Native TraceFile- und TraceReader-Implementierungen (z. B. größere und schnellere Traces)
  • Navigationsverlauf + Lesezeichenansicht (vielleicht 2-in-1?)
  • Umfangreichere Trace-Informatik, aggressiveres Indexieren relevanter Ereignisse (z. B. Funktionsaufrufe)
  • Trace-Kartographie, verbesserte Zusammenfassung und Darstellung der Trace-Geographie
  • Die Auswahl/Erkennung der 'CPU-Architektur' etwas weniger fest codiert machen
  • Mehr sofort einsatzbereite Tracing-Bridges, DynamoRIO, TTD, RR, QEMU, Bochs, ...
  • Unterstützung für Hex-Rays / dekompilierte Ansichten (zusätzlich zur grundlegenden Ansichtssynchronisation)
  • Verbesserter Workflow für automatisches Laden oder Iterieren von Traces
  • Differenzanalyse, hochrangiges 'Trace-Diffing'
  • Bessere Navigation und Aufschlüsselung von Threads, Quanten
  • Bessere Unterstützung für die Navigation in 'Multi-Modul'-Traces (z. B. vollständige System-Traces)
  • Binary Ninja-Unterstützung
  • ... ?

Ich begrüße externe Beiträge, Issues und Feature-Requests. Bitte stellen Sie Pull-Requests an den develop-Branch dieses Repositorys, wenn Sie möchten, dass sie für eine zukünftige Version berücksichtigt werden.

Autoren

Markus Gaasedelen (@gaasedelen)

Tool herunterladen