Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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
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
1702121 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
Scarica lo strumento
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:

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

    Branch OPSEC:

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

    Esempio di utilizzo nel tuo codice:

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

    Come strumento CLI

    Compila:

    root@kitploit:~
    cargo build --release
    

    Esegui:

    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
    

    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