O Execution Trace Viewer é um aplicativo para visualizar, editar e analisar traços de execução. Foi originalmente feito para o código ofuscado de engenharia reversa, mas pode ser usado para analisar qualquer tipo de rastreamento de execução.

git clone https://github.com/teemu-l/execution-trace-viewer
pip install pyqt5 yapsy qdarkstyle capstone
python tv.pyOs formatos de arquivo a seguir são suportados:
.tvt - formato de arquivo padrão. Desenvolvido a partir do formato de rastreamento x64dbg. 3 Diferenças com o formato x64dbg: Comentários, Disasm e marcadores adicionados.
.TRACE32 / .TRACE64 - X64DBG Formato de arquivo. Somente lendo suportado. Carregar rastreios x64dbg é lento porque o código precisa ser desmontado.
JSON - Os traços podem ser salvos e carregados a partir de arquivos de texto JSON.
A pasta Traces contém um rastreamento de amostra. São ~ 11k linhas de código ofuscado (por VMProtect3). Todos os manipuladores são desmontados e adicionados à tabela de favoritos.
O visualizador de rastreamento de execução pode ser estendido por plugins Python3. Os plug-ins são iniciados no menu Plugins ou no menu do clique com o botão direito do mouse na tabela de rastreamento. Verifique os plugins de exemplo e o núcleo/api.py para obter mais informações.
Mais plugins:
Exemplo de filtros:
| Filtro | Descrição |
|---|---|
| DISASM = Push | POP | Disasm contém push ou pop de palavras (push, pushfd, pop, etc) |
| reg_eax = 0x1337 | Mostrar linhas onde o EAX é 0x1337 |
| reg_any = 0x1337 | Qualquer valor de reg é 0x1337 |
| mem_value = 0x1337 | Leia ou escreva o valor 0x1337 na memória |
| mem_read_value = 0x1337 | Leia o valor 0x1337 da memória |
| mem_addr = 0x4f20 | Leia ou escreva para o endereço de memória 0x4f20 |
| mem_read_addr = 0x40400 | Leia no endereço de memória 0x40400 |
| mem_write_addr = 0x40400 | Escreva para o endereço de memória 0x40400 |
| OPCODES = C704 | filtre por opcodes |
| linhas = 20-50 | Mostre apenas linhas 20-50 |
| regex = 0x40? 00 | Pesquisa regex sensível ao caso por uma linha inteira (incluindo comentário) |
| regex = leia | mostrar insctructions que lêem memória |
| IREGEX = Lixo | Descriptografar | Regex inverso, linhas com 'lixo' ou 'descriptografar' são filtradas |
| Comentário = descriptografar | filtre por comentário |
É possível juntar vários filtros:
disasm=xor/reg_any=0x1337 ; show all xor instructions where atleast one register value is 0x1337
Para filtragem mais complexa, você pode criar um plug -in de filtro e salvar a lista de resultados usando API.SET_FILTERED_TRACE (). Em seguida, mostre o rastreamento chamando API.SHOW_FILTERED_TRACE ().
Encontra a linha seguinte ou anterior que contém palavras -chave/valor especificadas em rastreamento.
Encontre a memória anterior escrita:
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 de rastreamento: DISASM, REGS, MEM, MEM_ADDR, MEM_VALUE, COMENTÁRIO, QUALQUER
O campo DISASM suporta várias palavras -chave: "XOR/SHL/SHR". O campo MEM verifica todos os três campos no MEM Access (acesso, addr e valor). Os números inteiros devem ser dados em hexadecimal.
O tema sombrio pode ser desativado editando prefs.py:
USE_DARK_THEME = False Mit
Desenvolvido por Teemu Laurila.
Contato:
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 ]])))