Retour aux mises à jour
New releaseSep 18, 2026

DLLHijackHunter v2.5.0

Découverte, validation et confirmation automatisées du détournement de DLL. Transformer des erreurs de configuration locales en chemins d’attaque armés et confirmés.

Partager

DLLHijackHunter

Par ProjectMerai

Découverte, validation et confirmation automatisées du détournement de DLL sous Windows
De « cette DLL est peut-être détournable » à « un utilisateur standard peut amener SYSTEM à charger ceci — voici la preuve. »


Sommaire


Vue d'ensemble

DLLHijackHunter trouve les opportunités de détournement de DLL sur un hôte Windows et s'efforce de les prouver, pas seulement de les lister. Il :

  1. Découvre chaque emplacement où un binaire est lancé automatiquement — services, tâches planifiées, clés Run, dossiers Startup, serveurs COM, DLL AppInit/AppCert, entrées IFEO et binaires UAC à auto-élévation — et calcule où chaque DLL importée serait recherchée.
  2. Filtre les emplacements qu'un attaquant ne peut pas réellement exploiter : API sets, KnownDLLs, répertoires dans lesquels un utilisateur standard ne peut pas écrire, processus protégés, et plus encore.
  3. Vérifie (facultatif) avec le véritable chargeur Windows, en plaçant une DLL sonde bénigne et en vérifiant quelle copie remporte la recherche.
  4. Confirme (facultatif) en déployant une DLL canary inoffensive, en déclenchant le service/la tâche/l'objet COM, et en enregistrant l'identité sous laquelle il s'est réellement exécuté.
  5. Note et rapporte chaque constatation selon la confiance et l'impact, et corrèle les constatations en chaînes d'attaque (par exemple utilisateur standard → SYSTEM).

Chaque jugement est rendu du point de vue de l'attaquant — un utilisateur standard non privilégié — que le scanner lui-même s'exécute ou non avec élévation. S'exécuter en tant qu'Administrateur donne à l'outil plus de visibilité (ETW, canary, déclencheurs de service) ; cela ne rend jamais les répertoires protégés inscriptibles et ne gonfle jamais le privilège obtenu.


Démarrage rapide

Téléchargez ou compilez DLLHijackHunter.exe (autonome ; aucune installation de .NET nécessaire), puis depuis une invite élevée :

# Passive, read-only triage: no file drops, no service/task starts
.\DLLHijackHunter.exe --profile safe

# Full static analysis without touching the system, JSON report
.\DLLHijackHunter.exe --profile aggressive --no-canary --no-etw -o report.json

# Static analysis + real-loader verification (writes probe DLLs transiently)
.\DLLHijackHunter.exe --profile aggressive --no-canary --no-etw --verify-load -o report.html

# Everything, including ETW and canary confirmation — lab / authorised targets only
.\DLLHijackHunter.exe --profile aggressive -o report.html

# Focus on one application
.\DLLHijackHunter.exe --target "C:\Program Files\MyApp\app.exe" --no-canary

Antivirus : les DLL canary et probe ne sont pas signées et se comportent comme des charges utiles de détournement, de sorte que Microsoft Defender peut les mettre en quarantaine. L'outil détecte cela et signale ces résultats comme non concluants plutôt que « non détournable ». Sur une machine de test, excluez les répertoires cibles et %ProgramData%\DLLHijackHunter pour obtenir des résultats définitifs.


Fonctionnement

flowchart TB
    subgraph S1["1 · Discovery"]
        direction LR
        EN["Launch points<br/>services · tasks · Run keys<br/>startup · COM · AutoElevate"] --> PE["PE analysis<br/>imports · delay loads<br/>manifest"] --> SO["Search order<br/>identity-aware PATH"]
        ETW["ETW runtime trace<br/>optional, elevated"]
    end
    subgraph S2["2 · Filter pipeline"]
        direction LR
        HG["Hard gates<br/>API sets · KnownDLLs<br/>writability"] --> SG["Soft gates<br/>manifest · privilege<br/>PPL · LoadLibraryEx"] --> DD["Dedup and<br/>profile filters"]
    end
    subgraph S3["3 · Verification (optional)"]
        direction LR
        LP["Load probe<br/>real Windows loader"] --> CN["Canary<br/>deploy, trigger, confirm"]
    end
    subgraph S4["4 · Output"]
        direction LR
        SC["Scoring and tiers"] --> AC["Attack chains"] --> RP["Console · JSON · HTML"]
    end
    S1 --> S2 --> S3 --> S4
PhaseNécessite un administrateurModifie le système
Découverte statique + filtresNon (l'admin voit davantage)Non
Découverte d'exécution ETWOuiDémarre des services à démarrage automatique (jusqu'à 100) et exécute des tâches planifiées (jusqu'à 30) pour provoquer des chargements de DLL
Sonde de chargement (--verify-load)NonÉcrit brièvement une DLL sonde bénigne à chaque position candidate, puis la supprime et restaure toute originale
Confirmation par canariOuiÉcrit une DLL canari, arrête/démarre des services, exécute des tâches, active des objets COM, puis nettoie

Ce qu'il détecte

Types de détournement

TypeSignificationRemarques
FantômeLa DLL n'existe nulle part dans le chemin de recherchePlacez-la n'importe où dans les chemins de recherche du binaire
Ordre de rechercheUn répertoire inscriptible est recherché avant la copie légitimeInclut l'écrasement d'une DLL dans un répertoire inscriptible
ENV PATHUn répertoire inscriptible dans PATH est recherché pour une DLL manquanteLes services sont évalués uniquement par rapport au PATH machine — les entrées PATH de l'utilisateur ne sont jamais recherchées par un service
Redirection .localRedirection <app>.exe.local\<dll>Signalée uniquement pour les exécutables sans manifeste (ou lorsque IFEO DevOverrideEnable=1) ; le chargeur ignore .local sinon, et il ne redirige jamais les KnownDLLs
Side-load (UAC)Copier un EXE à auto-élévation à côté d'une DLL plantéeUniquement pour les EXE avec <autoElevate>true</autoElevate> dans leur manifeste. L'auto-élévation exige un emplacement de confiance, donc la copie doit passer cette vérification (par ex. un dossier factice C:\Windows \System32\)
AppInit DLLsAppInit_DLLs pointe vers une DLL inscriptibleChargée dans chaque processus qui charge user32.dll
AppCert DLLsAppCertDLLs pointe vers une DLL inscriptibleChargée dans chaque appelant de CreateProcess/WinExec

Les binaires IFEO Debugger et SilentProcessExit\MonitorProcess sont énumérés et analysés comme tout autre point de lancement. Les détournements basés sur le CWD ne sont pas produits actuellement.

Sous quelle identité s'exécute la cible

Une identité correcte détermine à la fois le verdict d'élévation de privilèges et le score d'impact :

Catégories