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
Herramientas/GitHubGitHub/johnswiftc/rustdllproxy
Payload GenerationPersistence MechanismsPost-ExploitationPenetration TestingRed TeamingPayload Development
GitHubjohnswiftc/rustdllproxy

rustdllproxy

Generate Proxy DLLs in Rust

Ver Repositorio
564hace 2 mesesRevisado 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

rustdllproxy


Una utilidad crate de Rust para generar y desarrollar fácilmente DLL proxy para aplicaciones Windows.

Instalación

root@kitploit:~
cargo install rustdllproxy

Compatibilidad

Este crate actualmente solo es compatible con el formato PE estándar de DLL.

Limitaciones actuales

  • Al enganchar funciones con código personalizado, se debe conocer la firma de la función
    • Esto se puede averiguar con desensambladores y herramientas de ingeniería inversa como Ghidra

Comandos

Rustdllproxy incluye dos subcomandos:

ComandoPropósito
rustdllproxy newGenera un nuevo crate proxy cdylib a partir de una o más DLL existentes.
rustdllproxy buildSincroniza el archivo .def con src/lib.rs y compila el crate.
root@kitploit:~
rustdllproxy --help        # ayuda de nivel superior
rustdllproxy new --help    # opciones de generación
rustdllproxy build --help  # opciones de compilación

Crear un nuevo crate

Una nota rápida sobre la estrategia

Antes de generar su crate, decida cómo quiere que funcione su proxy. Un patrón típico es el secuestro por orden de búsqueda, donde primero renombraría su DLL objetivo a algo como target_.dll, y luego usaría el proxy compilado como target.dll. Esto crea un flujo similar a binary -> target.dll -> target_.dll

Hay múltiples caminos a seguir dependiendo de su caso de uso. Sin embargo, si necesita renombrar la DLL subyacente que se está utilizando como proxy, actualice el archivo .def generado en consecuencia.


root@kitploit:~
rustdllproxy new -p path/to/target_.dll -n my_proxy

Consejo: rustdllproxy está construido como una CLI con clap. Ejecute rustdllproxy --help para ver todas las opciones y banderas.

Escribir hooks

La librería de macros admite 3 tipos principales de hooks: prehook, posthook y fullhook.

Pasos para implementar hooks

  1. Reemplace la directiva #[no_mangle] con la macro de hook (deje el comentario final //<dllname>.dll en su lugar)

    root@kitploit:~
    #[prehook("dllbeingproxied.dll", "function_name")] //dllbeingproxied.dll
    
  2. Complete la firma de la función (declare las entradas como mut para modificarlas)

  3. Compile con rustdllproxy build.

Tipos de hooks

prehook

Ejecuta código antes de la función original. Le permite añadir funcionalidad o modificar variables de entrada.

root@kitploit:~
#[prehook("target.dll", "my_function")] //target.dll
fn my_function(mut param1: i32, mut param2: &str) {
    // Su código aquí - se ejecuta antes de la función original
    param1 *= 2;  // Modifique los parámetros si es necesario
}

posthook

Ejecuta código después de la función original. Vea y edite el valor de retorno usando la variable mágica ret.

root@kitploit:~
#[posthook("target.dll", "calculate")] //target.dll
fn calculate(input: i32) -> i32 {
    // La función original se ejecuta primero
    // Luego su código se ejecuta con acceso a 'ret'
    ret = ret * 2;  // Modificar el valor de retorno
}

Nota: La variable ret se define automáticamente como mutable. No necesita referenciarla si no es necesario.

fullhook

Proporciona control total sobre la ejecución de la función. Gestione manualmente el valor de retorno y la llamada a la función.

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

    // Llame a la función original con la función mágica func()
    let mut return_value: i32 = func(a, b, c);

    // Post-procesamiento
    return_value *= 2;

    // Debe devolver el valor explícitamente
    return_value
}

Compilar el crate

Ejecútelo desde el directorio del crate proxy (o pase la ruta como primer argumento):

root@kitploit:~
rustdllproxy build [PATH] [--profile <name>] [--no-build] [-- <extra cargo args>]
BandejaPredeterminadoEfecto
PATH.Ruta a la raíz del crate proxy.
--profile <name>releasePerfil de compilación de Cargo (release, dev, personalizado).
--no-buildoffRegenera el archivo .def pero omite cargo build.
-- <args>—Se reenvía tal cual a cargo build.

Advertencias

  • El archivo .def se regenera por completo en cada compilación; los cambios manuales se sobrescribirán. Si necesita hacer cambios manuales en la forma en que rustdllproxy compila, puede usar cargo para lograrlo.
  • El sistema de compilación depende de los comentarios generados, las exportaciones .def y los nombres de los hooks para obtener el nombre de la DLL subyacente antes de compilar. Si no hay suficiente información, se lanzará un error que explicará cómo recuperarla.

Flujo de trabajo de ejemplo

Digamos que quiere modificar office.dll usada en software de oficina mediante el secuestro por orden de búsqueda de DLL:

Paso 1: Preparar la DLL original

root@kitploit:~
# Renombrar la DLL original
mv office.dll office_.dll

Paso 2: Generar el crate proxy

root@kitploit:~
rustdllproxy new -p office_.dll -n office_proxy

Paso 3: Implementar hooks

root@kitploit:~
#[prehook("office_.dll", "open_window")] //office_.dll
fn open_window() {
    // Su código personalizado aquí...
    println!("La ventana está a punto de abrirse!");
}

Paso 4: Compilar y desplegar

root@kitploit:~
cd office_proxy
rustdllproxy build

Los archivos de compilación se encuentran en /target

Consideraciones sobre el empaquetado de DLL

Es posible usar como proxy varias DLL objetivo con un solo crate. Esta característica rara vez se usa y conlleva algunas advertencias importantes.

Al empaquetar múltiples DLL:

  • Los ordinales de las funciones pueden cambiar debido al orden de exportación
  • Esto rara vez es problemático, ya que el software moderno usa nombres de exportación para la compatibilidad
  • Es útil principalmente para análisis y desarrollo de aplicaciones personalizadas

Historial de cambios

Las notas de la versión están en CHANGELOG.md.

Contribuciones

¡Las contribuciones son bienvenidas! No dude en enviar issues y pull requests.

Descargar herramienta