
ATrace est un outil pour tracer l'exécution de binaires sous Windows.

EhTrace (prononcé « ATrace ») est un framework de traçage et d’instrumentation binaire haute performance pour Windows. Il permet une analyse approfondie de l’exécution des exécutables Windows sans nécessiter de code source, de modifications binaires ni de débogage traditionnel.
EhTrace exploite la gestion vectorisée des exceptions (VEH) de Windows ainsi que des techniques de pas-à-pas par blocs pour fournir un traçage complet de l’exécution avec une surcharge minimale. Contrairement aux outils de débogage ou d’instrumentation traditionnels, EhTrace opère entièrement dans le processus et ne nécessite aucune modification des binaires cibles.
flowchart TB
subgraph Cible["🎯 Processus cible"]
direction TB
APP[Code applicatif]
VEH[Gestionnaire vectorisé d’exceptions]
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["⚡ Moteur EhTrace"]
direction TB
BLOCK[Pas-à-pas par blocs]
DISASM[Désassembleur Capstone]
FIGHTERS[BlockFighters]
CTX[Gestionnaire de contexte]
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 Sortie["📊 Analyse en sortie"]
direction TB
SHMEM[Mémoire partagée – journal]
GRAPHS[Graphiques visuels]
REPORTS[Rapports de couverture]
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 -->|Exception| VEH
VEH -->|Pas-à-pas| BLOCK
BLOCK -->|Instruction| DISASM
DISASM -->|Analyse| FIGHTERS
FIGHTERS -->|État| CTX
CTX -->|Événements| SHMEM
SHMEM -->|Données| GRAPHS
SHMEM -->|Données| REPORTS
style Cible fill:#e3f2fd,stroke:#0d47a1,stroke-width:4px
style EhTrace fill:#f3e5f5,stroke:#6a1b9a,stroke-width:4px
style Sortie fill:#e8f5e9,stroke:#2e7d32,stroke-width:4px
EhTrace fonctionne via un pipeline sophistiqué :
Le framework maintient l’état d’exécution par thread à l’aide de structures de contexte spécialisées et fournit des points d’accroche pour une instrumentation personnalisable.
graph LR
subgraph Traditionnel["🐌 Débogueur traditionnel"]
T1[Pas-à-pas unique]
T2[Changement de contexte]
T3[Mode noyau]
T4[~1M événements/s]
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[Pas-à-pas par blocs]
E2[Intra-processus]
E3[Mode utilisateur]
E4[~43M événements/s]
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 Traditionnel fill:#ffebee,stroke:#d32f2f,stroke-width:3px
style EhTrace fill:#e8f5e9,stroke:#388e3c,stroke-width:3px
EhTrace atteint des performances élevées grâce à plusieurs optimisations :
📊 Benchmark : 428 833 152 événements (32 octets chacun) capturés en 10 secondes = ~43M événements/s
Trace de démonstration CSW16 de notepad.exe sans symboles :

Graphe de blocs de base avec désassemblage Capstone :

Visualisation de la couverture de code :

graph TD
subgraph Noyau["🎯 Composants principaux"]
EH[EhTrace.dll<br/>Instrumentation principale]
AC[Acleanout<br/>Extracteur de journaux]
AG[Agasm<br/>Générateur de graphes]
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 Outils["🔧 Outils annexes"]
AL[Aload<br/>Injecteur de DLL]
AP[Aprep<br/>EXE de test]
AS[Astrace<br/>Traceur de pile]
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["🐛 Intégration fuzzing"]
AWA[AWinAFL<br/>Instrumentation AFL]
style AWA fill:#ffccbc,stroke:#d84315,stroke-width:3px,color:#000
end
subgraph Visualisation["📊 Visualisation"]
WPF[WPFx<br/>Visionneuse de graphes]
DIA[Dia2Sharp<br/>Résolveur de symboles]
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 -->|Journaux| AC
AC -->|Données| AG
AG -->|Graphes| WPF
AL -->|Injection| EH
DIA -->|Symboles| AG
ASF -->|Traitement| AC
AWA -->|Variante| EH
style Noyau fill:#f3e5f5,stroke:#7b1fa2,stroke-width:4px
style Outils fill:#fff3e0,stroke:#ef6c00,stroke-width:4px
style Fuzzing fill:#fbe9e7,stroke:#bf360c,stroke-width:4px
style Visualisation fill:#e8f5e9,stroke:#388e3c,stroke-width:4px
L’écosystème EhTrace se compose de plusieurs projets intégrés :
EhTrace.sln dans Visual StudioPour des instructions détaillées, consultez BUILDING.md
# Compilation d'EhTrace
msbuild EhTrace.sln /p:Configuration=Release /p:Platform=x64
# Injection dans la cible
Aload.exe target.exe EhTrace.dll
# Collecte des données de trace
Acleanout.exe > trace.log
# Analyse avec Agasm
Agasm.exe trace.log output.graph
Pour une documentation complète, consultez USAGE.md
EhTrace prend en charge la configuration à l’exécution via le framework BlockFighters. Configurez le comportement de traçage en modifiant la configuration des fighters dans votre build.
Fighters disponibles :
EhTrace/
├── EhTrace/ # DLL d’instrumentation principale
├── prep/ # Outils et utilitaires annexes
├── vis/ # Composants de visualisation
├── support/ # Dépendances et ressources
├── doc/ # Documentation
└── afl-fuzz/ # Intégration fuzzing AFL
EhTrace.cpp : gestionnaire VEH principal et logique centraleBlockFighters.cpp : implémentation du framework FighterConfig.cpp : configuration et gestion des symbolesGlobLog.cpp : journalisation en mémoire partagéeKeyEscrow.cpp : interception de clés cryptographiquesRoP-Defender.cpp : logique de détection ROPCe projet est sous licence GNU Affero General Public License v3.0 – consultez le fichier LICENSE pour plus de détails.
Copyright (C) 2014-2016 Shane Macaulay
Les contributions sont les bienvenues ! Veuillez vous assurer que votre code respecte le style existant et inclut les tests appropriés.
Shane Macaulay ([email protected])
Pour plus de détails techniques, consultez :