
ATrace è uno strumento per tracciare l'esecuzione di binari su Windows.

EhTrace (pronunciato "ATrace") è un framework di tracciamento e instrumentazione binaria ad alte prestazioni per Windows. Consente un'analisi approfondita dell'esecuzione runtime degli eseguibili Windows senza richiedere codice sorgente, modifiche binarie o debugging tradizionale.
EhTrace sfrutta la gestione delle eccezioni vettoriali di Windows (VEH) e tecniche di "block-stepping" per fornire un tracciamento completo dell'esecuzione con un overhead minimo. A differenza degli strumenti tradizionali di debugging o instrumentazione, EhTrace opera interamente in-process e non richiede patch ai binari target.
flowchart TB
subgraph Target["🎯 Processo target"]
direction TB
APP[Codice applicazione]
VEH[Gestore eccezioni vettoriali]
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["⚡ Motore EhTrace"]
direction TB
BLOCK[Block Stepper]
DISASM[Disassemblatore Capstone]
FIGHTERS[BlockFighters]
CTX[Gestore contesto]
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["📊 Output di analisi"]
direction TB
SHMEM[Log memoria condivisa]
GRAPHS[Grafici visivi]
REPORTS[Report di copertura]
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 -->|Eccezione| VEH
VEH -->|Single Step| BLOCK
BLOCK -->|Istruzione| DISASM
DISASM -->|Analisi| FIGHTERS
FIGHTERS -->|Stato| CTX
CTX -->|Eventi| SHMEM
SHMEM -->|Dati| GRAPHS
SHMEM -->|Dati| 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
EhTrace opera attraverso una pipeline sofisticata:
Il framework mantiene lo stato di esecuzione per thread utilizzando strutture di contesto specializzate e fornisce hook per un'instrumentazione personalizzabile.
graph LR
subgraph Traditional["🐌 Debugger tradizionale"]
T1[Single Step]
T2[Cambio contesto]
T3[Modalità kernel]
T4[~1M eventi/sec]
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[In-Process]
E3[Modalità utente]
E4[~43M eventi/sec]
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
EhTrace raggiunge alte prestazioni grazie a diverse ottimizzazioni:
📊 Benchmark: 428.833.152 eventi (32 byte ciascuno) catturati in 10 secondi = ~43M eventi/sec
Demo CSW16 di tracing di notepad.exe senza simboli:

Grafico del blocco di base con disassemblaggio Capstone:

Visualizzazione della copertura del codice:

graph TD
subgraph Core["🎯 Componenti principali"]
EH[EhTrace.dll<br/>Instrumentazione principale]
AC[Acleanout<br/>Dump log]
AG[Agasm<br/>Generatore grafico]
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["🔧 Strumenti di supporto"]
AL[Aload<br/>Iniettore DLL]
AP[Aprep<br/>EXE di test]
AS[Astrace<br/>Tracer dello stack]
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["🐛 Integrazione fuzzing"]
AWA[AWinAFL<br/>Instrumentazione AFL]
style AWA fill:#ffccbc,stroke:#d84315,stroke-width:3px,color:#000
end
subgraph Viz["📊 Visualizzazione"]
WPF[WPFx<br/>Visualizzatore grafico]
DIA[Dia2Sharp<br/>Risolutore simboli]
ASF[AStackFolding<br/>Flame graphs]
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 -->|Log| AC
AC -->|Dati| AG
AG -->|Grafici| WPF
AL -->|Inietta| EH
DIA -->|Simboli| AG
ASF -->|Elabora| 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
L'ecosistema EhTrace è composto da diversi progetti integrati:
EhTrace.sln in Visual StudioPer istruzioni dettagliate sulla build, consulta BUILDING.md
# Compila EhTrace
msbuild EhTrace.sln /p:Configuration=Release /p:Platform=x64
# Inietta nel target
Aload.exe target.exe EhTrace.dll
# Raccogli dati di tracciamento
Acleanout.exe > trace.log
# Analizza con Agasm
Agasm.exe trace.log output.graph
Per la documentazione completa sull'utilizzo, consulta USAGE.md
EhTrace supporta la configurazione runtime tramite il framework BlockFighters. Configura il comportamento di tracciamento modificando la configurazione dei fighter nella tua build.
Fighter disponibili:
EhTrace/
├── EhTrace/ # DLL di instrumentazione principale
├── prep/ # Strumenti e utility di supporto
├── vis/ # Componenti di visualizzazione
├── support/ # Dipendenze e risorse
├── doc/ # Documentazione
└── afl-fuzz/ # Integrazione fuzzing AFL
EhTrace.cpp: Gestore VEH principale e logica principaleBlockFighters.cpp: Implementazione del framework FighterConfig.cpp: Gestione della configurazione e dei simboliGlobLog.cpp: Logging in memoria condivisaKeyEscrow.cpp: Intercettazione chiavi crittograficheRoP-Defender.cpp: Logica di rilevamento ROPQuesto progetto è concesso in licenza secondo la GNU Affero General Public License v3.0 - consulta il file LICENSE per i dettagli.
Copyright (C) 2014-2016 Shane Macaulay
I contributi sono benvenuti! Assicurati che il tuo codice segua lo stile esistente e includa test appropriati.
Shane Macaulay ([email protected])
Per ulteriori dettagli tecnici, consulta: