
Encontrar direcciones base de DLL sin PEB WALK
Esta biblioteca y herramienta CLI escrita en Rust demuestra un método alternativo para encontrar la dirección base de DLL cargadas sin utilizar un recorrido del Process Environment Block (PEB). Esta técnica es particularmente útil en escenarios donde el recorrido del PEB podría ser detectado o bloqueado.
Este repositorio contiene dos ramas con enfoques diferentes:
winapi y VirtualQuery para la validación de memorialib.rs) no tienen sentencias de impresión para una integración limpiamain.rs) incluye salida de depuración como prueba de conceptoVirtualQueryAmbas ramas son seguras de usar, pero la rama OPSEC proporciona beneficios adicionales de seguridad operativa para escenarios donde las llamadas a la API podrían ser monitoreadas o bloqueadas.
El programa utiliza un enfoque de recorrido de pila para localizar DLL mediante:
Acceso al Thread Environment Block (TEB):
Recorrido de pila:
VirtualQuery para validar las regiones de memoriaIdentificación de módulos:
Validación:
Los métodos tradicionales para encontrar DLL suelen implicar recorrer la lista de módulos del PEB. Si bien es efectivo, este enfoque puede ser:
Este método de recorrido de pila ofrece una alternativa que:
winapiAñade a tu Cargo.toml:
Rama principal:
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git" }
Rama OPSEC:
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git", branch = "opsec" }
Ejemplo de uso en tu código:
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);
}
}
Compilar:
cargo build --release
Ejecutar:
# 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
Ya no se incluyen sentencias de impresión. Esta imagen se incluye con fines educativos.

VirtualQuery para una validación segura del acceso a memoria