Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
tenet — Un explorateur de traces pour les rétro-ingénieurs | Kitploit
Outils/GitHubGitHub/gaasedelen/tenet
Analyse Dynamique (Sandboxing)Rétro-ingénierieDébogueursAnalyse de Binaires
GitHubgaasedelen/tenet

tenet

Un explorateur de traces pour les rétro-ingénieurs

Voir le dépôt
1.5k169il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Tenet - Un explorateur de traces pour ingénieurs en rétro-ingénierie

Explorateur de traces Tenet

Aperçu

Tenet est un plugin IDA Pro pour explorer les traces d'exécution. L'objectif de ce plugin est de fournir des contrôles plus naturels et humains pour naviguer dans les traces d'exécution par rapport à un binaire donné. La base de ce travail découle du désir de rechercher des méthodes nouvelles ou innovantes pour examiner et distiller les modèles d'exécution complexes dans les logiciels.

Pour plus de contexte sur ce projet, veuillez lire le billet de blog à propos de sa version initiale.

Remerciements particuliers à QIRA / geohot et al. pour l'inspiration.

Versions

  • v0.2 -- Détection de la base d'image, visualisation des cellules, refactorisation des points d'arrêt, corrections de bugs.
  • v0.1 -- Version initiale

Installation

Tenet est un plugin Python 3 multiplateforme (Windows, macOS, Linux). Il ne nécessite aucune dépendance tierce, rendant le code à la fois portable et facile à installer.

  1. Depuis la console python de votre désassembleur, exécutez la commande suivante pour trouver son répertoire de plugins :

    • IDA Pro : import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins")
  2. Copiez le contenu du dossier /plugins/ de ce dépôt vers le répertoire listé.

  3. Redémarrez votre désassembleur.

Ce plugin est uniquement pris en charge pour IDA 7.5 et plus récent.

Utilisation

Une fois correctement installé, une nouvelle entrée de menu sera disponible dans le désassembleur. Cela peut être utilisé pour charger des traces d'exécution collectées en externe dans Tenet.

Charger une trace Tenet

Comme il s'agit de la version initiale, Tenet n'accepte que des traces texte simples lisibles par l'homme. Veuillez vous référer au readme de traçage dans ce dépôt pour des informations supplémentaires sur le format de trace, les limitations et les traceurs de référence.

Exploration bidirectionnelle

Lors de l'utilisation de Tenet, le plugin va 'peindre' des traînées pour indiquer le flux d'exécution vers l'avant (bleu) et vers l'arrière (rouge) à partir de votre position actuelle dans la trace d'exécution active.

Traînées Tenet

Pour avancer ou reculer dans le temps, il suffit de défiler en survolant la chronologie sur le côté droit du désassembleur. Pour passer par-dessus les appels de fonction, maintenez SHIFT en défilant.

Chronologie de la trace

La chronologie de la trace sera ancrée sur le côté droit du désassembleur. Ce widget est utilisé pour visualiser différents types d'événements le long de la chronologie et effectuer la navigation de base comme décrit ci-dessus.

Zoom avant sur la chronologie de la trace

En cliquant et en faisant glisser sur la chronologie, il est possible de zoomer sur une section spécifique de la trace d'exécution. Cette action peut être répétée un nombre quelconque de fois pour atteindre la granularité souhaitée.

Points d'arrêt d'exécution

Un double-clic sur le pointeur d'instruction dans la fenêtre des registres le mettra en surbrillance en rouge, révélant tous les emplacements où l'instruction a été exécutée le long de la chronologie de la trace.

Placer un point d'arrêt sur l'instruction courante

Pour sauter entre les exécutions, défilez vers le haut ou le bas en survolant le pointeur d'instruction en surbrillance.

De plus, vous pouvez faire un clic droit dans la liste du désassemblage et sélectionner l'une des entrées de menu basées sur la navigation pour rechercher rapidement l'exécution d'une instruction d'intérêt.

Recherche de la première exécution d'une instruction

Le raccourci clavier natif F2 d'IDA peut également être utilisé pour définir des points d'arrêt sur des instructions arbitraires.

Points d'arrêt mémoire

En double-cliquant sur un octet dans les vues de la pile ou de la mémoire, vous verrez instantanément toutes les lectures/écritures sur cette adresse visualisées à travers la chronologie de la trace. Le jaune indique une lecture mémoire, le bleu indique une écriture mémoire.

Explorer les accès mémoire via les points d'arrêt mémoire

Les points d'arrêt mémoire peuvent être navigués en utilisant la même technique décrite pour les points d'arrêt d'exécution. Double-cliquez sur un octet, et défilez en survolant l'octet sélectionné pour rechercher la trace vers chacun de ses accès.

Un clic droit sur un octet d'intérêt vous donnera des options pour rechercher entre lecture / écriture / accès mémoire si vous avez une action de navigation spécifique en tête.

Recherche mémoire

Pour naviguer vers une adresse arbitraire dans la vue mémoire, cliquez sur la vue mémoire et appuyez sur G pour entrer une adresse ou un symbole de base de données vers lequel chercher.

Points d'arrêt de région

Il est possible de définir un point d'arrêt mémoire sur une région de mémoire en mettant en surbrillance un bloc de mémoire, et en double-cliquant dessus pour définir un point d'arrêt d'accès.

Points d'arrêt d'accès à une région mémoire

Comme pour les points d'arrêt mémoire normaux, survoler la région et défiler peut être utilisé pour parcourir les accès effectués à la région mémoire sélectionnée.

Recherche de registre

En rétro-ingénierie, il est assez courant de rencontrer des situations où vous vous demandez "Quelle instruction a défini ce registre à sa valeur actuelle ?"

Avec Tenet, vous pouvez rechercher en arrière cette instruction en un seul clic.

Recherche de l'écriture de registre précédente

La recherche en arrière est de loin la direction la plus courante pour naviguer à travers les changements de registre... mais pour plus de dextérité, vous pouvez également rechercher en avant vers la prochaine affectation de registre en utilisant la flèche bleue à droite du registre.

Shell d'horodatage

Un 'shell' simple est fourni pour naviguer vers des horodatages spécifiques dans la trace. Coller (ou taper...) un horodatage dans le shell avec ou sans virgules suffira.

Navigation dans la trace via le shell d'horodatage

En utilisant un point d'exclamation, vous pouvez également rechercher un 'pourcentage' spécifié dans la trace. Saisir !100 cherchera la dernière instruction de la trace, tandis que !50 cherchera environ à 50% du parcours de la trace. !last cherchera la dernière instruction navigable pouvant être visualisée dans le désassembleur.

Thèmes

Tenet est livré avec deux thèmes par défaut -- un thème 'clair', et un thème 'sombre'. En fonction des couleurs actuellement utilisées par votre désassembleur, Tenet tentera de sélectionner le thème qui semble le plus approprié.

Thèmes Tenet

Les fichiers de thème sont stockés sous forme de JSON simple sur le disque et sont hautement configurables. Si vous n'êtes pas satisfait des thèmes ou couleurs par défaut, vous pouvez créer vos propres thèmes et simplement les déposer dans le répertoire des thèmes utilisateur.

Tenet se souviendra de votre préférence de thème pour les chargements et utilisations futurs.

FAQ

Q: Comment puis-je enregistrer une trace d'exécution avec Tenet ?

  • R : Tenet est un lecteur de traces, pas un enregistreur de traces. Vous devrez utiliser des frameworks d'instrumentation binaire dynamique (ou d'autres technologies connexes) pour générer une trace d'exécution compatible. Veuillez vous référer au readme de traçage pour plus d'informations sur les traceurs existants, ou comment implémenter le vôtre.

Q: Quelles architectures de trace Tenet prend-il en charge ?

  • R : Seulement x86 et AMD64, mais la base de code est presque entièrement agnostique en termes d'architecture.

Q: Quelle taille de fichier de trace Tenet peut-il charger/naviguer ?

  • R : Le lecteur de traces de Tenet est en pur Python, il a été écrit comme un MVP. Il n'y a aucune garantie que les traces dépassant 10 millions d'instructions seront raisonnables à naviguer jusqu'à ce qu'un backend natif le remplace.

Q: J'ai chargé une trace d'exécution, maintenant il y a un fichier '.tt'. Qu'est-ce que c'est ?

  • R : Lorsque Tenet charge une trace texte donnée, il analyse, indexe et compresse la trace dans un format plus performant. Lors des chargements ultérieurs, Tenet tentera de charger le fichier '.tt' qui devrait se charger en une fraction du temps nécessaire pour charger la trace texte originale.

Q: Le plugin a planté / a généré une erreur / affiche de mauvaises informations de trace, que dois-je faire ?

  • R : Si vous rencontrez un problème ou une inexactitude qui peut être reproduit, veuillez soumettre un problème sur ce dépôt et télécharger un échantillon de trace + exécutable.

Q: La mémoire dans ma trace change, mais il n'y a aucune écriture dans la région. Est-ce un bug !?

  • R : Votre fichier journal peut ne pas avoir capturé toutes les écritures mémoire. Par exemple, les DBI en mode utilisateur n'obtiennent généralement pas de rappel mémoire pour les écritures externes dans la mémoire du processus. Cela est le plus courant lors de la lecture à partir d'un fichier ou d'un socket -- c'est le noyau qui écrit la mémoire dans votre tampon utilisateur désigné, rendant l'événement invisible pour l'instrumentation traditionnelle.
    • Microsoft TTD présente généralement le même comportement, c'est délicat à résoudre sans modéliser les appels système.

Q: Est-ce que cela sera porté sur Binary Ninja / Ghidra / ... ?

  • R : Possiblement, mais pas de sitôt (à moins qu'il n'y ait une incitation significative). En tant que projet axé sur la recherche, la motivation principale est de développer des stratégies novatrices pour organiser et explorer l'exécution des programmes -- pas de les porter.

Q: Mon organisation souhaite soutenir ce projet, comment pouvons-nous aider ?

  • R : Sans financement, le temps que je peux consacrer à ce projet est limité. Si votre organisation est enthousiasmée par les idées présentées ici et capable de fournir des capitaux pour parrainer une R&D dédiée, veuillez nous contacter.

Travaux futurs

Le temps et la motivation le financement le permettant, les travaux futurs pourraient inclure :

  • Filtrage / coagulation des appels de bibliothèque à partir des traces
  • Analyse de pointeurs (par exemple, annotations) pour les vues registre/pile
  • Implémentations natives de TraceFile et TraceReader (par exemple, des traces plus grandes et plus rapides)
  • Historique de navigation + vue des signets (peut-être 2-en-1 ?)
  • Informatique de trace plus riche, indexation plus agressive des événements pertinents (par exemple, appels de fonction)
  • Cartographie des traces, meilleure synthèse et représentation de la géographie des traces
  • Rendre la sélection/détection de 'l'architecture CPU' un peu moins codée en dur
  • Plus de ponts de traçage prêts à l'emploi, DynamoRIO, TTD, RR, QEMU, Bochs, ...
  • Prise en charge des vues Hex-Rays / décompilées (en plus de la synchronisation de base des vues)
  • Amélioration du flux de travail pour le chargement automatique ou l'itération sur les traces
  • Analyse différentielle, 'diff de traces' de haut niveau
  • Meilleure navigation et décomposition des threads, quantas
  • Meilleure prise en charge de la navigation dans les traces 'multi-modules' (par exemple, traces système complètes)
  • Prise en charge de Binary Ninja
  • ... ?

Je suis ouvert aux contributions externes, aux problèmes et aux demandes de fonctionnalités. Veuillez soumettre toute demande de tirage à la branche develop de ce dépôt si vous souhaitez qu'elles soient considérées pour une future version.

Auteurs

  • Markus Gaasedelen (@gaasedelen)
Télécharger l’outil