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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
rustdllproxy — Genera DLL proxy in Rust | Kitploit
Strumenti/GitHubGitHub/johnswiftc/rustdllproxy
Generazione di PayloadMeccanismi di PersistenzaPost-ExploitPenetration TestingRed TeamingSviluppo Payload
GitHubjohnswiftc/rustdllproxy

rustdllproxy

Genera DLL proxy in Rust

Vedi Repository
564254 mesi 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

rustdllproxy


Una crate utility in Rust per generare e sviluppare facilmente proxy DLL per applicazioni Windows.

Installazione

cargo install rustdllproxy

Compatibilità

Questa crate attualmente supporta solo il formato standard PE delle DLL.

Limitazioni attuali

  • Quando si effettuano hook su funzioni con codice personalizzato, la firma della funzione deve essere nota
    • Questo può essere trovato usando disassemblatori e strumenti di reverse engineering come Ghidra

Comandi

Rustdllproxy include due sottocomandi:

ComandoScopo
rustdllproxy newGenera una nuova proxy crate cdylib da una o più DLL esistenti.
rustdllproxy buildSincronizza il file .def con src/lib.rs e compila la crate.
rustdllproxy --help        # top-level help
rustdllproxy new --help    # generation flags
rustdllproxy build --help  # build flags

Creare una Nuova Crate

Una nota rapida sulla strategia

Prima di generare la tua crate, decidi come vuoi che funzioni il tuo proxy. Un pattern tipico è l'hijacking dell'ordine di ricerca (search order hijacking), in cui si rinomina prima la DLL target in qualcosa come target_.dll, e poi si usa il proxy compilato come target.dll. Questo crea un flusso del tipo binary -> target.dll -> target_.dll.

Ci sono più strade possibili a seconda del tuo caso d'uso. Se però devi rinominare la DLL sottostante di cui stai facendo da proxy, aggiorna di conseguenza il file .def generato.


rustdllproxy new -p path/to/target_.dll -n my_proxy

Suggerimento: rustdllproxy è costruito come CLI con clap. Esegui rustdllproxy --help per vedere tutte le opzioni e le flag.

Scrittura degli Hook

La libreria di macro supporta 3 tipi principali di hook: prehook, posthook e fullhook.

Passaggi per l'implementazione degli hook

  1. Sostituisci la direttiva #[no_mangle] con la macro dell'hook (lascia al suo posto il commento finale //<dllname>.dll)

    #[prehook("dllbeingproxied.dll", "function_name")] //dllbeingproxied.dll
    
  2. Compila la firma della funzione (dichiara gli input come mut per modificarli)

  3. Compila con rustdllproxy build.

Tipi di Hook

prehook

Esegue codice prima della funzione originale. Permette di aggiungere funzionalità o modificare le variabili di input.

#[prehook("target.dll", "my_function")] //target.dll
fn my_function(mut param1: i32, mut param2: &str) {
    // Your code here - executes before original function
    param1 *= 2;  // Modify parameters if needed
}

posthook

Esegue codice dopo la funzione originale. Visualizza e modifica il valore di ritorno usando la variabile magica ret.

#[posthook("target.dll", "calculate")] //target.dll
fn calculate(input: i32) -> i32 {
    // Original function executes first
    // Then your code runs with access to 'ret'
    ret = ret * 2;  // Modify return value
}

Nota: La variabile ret è definita automaticamente come mutabile. Non è necessario referenziarla se non serve.

fullhook

Fornisce controllo completo sull'esecuzione della funzione. Gestisci manualmente il valore di ritorno e la chiamata della funzione.

#[fullhook("target.dll", "do_multi_add")] //target.dll
fn do_multi_add(mut a: i32, mut b: i32, mut c: i32) -> i32 {
    // Pre-processing
    a += 10;
    b += 20;

    // Call original function with magic func()
    let mut return_value: i32 = func(a, b, c);

    // Post-processing
    return_value *= 2;

    // Must explicitly return the value
    return_value
}

Compilare la Crate

Esegui dalla directory della proxy crate (o passala come primo argomento):

rustdllproxy build [PATH] [--profile <name>] [--no-build] [-- <extra cargo args>]
FlagDefaultEffetto
PATH.Percorso della directory radice della proxy crate.
--profile <name>releaseProfilo di build di Cargo (release, dev, custom).
--no-buildoffRigenera il file .def ma salta cargo build.
-- <args>—Inoltrato così com'è a cargo build.

Avvertenze

  • Il file .def viene rigenerato completamente a ogni build; le modifiche manuali verranno sovrascritte. Se hai bisogno di apportare modifiche manuali al modo in cui rustdllproxy compila, puoi usare cargo per farlo.
  • Il sistema di build si basa su commenti generati, export del file .def e nomi degli hook per recuperare il nome della DLL sottostante prima della compilazione. Se le informazioni non sono sufficienti, verrà generato un errore che spiega come recuperarle.

Esempio di Flusso di Lavoro

Supponiamo che tu voglia modificare office.dll usata in un software office tramite dirottamento dell'ordine di ricerca delle DLL:

Passo 1: Prepara la DLL Originale

# Rename the original DLL
mv office.dll office_.dll

Passo 2: Genera la Proxy Crate

rustdllproxy new -p office_.dll -n office_proxy

Passo 3: Implementa gli Hook

#[prehook("office_.dll", "open_window")] //office_.dll
fn open_window() {
    // Your custom code here...
    println!("Window is about to open!");
}

Passo 4: Compila e Distribuisci

cd office_proxy
rustdllproxy build

I file di build si trovano sotto /target

Considerazioni sul Bundling delle DLL

È possibile fare da proxy a più DLL target con una singola crate. Questa funzionalità è usata raramente e comporta alcune importanti avvertenze.

Quando si includono più DLL:

  • Gli ordinali delle funzioni possono cambiare a causa dell'ordinamento degli export
  • Questo raramente è un problema poiché il software moderno usa i nomi degli export per la compatibilità
  • Utile principalmente per analisi e sviluppo di applicazioni personalizzate

Changelog

Le note di rilascio sono in CHANGELOG.md.

Contribuire

I contributi sono benvenuti! Non esitare a inviare issue e pull request.

Scarica lo strumento