Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/teach2breach/moonwalk
Post-ExploitationAnalyse de BinairesApprentissage et ÉducationRed TeamingDéveloppement de Charges Utiles
GitHubteach2breach/moonwalk

moonwalk

trouver les adresses de base des dll sans PEB WALK

Voir le dépôt
17021il y a 1 anVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

moonwalk : localisateur d'adresse de base de DLL

Cette bibliothèque Rust et cet outil CLI illustrent une méthode alternative pour trouver l'adresse de base des DLL chargées sans avoir recours à une marche du Process Environment Block (PEB). Cette technique est particulièrement utile dans les scénarios où la marche du PEB pourrait être détectée ou bloquée.

Différences entre les branches

Ce dépôt contient deux branches avec des approches différentes :

Branche principale

  • Utilise la crate winapi et VirtualQuery pour la validation de la mémoire
  • Les fonctions de la bibliothèque (lib.rs) ne contiennent aucune instruction d'impression pour une intégration propre
  • L'outil CLI (main.rs) inclut des sorties de débogage pour la preuve de concept
  • Idéal pour apprendre et comprendre la technique

Branche OPSEC

  • Aucune dépendance externe - entièrement autonome
  • Aucun appel aux API Windows - utilise un accès direct à la mémoire avec gestion des exceptions au lieu de VirtualQuery
  • Aucune instruction d'impression dans les fonctions de la bibliothèque
  • Furtivité renforcée - n'effectue aucun appel API
  • Meilleur pour les implants/outils - laisse moins de traces et est plus difficile à détecter

Les deux branches sont sûres à utiliser, mais la branche OPSEC offre des avantages supplémentaires en matière de sécurité opérationnelle pour les scénarios où les appels API pourraient être surveillés ou bloqués.

Comment ça fonctionne

Le programme utilise une approche de parcours de pile (stack walking) pour localiser les DLL :

  1. Accès au Thread Environment Block (TEB) :

    • Utilise l'assembleur inline pour lire le pointeur TEB à partir du registre de segment GS (GS:[0x30])
    • Récupère la base de la pile (GS:[0x08]) et la limite de la pile (GS:[0x10]) depuis le TEB
  2. Parcours de la pile (Stack Walking) :

    • Démarre à partir du pointeur de pile actuel (RSP)
    • Remonte la pile à la recherche d'adresses de retour
    • Vérifie si chaque adresse correspond à de la mémoire exécutable
    • Branche principale : utilise VirtualQuery pour valider les régions mémoire
    • Branche OPSEC : utilise un accès direct à la mémoire avec gestion des exceptions
  3. Identification du module :

    • Pour chaque adresse de retour potentielle, vérifie si elle pointe vers de la mémoire exécutable
    • Lorsqu'une mémoire exécutable est trouvée, remonte en arrière pour trouver l'en-tête PE
    • Valide le module en vérifiant :
      • la signature MZ (en-tête DOS)
      • la signature PE
      • les caractéristiques DLL
      • l'architecture 64 bits
      • le nom du module depuis le répertoire d'exportation
  4. Validation :

    • Vérifie que le module est la DLL cible en contrôlant son nom dans le répertoire d'exportation
    • Confirme que toutes les structures de l'en-tête PE sont valides

Pourquoi cette approche ?

Les méthodes traditionnelles pour trouver les DLL impliquent souvent de parcourir la liste des modules du PEB. Bien que cette approche soit efficace, elle peut :

  • être détectée par les logiciels de sécurité
  • être bloquée dans certains environnements

Cette méthode de parcours de pile offre une alternative qui :

  • ne repose pas sur le PEB
  • peut fonctionner dans des environnements où le parcours du PEB est bloqué
  • Branche OPSEC : n'effectue aucun appel API

Prérequis

  • Rust (chaîne d'outils nightly)
  • Windows x64
  • Branche principale : crate winapi
  • Branche OPSEC : aucune dépendance externe

Utilisation

En tant que bibliothèque

Ajoutez à votre Cargo.toml :

Branche principale :

root@kitploit:~
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git" }

Branche OPSEC :

root@kitploit:~
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git", branch = "opsec" }

Exemple d'utilisation dans votre code :

root@kitploit:~
use moonwalk::find_dll_base;

fn main() {
    // Find ntdll.dll
    if let Some(ntdll_base) = find_dll_base("ntdll.dll") {
        println!("ntdll.dll base: 0x{:X}", ntdll_base);
    }

    // Case-insensitive, .dll extension optional
    if let Some(kernel32_base) = find_dll_base("KeRNEl32") {
        println!("kernel32.dll base: 0x{:X}", kernel32_base);
    }
}

En tant qu'outil CLI

Compilation :

root@kitploit:~
cargo build --release

Exécution :

root@kitploit:~
# Find ntdll.dll (default)
cargo run --release

# Find specific DLL (case insensitive, .dll extension optional)
cargo run --release kernel32.dll
cargo run --release KeRNEl32
cargo run --release USER32

Exemple

Les instructions d'impression ne sont plus incluses. Cette image est incluse à des fins pédagogiques.

Démonstration de Moonwalk DLL Base Address Finder

Remarques

  • Les noms de DLL sont insensibles à la casse et l'extension .dll est facultative
  • Ne fonctionne qu'avec les DLL présentes dans la pile d'appels
  • Branche principale : utilise VirtualQuery pour une validation sûre de l'accès à la mémoire
  • Branche OPSEC : utilise un accès direct à la mémoire avec gestion des exceptions pour une discrétion maximale
  • Les deux branches disposent d'interfaces de bibliothèque propres, sans sortie de débogage
Télécharger l’outil