
Trova gli indirizzi di base delle DLL senza PEB WALK
Questa libreria Rust e strumento CLI dimostrano un metodo alternativo per trovare l'indirizzo base delle DLL caricate senza utilizzare un attraversamento del Process Environment Block (PEB). Questa tecnica è particolarmente utile in scenari in cui l'attraversamento del PEB potrebbe essere rilevato o bloccato.
Questo repository contiene due branch con approcci diversi:
winapi e VirtualQuery per la validazione della memorialib.rs) non contengono istruzioni di stampa per un'integrazione pulitamain.rs) include output di debug per la proof of conceptVirtualQueryEntrambi i branch sono sicuri da usare, ma il branch OPSEC offre ulteriori vantaggi di sicurezza operativa per scenari in cui le chiamate API potrebbero essere monitorate o bloccate.
Il programma utilizza un approccio di attraversamento dello stack per individuare le DLL:
Accesso al Thread Environment Block (TEB):
Attraversamento dello stack:
VirtualQuery per validare le regioni di memoriaIdentificazione del modulo:
Validazione:
I metodi tradizionali per trovare le DLL spesso implicano l'attraversamento della lista dei moduli del PEB. Sebbene efficace, questo approccio può essere:
Questo metodo di attraversamento dello stack offre un'alternativa che:
winapiAggiungi al tuo Cargo.toml:
Branch principale:
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git" }
Branch OPSEC:
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git", branch = "opsec" }
Esempio di utilizzo nel tuo codice:
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);
}
}
Compila:
cargo build --release
Esegui:
# 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
Le istruzioni di stampa non sono più incluse. Questa immagine è inclusa a scopo didattico.

VirtualQuery per una validazione sicura dell'accesso alla memoria