Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
moonwalk — Encontrar direcciones base de DLL sin PEB WALK | Kitploit
Herramientas/GitHubGitHub/teach2breach/moonwalk
Post-ExplotaciónAnálisis de BinariosAprendizaje y EducaciónRed TeamingDesarrollo de Payloads
GitHubteach2breach/moonwalk

moonwalk

Encontrar direcciones base de DLL sin PEB WALK

Ver Repositorio
17021hace 1 añoRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

moonwalk: Buscador de direcciones base de DLL

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.

Diferencias entre ramas

Este repositorio contiene dos ramas con enfoques diferentes:

Rama principal

  • Usa la crate winapi y VirtualQuery para la validación de memoria
  • Las funciones de la biblioteca (lib.rs) no tienen sentencias de impresión para una integración limpia
  • La herramienta CLI (main.rs) incluye salida de depuración como prueba de concepto
  • Ideal para aprender y comprender la técnica

Rama OPSEC

  • Sin dependencias externas: completamente autocontenida
  • Sin llamadas a la API de Windows: usa acceso directo a memoria con manejo de excepciones en lugar de VirtualQuery
  • Sin sentencias de impresión en las funciones de la biblioteca
  • Sigilo mejorado: no realiza llamadas a la API
  • Mejor para implantes/herramientas: deja menos rastros y es más difícil de detectar

Ambas 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.

Cómo funciona

El programa utiliza un enfoque de recorrido de pila para localizar DLL mediante:

  1. Acceso al Thread Environment Block (TEB):

    • Usa ensamblador en línea para leer el puntero TEB desde el registro de segmento GS (GS:[0x30])
    • Recupera la base de la pila (GS:[0x08]) y el límite de la pila (GS:[0x10]) del TEB
  2. Recorrido de pila:

    • Comienza desde el puntero de pila actual (RSP)
    • Recorre la pila hacia arriba buscando direcciones de retorno
    • Comprueba cada dirección en busca de memoria ejecutable
    • Rama principal: usa VirtualQuery para validar las regiones de memoria
    • Rama OPSEC: usa acceso directo a memoria con manejo de excepciones
  3. Identificación de módulos:

    • Para cada posible dirección de retorno, comprueba si apunta a memoria ejecutable
    • Cuando se encuentra memoria ejecutable, retrocede para encontrar el encabezado PE
    • Valida el módulo comprobando:
      • Firma MZ (encabezado DOS)
      • Firma PE
      • Características de DLL
      • Arquitectura de 64 bits
      • Nombre del módulo desde el directorio de exportaciones
  4. Validación:

    • Verifica que el módulo sea la DLL objetivo comprobando su nombre en el directorio de exportaciones
    • Confirma que todas las estructuras del encabezado PE son válidas

¿Por qué este enfoque?

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:

  • Detectado por el software de seguridad
  • Bloqueado en ciertos entornos

Este método de recorrido de pila ofrece una alternativa que:

  • No depende del PEB
  • Puede funcionar en entornos donde el recorrido del PEB está bloqueado
  • Rama OPSEC: no realiza llamadas a la API

Requisitos

  • Rust (toolchain nightly)
  • Windows x64
  • Rama principal: crate winapi
  • Rama OPSEC: sin dependencias externas

Uso

Como biblioteca

Añade a tu Cargo.toml:

Rama principal:

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

Rama OPSEC:

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

Ejemplo de uso en tu código:

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);
    }
}

Como herramienta CLI

Compilar:

root@kitploit:~
cargo build --release

Ejecutar:

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

Ejemplo

Ya no se incluyen sentencias de impresión. Esta imagen se incluye con fines educativos.

Moonwalk DLL Base Address Finder Demo

Notas

  • Los nombres de DLL no distinguen entre mayúsculas y minúsculas y la extensión .dll es opcional
  • Solo funciona con DLL que están en la pila de llamadas
  • Rama principal: usa VirtualQuery para una validación segura del acceso a memoria
  • Rama OPSEC: usa acceso directo a memoria con manejo de excepciones para máximo sigilo
  • Ambas ramas tienen interfaces de biblioteca limpias sin salida de depuración
Descargar herramienta