Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
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
pe-signgen — Generación universal de firmas para cualquier función del sistema de todas las compilaciones de Windows usando Winbindex | Kitploit
Herramientas/GitHubGitHub/forentfraps/pe-signgen
Análisis EstáticoAnálisis de VulnerabilidadesIngeniería InversaAnálisis ForenseAnálisis de MalwareAnálisis de Binarios
GitHubforentfraps/pe-signgen

pe-signgen

Generación universal de firmas para cualquier función del sistema de todas las compilaciones de Windows usando Winbindex

Ver Repositorio
2048hace 9 mesesAún no revisado

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 →
Sitio web
Compartir

pe-signgen

Firmas binarias entre versiones y desplazamientos RVA para funciones PE de Windows


Visión general

pe-signgen es una herramienta para ingenieros inversos e investigadores de seguridad que genera automáticamente:

  • Firmas binarias (patrones de bytes con comodines) para funciones no exportadas y exportadas
  • Desplazamientos RVA y de archivo para localizar funciones directamente en binarios
  • Firmas entre compilaciones que funcionan en muchas versiones de Windows
  • Múltiples formatos de salida optimizados para diferentes casos de uso
  • Soporte para arquitecturas x64, ARM64 y WoW64

La idea central es proporcionar una forma sistemática y robusta de acceder a funciones no exportadas en las compilaciones de Windows 10/11. Para ello aprovecha:

  • Winbindex para metadatos de compilaciones de Windows
  • Los servidores públicos de símbolos de Microsoft para PDBs
  • Caché local para flujos de trabajo reproducibles y compatibles con el modo sin conexión

⚠️ Compatibilidad con versiones de Windows pe-signgen es compatible únicamente con Windows 10 y Windows 11. Esta es una decisión de diseño deliberada: Winbindex no proporciona datos completos para versiones anteriores.


Casos de uso

  • Elementos internos no exportados de Windows Genera firmas para funciones como LdrpInitializeTls, RtlpInsertInvertedFunctionTableEntry, etc.

  • Investigación de hacking de juegos / anti-cheat Genera firmas estables que sobreviven a las actualizaciones de los juegos

  • Investigación de seguridad Localiza rutinas críticas de seguridad en distintas compilaciones de Windows

  • Automatización Generación de firmas y desplazamientos mediante scripts para conjuntos completos de API internas


Formatos de salida

pe-signgen ofrece tres formatos de salida distintos para diferentes casos de uso:

1. Formato JSON

Datos estructurados para automatización, scripting e integración con otras herramientas.```bash pe-signgen --signature ntdll!NtCreateFile -o ntcreatefile.json --output-format json

**Estructura de salida:**```json
{
  "dll_name": "ntdll",
  "function_name": "NtCreateFile",
  "architecture": "x64",
  "generated": "2024-12-11T15:30:00.123456",
  "total_builds": 1247,
  "unique_signatures": 3,
  "signature_groups": [
    {
      "matched_symbol": "NtCreateFile",
      "signature": "4C 8B DC 49 89 5B 08 49 89 6B 10 49 89 73 18 ...",
      "length": 48,
      "build_count": 845,
      "versions": [
        { "major": 10240, "minor": 16384, "build": "10240.16384" },
        { "major": 10586, "minor": 0, "build": "10586.0" }
      ]
    }
  ]
}

Notas:

  • major y minor se derivan de la cadena de compilación dividiendo en el primer .. Ejemplo: "10240.16384" → major = 10240, minor = 16384.
  • build es la cadena de compilación original utilizada internamente como clave.

2. Formato binario (WSIG/WOFF)

Formatos binarios compactos, listos para ejecución, optimizados para sistemas embebidos y escaneo de baja sobrecarga.

Estos coinciden con la distribución en disco implementada en write_wsig() y write_woff().


Formato WSIG (Firma de Windows)

Magic: WSO\0 (0x57 0x53 0x4F 0x00) Versión actual: 1 Propósito: Almacenar firmas binarias con máscaras de comodín y versiones de compilación de Windows asociadas

Estructura del archivo (conceptual)```

┌─────────────────────────────────────┐ │ Header (36 bytes) │ ├─────────────────────────────────────┤ │ DLL Name (variable) │ ├─────────────────────────────────────┤ │ Function Name (variable) │ ├─────────────────────────────────────┤ │ Signature / Mask / Build blobs │ ← Arbitrary order, see notes ├─────────────────────────────────────┤ ← Aligned to 4 bytes │ Groups Table (24 × N bytes) │ └─────────────────────────────────────┘

**Notas importantes sobre el diseño (coincide con `write_wsig`)**

* Después del encabezado, los nombres de DLL y función se escriben como bytes UTF‑8.
* Para cada grupo de firmas, los bytes de patrón y los bytes de máscara se escriben, seguidos por la matriz de compilación para ese grupo.
* Estas regiones por grupo **no** están agrupadas globalmente por tipo: los patrones, las máscaras y las matrices de compilación pueden estar intercalados.
* El constructor alinea a **4 bytes** antes de cada matriz de compilación y antes de la tabla de grupos. Esto puede introducir relleno.
* Los consumidores deben **siempre** seguir los desplazamientos en el encabezado y las entradas de grupo; **no** confíen en el diagrama conceptual para la contigüidad física.

##### Diseño del encabezado (36 bytes)```c
// Packed as: "<4sIIIIIIII" (little-endian)

typedef struct {
    char     magic[4];   // "WSO\0" (WSIG_MAGIC)
    uint32_t version;    // FORMAT_VERSION (currently 1)
    uint32_t arch;       // Architecture code (1=x64, 2=ARM64, 3=WoW64)
    uint32_t dll_off;    // Offset to DLL name string
    uint32_t dll_len;    // Length of DLL name in bytes
    uint32_t func_off;   // Offset to function name string
    uint32_t func_len;   // Length of function name in bytes
    uint32_t group_count;// Number of signature groups
    uint32_t groups_off; // Offset to groups table
} wsig_header_t; // 36 bytes
Entrada de grupo (24 bytes)

Cada grupo de firma representa un patrón único que se aplica a una o más compilaciones de Windows.```c // Packed as: "<IIIIII" (little-endian)

typedef struct { uint32_t sig_off; // Offset to signature pattern bytes uint32_t sig_len; // Length of signature pattern (in bytes) uint32_t mask_off; // Offset to wildcard mask bytes uint32_t mask_len; // Length of wildcard mask (≈ ceil(sig_len/8)) uint32_t builds_off; // Offset to build version array uint32_t build_cnt; // Number of builds using this signature } wsig_group_t; // 24 bytes

##### Entrada de versión de compilación (8 bytes)

Cada entrada de compilación identifica una versión específica de Windows que utiliza esta firma.```c
typedef struct {
    uint32_t major; // e.g. 19041
    uint32_t minor; // e.g. 1234
} wsig_build_t; // 8 bytes

major y minor provienen de dividir la cadena de compilación ("A.B" → A, B). La cadena de compilación original no se almacena en el formato binario; si la necesitas, consérvala externamente (está presente en la salida JSON).

Formato de máscara comodín

La máscara es una máscara de bits donde cada bit corresponde a un byte en el patrón de firma:

  • Bit = 1: El byte debe coincidir exactamente (byte fijo)
  • Bit = 0: El byte es comodín (ignora este byte durante la coincidencia)

Ejemplo:``` Signature: 4C 8B DC 49 89 ?? 08 49 Mask bits: 1 1 1 1 1 0 1 1 (MSB first within each byte) Mask byte: 0xBF (binary: 10111111)

Los bytes de máscara se almacenan e interpretan en **orden de bits little-endian** dentro de cada byte (exactamente como se usa en los helpers de C y `parse_signature`):```c
uint8_t bit = (mask_bytes[byte_index >> 3] >> (byte_index & 7)) & 1u;
Almacenamiento de cadenas
  • Los nombres de DLL y funciones se almacenan como UTF‑8, sin terminadores nulos.
  • Usa *_len para determinar la longitud; no leas más allá de eso.
  • No hay requisitos de alineación para las propias cadenas.
  • Las regiones de datos adicionales (matrices de compilación y la tabla de grupos) están alineadas a límites de 4 bytes; trata cualquier relleno como opaco.

Formato WOFF (Desplazamiento de Windows)

Magia: WOF\0 (0x57 0x4F 0x46 0x00) Versión actual: 1 Propósito: Almacenar RVA directos y desplazamientos de archivo para funciones en compilaciones de Windows

Descargar herramienta