Ejecution Trace Viewer es una aplicación para ver, editar y analizar trazas de ejecución. Originalmente se hizo para el código ofuscado de ingeniería inversa, pero se puede usar para analizar cualquier tipo de rastro de ejecución.

git clone https://github.com/teemu-l/execution-trace-viewer
pip install pyqt5 yapsy qdarkstyle capstone
python tv.pySe admiten los siguientes formatos de archivo:
.tvt: formato de archivo predeterminado. Desarrollado a partir del formato de rastreo X64DBG. 3 Diferencias con el formato X64DBG: comentarios, desastres y marcadores agregados.
.TRACE32 / .TRACE64 - Formato de archivo X64DBG. Solo lectura apoyada. Cargar trazas X64DBG es lenta porque el código debe ser desmontado.
JSON: las trazas se pueden guardar y cargar a partir de archivos de texto JSON.
La carpeta de trazas contiene una traza de muestra. Son ~ 11k líneas de código ofuscado (por VMProtect3). Todos los manejadores están desmontados y agregados a la mesa de marcadores.
Ejecution Trace Viewer puede extenderse mediante complementos Python3. Los complementos se inician desde el menú de complementos o desde el menú de clic derecho en la mesa de rastreo. Verifique los complementos de ejemplo y Core/API.PY para obtener más información.
Más complementos:
Filtros de ejemplo:
| Filtrar | Descripción |
|---|---|
| Disasm = Push | Pop | Disasma contiene push o pop (push, pushfd, pop, etc.) |
| reg_eax = 0x1337 | Mostrar filas donde EAX es 0x1337 |
| reg_any = 0x1337 | Cualquier valor regal es 0x1337 |
| mem_value = 0x1337 | Leer o escribir valor 0x1337 a la memoria |
| mem_read_value = 0x1337 | Valor de lectura 0x1337 desde la memoria |
| mem_addr = 0x4f20 | Leer o escribir en la dirección de memoria 0x4f20 |
| mem_read_addr = 0x40400 | Lea desde la dirección de memoria 0x40400 |
| mem_write_addr = 0x40400 | Escriba a la dirección de memoria 0x40400 |
| Opcodes = C704 | Filtrar por códigos de operación |
| filas = 20-50 | Mostrar solo filas 20-50 |
| regex = 0x40? 00 | búsqueda de reglas sensibles a los casos para toda la fila (incluido el comentario) |
| regex = leer | Mostrar insctructions que leen memoria |
| iregex = basura | descifrar | Regex inverso, las filas con 'basura' o 'descifrar' se filtran |
| comentario = descifrar | filtrar por comentario |
Es posible unir múltiples filtros juntos:
disasm=xor/reg_any=0x1337 ; show all xor instructions where atleast one register value is 0x1337
Para un filtrado más complejo, puede crear un complemento de filtro y guardar la lista de resultados usando API.SET_FILTERED_TRACE (). Luego muestre el rastro llamando a api.show_filtered_trace ().
Encuentra la fila siguiente o anterior que contiene palabras clave/valor especificadas en traza.
Encuentre la escritura de memoria anterior:
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
)Campos traza: Disasm, regs, mem, mem_addr, mem_value, comentario, cualquiera
Disasm Field admite múltiples palabras clave: "Xor/SHL/SHR". El campo MEM verifica los tres campos en el acceso MEM (acceso, ADDR y valor). Se deben dar enteros en hexadecimal.
El tema oscuro se puede deshabilitar editando prefs.py:
USE_DARK_THEME = False MIT
Desarrollado por Teemu Laurila.
Contacto:
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 ]])))