La visionneuse de trace d'exécution est une application pour la visualisation, l'édition et l'analyse des traces d'exécution. Il a été initialement conçu pour le code obscurci de l'ingénierie inverse, mais il peut être utilisé pour analyser tout type de trace d'exécution.

git clone https://github.com/teemu-l/execution-trace-viewer
pip install pyqt5 yapsy qdarkstyle capstone
python tv.pyLes formats de fichiers suivants sont pris en charge:
.TVT - Format de fichier par défaut. Développé à partir du format de trace x64dbg. 3 Différences avec le format x64dbg: commentaires, désasme et signets ajoutés.
.trace32 / .trace64 - format de fichier x64dbg. Seule la lecture soutenue. Le chargement des traces x64dbg est lent car le code doit être démonté.
JSON - Les traces peuvent être enregistrées et chargées à partir de fichiers texte JSON.
Le dossier des traces contient une trace d'échantillon. Il s'agit de lignes ~ 11k de code obscurci (par vmprotect3). Tous les gestionnaires sont démontés et ajoutés à la table des signets.
La visionneuse de trace d'exécution peut être étendue par les plugins Python3. Les plugins sont lancés à partir du menu des plugins ou à partir du menu de clic droit sur la table de trace. Vérifiez l'exemple de plugins et core / api.py pour plus d'informations.
Plus de plugins:
Exemples de filtres:
| Filtre | Description |
|---|---|
| Disasm = Push | Pop | Disasm contient des mots push ou pop (push, pushfd, pop, etc.) |
| reg_eax = 0x1337 | Afficher les lignes où EAX est 0x1337 |
| reg_any = 0x1337 | Toute valeur Reg est 0x1337 |
| mem_value = 0x1337 | Lire ou écrire la valeur 0x1337 à la mémoire |
| mem_read_value = 0x1337 | Lire la valeur 0x1337 de la mémoire |
| mem_addr = 0x4f20 | Lisez ou écrivez à l'adresse mémoire 0x4f20 |
| mem_read_addr = 0x40400 | Lire à partir de l'adresse mémoire 0x40400 |
| mem_write_addr = 0x40400 | Écrivez à l'adresse mémoire 0x40400 |
| OPCODES = C704 | filtre par opcodes |
| lignes = 20-50 | Afficher uniquement les lignes 20-50 |
| regex = 0x40? 00 | Recherche de regex textes sensibles à la casse (y compris les commentaires) |
| regex = lire | Afficher les insctructions qui lisent la mémoire |
| iregex = Junk | Decrypt | inverse regex, les rangées avec «indésirable» ou «décrypt» sont filtrées |
| commentaire = décrypter | Filtre par commentaire |
Il est possible de rejoindre plusieurs filtres ensemble:
disasm=xor/reg_any=0x1337 ; show all xor instructions where atleast one register value is 0x1337
Pour un filtrage plus complexe, vous pouvez créer un plugin de filtre et enregistrer la liste de résultats à l'aide d'API.set_filtered_trace (). Affichez ensuite la trace en appelant api.show_filtered_trace ().
Recherche la ligne suivante ou précédente contenant un mot-clé / valeur spécifié dans la trace.
Trouver la mémoire précédente Écriture:
from core . filter_and_find import TraceField
current_row = 500
next_row = find (
trace = trace_data . trace ,
field = TraceField . MEM ,
keyword = 'WRITE' ,
start_row = current_row ,
direction = - 1
)TRACE FIELDS: DISASAS, REGS, MEM, MEM_ADDR, MEM_VALUE, commentaire, tout
Disasm Field prend en charge plusieurs mots clés: "XOR / SHL / SHR". Le champ MEM vérifie les trois champs dans l'accès MEM (accès, addr et valeur). Les entiers doivent être donnés en hexadécimal.
Le thème sombre peut être désactivé en modifiant les prefs.py:
USE_DARK_THEME = False Mit
Développé par Teemu Laurila.
Contact:
print ( '' . join ( map ( chr ,[ k ^ 86 for k in [ 34 , 51 , 51 , 59 , 35 , 58 , 55 , 22 , 38 , 36 , 57 , 34 , 57 , 56 , 59 , 55 , 63 , 58 , 120 , 53 , 57 , 59 ]])))