Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
moonwalk — Trova gli indirizzi di base delle DLL senza PEB WALK | Kitploit
Strumenti/GitHubGitHub/teach2breach/moonwalk
Post-ExploitAnalisi di BinariApprendimento e FormazioneRed TeamingSviluppo Payload
GitHubteach2breach/moonwalk

moonwalk

Trova gli indirizzi di base delle DLL senza PEB WALK

Vedi Repository
17021121 anno faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

moonwalk: ricerca dell'indirizzo base delle DLL

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.

Differenze tra i branch

Questo repository contiene due branch con approcci diversi:

Branch principale

  • Usa la crate winapi e VirtualQuery per la validazione della memoria
  • Le funzioni della libreria (lib.rs) non contengono istruzioni di stampa per un'integrazione pulita
  • Lo strumento CLI (main.rs) include output di debug per la proof of concept
  • Adatto per imparare e comprendere la tecnica

Branch OPSEC

  • Nessuna dipendenza esterna - completamente autonomo
  • Nessuna chiamata alle API di Windows - usa accesso diretto alla memoria con gestione delle eccezioni invece di VirtualQuery
  • Nessuna istruzione di stampa nelle funzioni della libreria
  • Stealth avanzato - non effettua chiamate API
  • Migliore per implant/strumenti - lascia meno tracce ed è più difficile da rilevare

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

Come funziona

Il programma utilizza un approccio di attraversamento dello stack per individuare le DLL:

  1. Accesso al Thread Environment Block (TEB):

    • Usa assembly inline per leggere il puntatore al TEB dal registro di segmento GS (GS:[0x30])
    • Recupera la base dello stack (GS:[0x08]) e il limite dello stack (GS:[0x10]) dal TEB
  2. Attraversamento dello stack:

    • Parte dal puntatore di stack corrente (RSP)
    • Risale lo stack cercando indirizzi di ritorno
    • Verifica per ogni indirizzo se la memoria è eseguibile
    • Branch principale: usa VirtualQuery per validare le regioni di memoria
    • Branch OPSEC: usa accesso diretto alla memoria con gestione delle eccezioni
  3. Identificazione del modulo:

    • Per ogni potenziale indirizzo di ritorno, verifica se punta a memoria eseguibile
    • Quando viene trovata memoria eseguibile, procede all'indietro per trovare il header PE
    • Valida il modulo verificando:
      • Firma MZ (header DOS)
      • Firma PE
      • Caratteristiche DLL
      • Architettura a 64 bit
      • Nome del modulo dalla directory delle esportazioni
  4. Validazione:

    • Verifica che il modulo sia la DLL target controllando il suo nome nella directory delle esportazioni
    • Conferma che tutte le strutture del header PE siano valide

Perché questo approccio?

I metodi tradizionali per trovare le DLL spesso implicano l'attraversamento della lista dei moduli del PEB. Sebbene efficace, questo approccio può essere:

  • Rilevato dal software di sicurezza
  • Bloccato in determinati ambienti

Questo metodo di attraversamento dello stack offre un'alternativa che:

  • Non dipende dal PEB
  • Può funzionare in ambienti in cui l'attraversamento del PEB è bloccato
  • Branch OPSEC: non effettua chiamate API

Requisiti

  • Rust (toolchain nightly)
  • Windows x64
  • Branch principale: crate winapi
  • Branch OPSEC: nessuna dipendenza esterna

Utilizzo

Come libreria

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

Come strumento CLI

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

Esempio

Le istruzioni di stampa non sono più incluse. Questa immagine è inclusa a scopo didattico.

Demo di Moonwalk DLL Base Address Finder

Note

  • I nomi delle DLL non fanno distinzione tra maiuscole e minuscole e l'estensione .dll è opzionale
  • Funziona solo con DLL che si trovano nello stack di chiamata
  • Branch principale: usa VirtualQuery per una validazione sicura dell'accesso alla memoria
  • Branch OPSEC: usa accesso diretto alla memoria con gestione delle eccezioni per il massimo stealth
  • Entrambi i branch hanno interfacce di libreria pulite e senza output di debug
Scarica lo strumento