Skip to content
KitploitKITPLOIT
ИнструментыБлог
Log in
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
pe-signgen — Универсальная генерация сигнатур для любых системных функций из всех сборок Windows с использованием Winbindex | Kitploit
Инструменты/GitHubGitHub/forentfraps/pe-signgen
Статический анализАнализ уязвимостейОбратная инженерияФорензикаАнализ вредоносных программАнализ Бинарных Файлов
GitHubforentfraps/pe-signgen

pe-signgen

Универсальная генерация сигнатур для любых системных функций из всех сборок Windows с использованием Winbindex

Репозиторий
20489 месяцев назадЕщё не проверено
Сайт

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

pe-signgen

Кросс-версионные бинарные сигнатуры и RVA-смещения для функций Windows PE


Обзор

pe-signgen — это инструмент для специалистов по реверс-инжинирингу и исследователей безопасности, который автоматически генерирует:

  • Бинарные сигнатуры (байтовые шаблоны с подстановочными знаками) для неэкспортируемых и экспортируемых функций
  • RVA и файловые смещения для прямого поиска функций в бинарных файлах
  • Кросс-сборочные сигнатуры, работающие во многих версиях Windows
  • Несколько форматов вывода, оптимизированных под разные сценарии использования
  • Поддержка архитектур x64, ARM64 и WoW64

Основная идея — предоставить систематический и надёжный способ доступа к неэкспортируемым функциям в сборках Windows 10/11. Инструмент использует:

  • Winbindex для метаданных сборок Windows
  • Публичные символьные серверы Microsoft для PDB
  • Локальное кэширование для воспроизводимых сценариев работы без подключения к сети

⚠️ Поддержка версий Windows pe-signgen поддерживает только Windows 10 и Windows 11. Это осознанное проектное решение: Winbindex не предоставляет полных данных для более старых версий.


Варианты использования

  • Неэкспортируемые внутренности Windows Генерация сигнатур для таких функций, как LdrpInitializeTls, RtlpInsertInvertedFunctionTableEntry и т. д.

  • Исследование игрового хакинга / анти-чита Генерация стабильных сигнатур, переживающих обновления игр

  • Исследования в области безопасности Поиск критически важных для безопасности процедур во всех сборках Windows

  • Автоматизация Скриптуемая генерация сигнатур и смещений для целых наборов внутренних API


Форматы вывода

pe-signgen предоставляет три различных формата вывода для разных сценариев использования:

1. Формат JSON

Структурированные данные для автоматизации, написания скриптов и интеграции с другими инструментами.```bash pe-signgen --signature ntdll!NtCreateFile -o ntcreatefile.json --output-format json

**Структура вывода:**```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" }
      ]
    }
  ]
}

Notes:

  • major и minor выводятся из строки сборки разделением по первой точке .. Пример: "10240.16384" → major = 10240, minor = 16384.
  • build — это исходная строка ключа сборки, используемая внутри.

2. Двоичный формат (WSIG/WOFF)

Компактные, готовые к исполнению двоичные форматы, оптимизированные для встраиваемых систем и сканирования с низкими накладными расходами.

Они соответствуют раскладке на диске, реализованной в write_wsig() и write_woff().


Формат WSIG (подпись Windows)

Магическое число: WSO\0 (0x57 0x53 0x4F 0x00) Текущая версия: 1 Назначение: Хранение двоичных сигнатур с масками подстановки и связанными версиями сборок Windows

Структура файла (концептуально)```

┌─────────────────────────────────────┐ │ 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) │ └─────────────────────────────────────┘

**Важные замечания по компоновке (соответствует `write_wsig`)**

* После заголовка имена DLL и функций записываются как байты UTF‑8.
* Для каждой группы сигнатур записываются байты паттерна и байты маски, после чего следует массив сборки для этой группы.
* Эти области для каждой группы **не** сгруппированы глобально по типу: паттерны, маски и массивы сборки могут чередоваться.
* Построитель выравнивается по **4 байтам** перед каждым массивом сборки и перед таблицей групп. Это может приводить к появлению отступов (padding).
* Потребители должны **всегда** следовать смещениям в заголовке и записях групп; **не** полагайтесь на концептуальную диаграмму для физической непрерывности.

##### Компоновка заголовка (36 байт)```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
Запись группы (24 байта)

Каждая группа сигнатур представляет собой уникальный шаблон, который применяется к одной или нескольким сборкам 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

##### Запись версии сборки (8 байт)

Каждая запись сборки идентифицирует конкретную версию Windows, которая использует эту подпись.```c
typedef struct {
    uint32_t major; // e.g. 19041
    uint32_t minor; // e.g. 1234
} wsig_build_t; // 8 bytes

major и minor получаются при разбиении строки сборки ("A.B" → A, B). Исходная строка сборки не хранится в бинарном формате; если она нужна, храните её отдельно (она присутствует в JSON-выводе).

Формат маски-шаблона

Маска — это битовая маска, где каждый бит соответствует одному байту в сигнатурном шаблоне:

  • Бит = 1: байт должен точно совпадать (фиксированный байт)
  • Бит = 0: байт является подстановочным (игнорируется при сопоставлении)

Пример:``` 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)

Маскирующие байты хранятся и интерпретируются в **порядке бит от младшего к старшему (little-endian)** внутри каждого байта (точно так же, как в C-хелперах и `parse_signature`):```c
uint8_t bit = (mask_bytes[byte_index >> 3] >> (byte_index & 7)) & 1u;
Хранение строк
  • Имена DLL и функций хранятся в UTF‑8, без нулевых терминаторов.
  • Используйте *_len для определения длины; не читайте дальше этого.
  • Для самих строк не требуется выравнивания.
  • Дополнительные области данных (массивы сборок и таблица групп) выровнены по границам 4 байт; считайте любое дополнение непрозрачным.

Формат WOFF (Windows Offset)

Магическое число: WOF\0 (0x57 0x4F 0x46 0x00) Текущая версия: 1 Назначение: хранение прямых RVA и файловых смещений для функций в сборках Windows

Скачать инструмент