
Le Tenet est un plugin IDA Pro pour explorer les traces d'exécution. L'objectif de ce plugin est de fournir des commandes humaines plus naturelles pour naviguer dans les traces d'exécution contre un binaire donné. La base de ces travaux 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 blog sur sa version initiale.
Un merci spécial à Qira / Geohot et al. pour l'inspiration.
Le Tenet est un plugin Python 3 multiplateforme (Windows, MacOS, Linux) Python 3. Il faut zéro dépendances tierces, ce qui rend le code à la fois portable et facile à installer.
Depuis la console Python de votre désassembleur, exécutez la commande suivante pour trouver son répertoire de plugin:
import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins") Copiez le contenu du dossier /plugins/ dossier de ce référentiel dans le répertoire répertorié.
Redémarrez votre démontbler.
Ce plugin n'est pris en charge que pour IDA 7.5 et plus récent.
Une fois correctement installé, il y aura une nouvelle entrée de menu disponible dans le désassembleur. Cela peut être utilisé pour charger des traces d'exécution collectées en externe en principe.

Comme il s'agit de la version initiale, le Tenet n'accepte que de simples traces de texte lisibles par l'homme. Veuillez vous référer à la lecture du traçage de ce référentiel pour plus d'informations sur le format de trace, les limitations et les traceurs de référence.
Lors de l'utilisation du principe, le plugin «peindra» des sentiers pour indiquer le flux d'exécution (bleu) et vers l'arrière (rouge) de votre position actuelle dans la trace d'exécution active.

Pour step ou en arrière à travers le temps, vous faites défiler simplement tout en survolant la chronologie sur le côté droit du démontbler. Pour step over les appels de fonction, maintenez SHIFT pendant le défilement.
Le calendrier de trace sera amarré sur le côté droit du démontbler. Ce widget est utilisé pour visualiser différents types d'événements le long de la chronologie de trace et effectuer une navigation de base comme décrit ci-dessus.

En cliquant et en faisant glisser 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 plusieurs fois pour atteindre la granularité souhaitée.
Double cliquer sur le pointeur d'instructions dans la fenêtre des registres le mettra en surbrillance en rouge, révélant tous les emplacements que l'instruction a été exécutée sur la chronologie de la trace.

Pour sauter entre les exécutions, faites défiler vers le haut ou vers le bas tout en oscillant le pointeur d'instructions en surbrillance .
De plus, vous pouvez cliquer avec le bouton droit dans la liste de démontage 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.

La cure de hottes F2 native d'IDA peut également être utilisée pour définir des points d'arrêt sur les instructions arbitraires.
En double-cliquant sur un octet dans les vues de pile ou de mémoire, vous verrez instantanément toutes les lectures / écritures dans cette adresse visualisée à travers la chronologie de trace. Le jaune indique une lecture de mémoire, le bleu indique une écriture de mémoire.

Les points d'arrêt de la mémoire peuvent être navigés en utilisant la même technique décrite pour les points d'arrêt de l'exécution. Double-cliquez sur un octet et faites défiler tout en oscillant l' octet sélectionné pour rechercher la trace à chacun de ses accès.
Le clic droit sur un octet d'intérêt vous donnera des options à rechercher entre la lecture / l'écriture / l'accès de la mémoire s'il existe une action de navigation spécifique que vous avez en tête.

Pour naviguer dans la vue de la mémoire vers une adresse arbitraire, cliquez sur la vue de la mémoire et appuyez sur G pour saisir une adresse ou un symbole de base de données pour rechercher la vue.
Il est possible de définir un point d'arrêt de la mémoire à travers une région de mémoire en mettant en évidence un bloc de mémoire et en double-cliquez pour définir un point d'arrêt d'accès.

Comme pour les points de rupture de mémoire normaux, le plan de la région et le défilement peuvent être utilisés pour traverser les accès faits à la région de mémoire sélectionnée.
En ingénierie inverse, il est assez courant de rencontrer des situations où vous vous demandez "quelle instruction définit ce registre sur sa valeur actuelle?"
En utilisant le principe, vous pouvez rechercher en arrière à cette instruction en un seul clic.

La recherche en arrière est de loin la direction la plus courante pour parcourir les modifications du registre ... mais pour la dextérité, vous pouvez également rechercher la prochaine affectation de registre à l'aide de la flèche bleue à droite du registre.
Un simple «shell» est fourni pour naviguer vers des horodatages spécifiques dans la trace. Écouter (ou taper ...) Un horodatage dans la coquille avec ou sans virgules suffira.

En utilisant un point d'exclamation, vous pouvez également rechercher un «pourcentage» spécifié dans la trace. Entrée !100 cherchera à l'instruction finale dans la trace, où !50 cherchera environ 50% du chemin à travers la trace. !last cherchera à la dernière instruction navigable qui peut être consultée dans le désassembleur.
Le principe est expédié avec deux thèmes par défaut - un thème «léger» et un «sombre». Selon les couleurs actuellement utilisées par votre désassembleur, le principe tentera de sélectionner le thème qui semble le plus approprié.

Les fichiers de thème sont stockés comme JSON simples sur le disque et sont très configurables. Si vous n'êtes pas satisfait des thèmes ou des couleurs par défaut, vous pouvez créer vos propres thèmes et simplement les déposer dans le répertoire de thème utilisateur.
Le Tenet se souviendra de votre préférence de thème pour les charges et les utilisations futures.
Temps et motivation Le financement permet, les travaux futurs peuvent inclure:
Je salue les contributions, les problèmes et les demandes de fonctionnalités externes. Veuillez faire toutes les demandes de traction vers la branche develop de ce référentiel si vous souhaitez qu'ils soient considérés pour une future version.