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
zig-pe — Cargador de PE reflexivo escrito en Zig. Carga y ejecuta archivos PE nativos y .NET directamente desde la memoria. | Kitploit
Herramientas/GitHubGitHub/thoxy67/zig-pe
ExplotaciónPost-ExplotaciónPruebas de PenetraciónRed TeamingDesarrollo de PayloadsExplotación de Binarios
GitHubthoxy67/zig-pe

zig-pe

Cargador de PE reflexivo escrito en Zig. Carga y ejecuta archivos PE nativos y .NET directamente desde la memoria.

Ver Repositorio
6775hace 6 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

zig-pe

Cargador de PE reflexivo escrito en Zig. Carga y ejecuta archivos PE nativos y .NET directamente desde la memoria.

Características

Pipeline de Carga de PE

  • Analizar cabeceras DOS y NT (PE32 y PE32+ en tiempo de ejecución)
  • Mapear secciones en memoria asignada
  • Resolver importaciones (por nombre y ordinal, thunks de 4 bytes para PE32 / 8 bytes para PE32+)
  • Aplicar reubicaciones base (HIGHLOW, DIR64, ARM_MOV32, THUMB_MOV32)
  • Resolver importaciones diferidas (DataDirectory[13], formato RVA moderno)
  • Registrar manejadores de excepciones (RtlAddFunctionTable, solo x64/ARM64)
  • Establecer protecciones de memoria por sección
  • Invocar callbacks TLS (DLL_PROCESS_ATTACH)
  • Ejecutar punto de entrada mediante CreateThread
  • Limpieza (desregistrar tablas de excepción, liberar memoria)
  • Funciones de Seguridad Avanzadas

    • Inicialización de Security Cookie (__security_cookie para seguridad de búfer /GS)
    • CFG (Control Flow Guard) - Registra destinos de llamada válidos via SetProcessValidCallTargets
    • SxS / Activation Context - Activa manifiestos incrustados para aplicaciones GUI
    • Invalidación del Directorio de Importaciones Enlazadas (Bound Import Directory)

    Resolución de Tabla de Exportaciones

    Funciones auxiliares para resolver exportaciones de una imagen PE cargada:

    • getExportByName(base, ntheaders, name) — resolver por nombre
    • getExportByOrdinal(base, ntheaders, ordinal) — resolver por ordinal

    Maneja exportaciones reenviadas automáticamente cargando el DLL destino (ej., "NTDLL.RtlAllocateHeap" se resuelve a la función real en ntdll.dll).

    Resolución de Conjuntos de API (API Set)

    Resuelve automáticamente los conjuntos de API de Windows (api-ms-win-*, ext-ms-win-*) a sus DLL anfitrionas reales usando el ApiSetMap del PEB. Esto permite cargar PE que importan de DLL de conjuntos de API virtuales.

    Funciones Auxiliares

    • utils.detect_platform(buffer) — Detecta si el PE es de 32 o 64 bits
    • utils.is_dotnet_assembly(ntheaders) — Verifica si el PE es un ensamblado .NET
    • utils.getDotNetVersion(buffer) — Extrae la cadena de versión del runtime .NET de los metadatos
    • utils.rvaToFileOffset(buffer, rva) — Convierte RVA a desplazamiento de archivo sin procesar

    Compatibilidad

    • Ejecución de binarios compilados nativos (x86, x86_64, ARM, ARM64)
    • Ejecución de binarios compilados .NET mediante alojamiento CLR
    • Paso de argumentos de línea de comandos a ejecutables nativos y .NET
    • Validación de arquitectura (la cantidad de bits del PE debe coincidir con la del proceso anfitrión)

    Tipos de Máquina Soportados

    ArquitecturaCódigo de máquinaBits
    i3860x014c32
    AMD640x866464
    IA640x020064
    ARM (ARMNT)0x01C432
    ARM640xAA6464

    Requisitos Previos

    • Compilador Zig (se recomienda la última versión)
    • Sistema operativo Windows (el proyecto utiliza API específicas de Windows)

    Compilación del Proyecto

    1. Clona el repositorio:

      root@kitploit:~
      git clone https://github.com/Thoxy67/zig-pe.git
      cd zig-pe
      
    2. Compila el proyecto:

      root@kitploit:~
      zig build
      

    Opciones de Compilación

    root@kitploit:~
    zig build -Ddotnet=false  # Deshabilitar soporte .NET (habilitado por defecto)
    

    Objetivos de Compilación

    root@kitploit:~
    zig build                 # Compilar todos los objetivos
    zig build run-putty64     # Ejecutar ejemplo de PE nativo de 64 bits
    zig build run-putty32     # Ejecutar ejemplo de PE nativo de 32 bits
    zig build run-dotnet      # Ejecutar ejemplo de ensamblado .NET
    zig build test            # Ejecutar pruebas unitarias
    

    Uso

    Uso Básico (PE Incrustado)

    root@kitploit:~
    const pe = @import("pe");
    
    pub fn main() !void {
        // Cargar y ejecutar un archivo PE incrustado
        try pe.RunPE.init(@embedFile("bin/app.exe")).run();
    }
    

    Con Argumentos de Línea de Comandos

    root@kitploit:~
    const pe = @import("pe");
    
    pub fn main() !void {
        var loader = pe.RunPE.init(@embedFile("bin/app.exe"));
        try loader.runWithArgs(&.{ "arg1", "arg2", "arg3" });
    }
    

    Carga desde Archivo

    root@kitploit:~
    const std = @import("std");
    const pe = @import("pe");
    
    pub fn main() !void {
        var gpa = std.heap.GeneralPurposeAllocator(.{}){};
        defer _ = gpa.deinit();
        const allocator = gpa.allocator();
    
        const file_content = try std.fs.cwd().readFileAlloc(
            allocator,
            "path/to/executable.exe",
            std.math.maxInt(usize),
        );
        defer allocator.free(file_content);
    
        try pe.RunPE.init(file_content).run();
    }
    

    Resolver Exportaciones de un PE Cargado

    root@kitploit:~
    const pe = @import("pe");
    
    // Después de cargar un DLL en memoria...
    const base: [*]const u8 = @ptrCast(loaded_base);
    const ntheaders = // ... obtener cabeceras NT
    
    // Resolver por nombre
    if (pe.getExportByName(base, ntheaders, "ExportedFunction")) |func_ptr| {
        const func: *const fn () void = @ptrCast(@alignCast(func_ptr));
        func();
    }
    
    // Resolver por ordinal
    if (pe.getExportByOrdinal(base, ntheaders, 42)) |func_ptr| {
        // Usar el puntero a función
    }
    

    Cómo Funciona el Paso de Argumentos

    • PE nativos: Los argumentos se pasan parcheando el PEB CommandLine, por lo que GetCommandLineW() devuelve los argumentos proporcionados
    • Ensamblados .NET: Los argumentos se pasan directamente a Main(string[] args) mediante invocación CLR

    Consideraciones de Seguridad

    Este proyecto implica cargar y ejecutar código arbitrario, lo que puede ser potencialmente peligroso. Use este cargador únicamente con archivos PE de confianza y en entornos controlados. Los autores no son responsables por cualquier uso indebido o daño causado por este software.

    Contribuciones

    ¡Las contribuciones a zig-pe son bienvenidas! No dude en enviar pull requests, crear issues o difundir el proyecto.

    1. Haga un Fork del Proyecto
    2. Cree su Rama de Funcionalidad (git checkout -b feature/CaracteristicaIncreible)
    3. Realice sus Cambios (git commit -m 'Añadir alguna CaracterísticaIncreible')
    4. Suba a la Rama (git push origin feature/CaracteristicaIncreible)
    5. Abra un Pull Request

    Licencia

    Este proyecto está bajo la Licencia MIT; consulte el archivo LICENSE para más detalles.

    Reconocimientos

    • La comunidad del lenguaje de programación Zig
    • Contribuyentes a la documentación del formato de archivo PE

    Aviso Legal

    Este proyecto es solo con fines educativos. Asegúrese de tener los derechos y permisos necesarios antes de cargar y ejecutar cualquier archivo PE.

    Descargar herramienta