
ATrace é uma ferramenta para rastrear a execução de binários no Windows.

EhTrace (pronuncia-se "ATrace") é um framework de rastreamento e instrumentação binária de alto desempenho para Windows. Permite análise profunda de executáveis Windows em tempo de execução sem exigir código-fonte, modificações binárias ou depuração tradicional.
EhTrace aproveita o Vectored Exception Handling (VEH) do Windows e técnicas de "block-stepping" para fornecer rastreamento abrangente da execução com sobrecarga mínima. Ao contrário de ferramentas tradicionais de depuração ou instrumentação, o EhTrace opera inteiramente no processo e não requer patches nos binários alvo.
flowchart TB
subgraph Target["🎯 Processo Alvo"]
direction TB
APP[Código da Aplicação]
VEH[Vectored Exception Handler]
style APP fill:#e1f5ff,stroke:#01579b,stroke-width:3px,color:#000
style VEH fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#000
end
subgraph EhTrace["⚡ Motor EhTrace"]
direction TB
BLOCK[Block Stepper]
DISASM[Desmontador Capstone]
FIGHTERS[BlockFighters]
CTX[Gerenciador de Contexto]
style BLOCK fill:#f3e5f5,stroke:#4a148c,stroke-width:3px,color:#000
style DISASM fill:#e8f5e9,stroke:#1b5e20,stroke-width:3px,color:#000
style FIGHTERS fill:#ffebee,stroke:#b71c1c,stroke-width:3px,color:#000
style CTX fill:#e0f2f1,stroke:#004d40,stroke-width:3px,color:#000
end
subgraph Output["📊 Saída de Análise"]
direction TB
SHMEM[Log de Memória Compartilhada]
GRAPHS[Gráficos Visuais]
REPORTS[Relatórios de Cobertura]
style SHMEM fill:#fce4ec,stroke:#880e4f,stroke-width:3px,color:#000
style GRAPHS fill:#f1f8e9,stroke:#33691e,stroke-width:3px,color:#000
style REPORTS fill:#fff8e1,stroke:#f57f17,stroke-width:3px,color:#000
end
APP -->|Exceção| VEH
VEH -->|Passo Único| BLOCK
BLOCK -->|Instrução| DISASM
DISASM -->|Análise| FIGHTERS
FIGHTERS -->|Estado| CTX
CTX -->|Eventos| SHMEM
SHMEM -->|Dados| GRAPHS
SHMEM -->|Dados| REPORTS
style Target fill:#e3f2fd,stroke:#0d47a1,stroke-width:4px
style EhTrace fill:#f3e5f5,stroke:#6a1b9a,stroke-width:4px
style Output fill:#e8f5e9,stroke:#2e7d32,stroke-width:4px
O EhTrace opera através de um pipeline sofisticado:
O framework mantém o estado de execução por thread usando estruturas de contexto especializadas e fornece hooks para instrumentação personalizável.
graph LR
subgraph Traditional["🐌 Depurador Tradicional"]
T1[Passo Único]
T2[Troca de Contexto]
T3[Modo Kernel]
T4[~1M eventos/seg]
style T1 fill:#ffcdd2,stroke:#c62828,stroke-width:2px,color:#000
style T2 fill:#ffcdd2,stroke:#c62828,stroke-width:2px,color:#000
style T3 fill:#ffcdd2,stroke:#c62828,stroke-width:2px,color:#000
style T4 fill:#ef5350,stroke:#b71c1c,stroke-width:3px,color:#fff
end
subgraph EhTrace["⚡ EhTrace"]
E1[Block Step]
E2[Intraprocesso]
E3[Modo Usuário]
E4[~43M eventos/seg]
style E1 fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px,color:#000
style E2 fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px,color:#000
style E3 fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px,color:#000
style E4 fill:#66bb6a,stroke:#1b5e20,stroke-width:3px,color:#fff
end
T1 --> T2 --> T3 --> T4
E1 --> E2 --> E3 --> E4
style Traditional fill:#ffebee,stroke:#d32f2f,stroke-width:3px
style EhTrace fill:#e8f5e9,stroke:#388e3c,stroke-width:3px
O EhTrace atinge alto desempenho através de várias otimizações:
📊 Benchmark: 428.833.152 eventos (32 bytes cada) capturados em 10 segundos = ~43M eventos/seg
Demonstração do CSW16 rastreando notepad.exe sem símbolos:

Grafo de blocos básicos com desmontagem Capstone:

Visualização de cobertura de código:

graph TD
subgraph Core["🎯 Componentes Principais"]
EH[EhTrace.dll<br/>Instrumentação Principal]
AC[Acleanout<br/>Dump de Logs]
AG[Agasm<br/>Gerador de Grafos]
style EH fill:#e1bee7,stroke:#6a1b9a,stroke-width:3px,color:#000
style AC fill:#c5cae9,stroke:#3949ab,stroke-width:3px,color:#000
style AG fill:#b2dfdb,stroke:#00695c,stroke-width:3px,color:#000
end
subgraph Tools["🔧 Ferramentas de Suporte"]
AL[Aload<br/>Injetor de DLL]
AP[Aprep<br/>EXE de Teste]
AS[Astrace<br/>Rastreador de Pilha]
style AL fill:#ffe0b2,stroke:#e65100,stroke-width:3px,color:#000
style AP fill:#f8bbd0,stroke:#c2185b,stroke-width:3px,color:#000
style AS fill:#d1c4e9,stroke:#512da8,stroke-width:3px,color:#000
end
subgraph Fuzzing["🐛 Integração com Fuzzing"]
AWA[AWinAFL<br/>Instrumentação AFL]
style AWA fill:#ffccbc,stroke:#d84315,stroke-width:3px,color:#000
end
subgraph Viz["📊 Visualização"]
WPF[WPFx<br/>Visualizador de Grafos]
DIA[Dia2Sharp<br/>Resolvedor de Símbolos]
ASF[AStackFolding<br/>Gráficos de Chamas]
style WPF fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#000
style DIA fill:#fff9c4,stroke:#f9a825,stroke-width:3px,color:#000
style ASF fill:#ffecb3,stroke:#ff8f00,stroke-width:3px,color:#000
end
EH -->|Logs| AC
AC -->|Dados| AG
AG -->|Grafos| WPF
AL -->|Injetar| EH
DIA -->|Símbolos| AG
ASF -->|Processar| AC
AWA -->|Variante| EH
style Core fill:#f3e5f5,stroke:#7b1fa2,stroke-width:4px
style Tools fill:#fff3e0,stroke:#ef6c00,stroke-width:4px
style Fuzzing fill:#fbe9e7,stroke:#bf360c,stroke-width:4px
style Viz fill:#e8f5e9,stroke:#388e3c,stroke-width:4px
O ecossistema EhTrace consiste em vários projetos integrados:
EhTrace.sln no Visual StudioPara instruções detalhadas de compilação, veja BUILDING.md
# Compilar EhTrace
msbuild EhTrace.sln /p:Configuration=Release /p:Platform=x64
# Injetar no alvo
Aload.exe target.exe EhTrace.dll
# Coletar dados de rastreamento
Acleanout.exe > trace.log
# Analisar com Agasm
Agasm.exe trace.log output.graph
Para documentação abrangente de uso, veja USAGE.md
O EhTrace suporta configuração em tempo de execução através do framework BlockFighters. Configure o comportamento de rastreamento modificando a configuração do fighter na sua compilação.
Fighters disponíveis:
EhTrace/
├── EhTrace/ # DLL principal de instrumentação
├── prep/ # Ferramentas e utilitários de suporte
├── vis/ # Componentes de visualização
├── support/ # Dependências e recursos
├── doc/ # Documentação
└── afl-fuzz/ # Integração com fuzzing AFL
EhTrace.cpp: Manipulador VEH principal e lógica centralBlockFighters.cpp: Implementação do framework de FightersConfig.cpp: Gerenciamento de configuração e símbolosGlobLog.cpp: Registro em memória compartilhadaKeyEscrow.cpp: Interceptação de chaves criptográficasRoP-Defender.cpp: Lógica de detecção de ROPEste projeto está licenciado sob a GNU Affero General Public License v3.0 - veja o arquivo LICENSE para detalhes.
Copyright (C) 2014-2016 Shane Macaulay
Contribuições são bem-vindas! Por favor, garanta que seu código siga o estilo existente e inclua testes apropriados.
Shane Macaulay ([email protected])
Para mais detalhes técnicos, veja: