
trouver les adresses de base des dll sans PEB WALK
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.
Ce dépôt contient deux branches avec des approches différentes :
winapi et VirtualQuery pour la validation de la mémoirelib.rs) ne contiennent aucune instruction d'impression pour une intégration propremain.rs) inclut des sorties de débogage pour la preuve de conceptVirtualQueryLes 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.
Le programme utilise une approche de parcours de pile (stack walking) pour localiser les DLL :
Accès au Thread Environment Block (TEB) :
Parcours de la pile (Stack Walking) :
VirtualQuery pour valider les régions mémoireIdentification du module :
Validation :
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 :
Cette méthode de parcours de pile offre une alternative qui :
winapiAjoutez à votre Cargo.toml :
Branche principale :
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git" }
Branche OPSEC :
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git", branch = "opsec" }
Exemple d'utilisation dans votre code :
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);
}
}
Compilation :
cargo build --release
Exécution :
# 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
Les instructions d'impression ne sont plus incluses. Cette image est incluse à des fins pédagogiques.

VirtualQuery pour une validation sûre de l'accès à la mémoire