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

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

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

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

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

Категории

Все категории
Loading categories
zig-pe — Рефлективный загрузчик PE, написанный на Zig. Загружает и выполняет нативные и .NET PE-файлы напрямую из памяти. | Kitploit
Инструменты/GitHubGitHub/thoxy67/zig-pe
ЭксплуатацияПост-эксплуатацияТестирование на ПроникновениеRed TeamingРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubthoxy67/zig-pe

zig-pe

Рефлективный загрузчик PE, написанный на Zig. Загружает и выполняет нативные и .NET PE-файлы напрямую из памяти.

Репозиторий
6775 месяцев назадПроверено Kitploit

Популярное

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

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

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

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

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

zig-pe

Загрузчик PE рефлексивного типа, написанный на Zig. Загружает и выполняет нативные и .NET PE-файлы непосредственно из памяти.

Возможности

Конвейер загрузки PE

  • Разбор DOS и NT заголовков (PE32 и PE32+ во время выполнения)
  • Отображение секций в выделенную память
  • Разрешение импортов (по имени и порядковому номеру, thunks 4-байт для PE32 / 8-байт для PE32+)
  • Применение базовых перемещений (HIGHLOW, DIR64, ARM_MOV32, THUMB_MOV32)
  • Разрешение отложенных импортов (DataDirectory[13], современный формат RVA)
  • Регистрация обработчиков исключений (RtlAddFunctionTable, только x64/ARM64)
  • Установка защиты памяти для каждой секции
  • Вызов TLS-колбэков (DLL_PROCESS_ATTACH)
  • Выполнение точки входа через CreateThread
  • Очистка (отмена регистрации таблиц исключений, освобождение памяти)

Расширенные функции безопасности

  • Инициализация защитного куки (__security_cookie для защиты буфера /GS)
  • CFG (Control Flow Guard) - Регистрирует допустимые цели вызовов через SetProcessValidCallTargets
  • SxS / Контекст активации - Активирует встроенные манифесты для GUI-приложений
  • Инвалидация каталога связанных импортов

Разрешение таблицы экспорта

Вспомогательные функции для разрешения экспорта из загруженного PE-образа:

  • getExportByName(base, ntheaders, name) — разрешение по имени
  • getExportByOrdinal(base, ntheaders, ordinal) — разрешение по порядковому номеру

Автоматически обрабатывает перенаправленные экспорты, загружая целевую DLL (например, "NTDLL.RtlAllocateHeap" разрешается в фактическую функцию в ntdll.dll).

Разрешение API Set

Автоматически разрешает наборы API Windows (api-ms-win-*, ext-ms-win-*) в их фактические DLL-хостфайлы с помощью PEB ApiSetMap. Это позволяет загружать PE-файлы, которые импортируют из виртуальных DLL наборов API.

Вспомогательные функции

  • utils.detect_platform(buffer) — Определение, является ли PE 32- или 64-битным
  • utils.is_dotnet_assembly(ntheaders) — Проверка, является ли PE .NET-сборкой
  • utils.getDotNetVersion(buffer) — Извлечение строки версии среды выполнения .NET из метаданных
  • utils.rvaToFileOffset(buffer, rva) — Преобразование RVA в смещение в файле

Совместимость

  • Выполнение нативных скомпилированных бинарных файлов (x86, x86_64, ARM, ARM64)
  • Выполнение .NET-скомпилированных бинарных файлов через хостинг CLR
  • Передача аргументов командной строки как нативным, так и .NET-исполняемым файлам
  • Проверка архитектуры (разрядность PE должна соответствовать хост-процессу)

Поддерживаемые типы машин

Предварительные требования

  • Компилятор Zig (рекомендуется последняя версия)
  • ОС Windows (проект использует Windows-специфичные API)

Сборка проекта

  1. Клонируйте репозиторий:

    root@kitploit:~
    git clone https://github.com/Thoxy67/zig-pe.git
    cd zig-pe
    
  2. Соберите проект:

    root@kitploit:~
    zig build
    

Параметры сборки

root@kitploit:~
zig build -Ddotnet=false  # Disable .NET support (enabled by default)

Цели сборки

root@kitploit:~
zig build                 # Build all targets
zig build run-putty64     # Run 64-bit native PE example
zig build run-putty32     # Run 32-bit native PE example
zig build run-dotnet      # Run .NET assembly example
zig build test            # Run unit tests

Использование

Базовое использование (встроенный PE)

root@kitploit:~
const pe = @import("pe");

pub fn main() !void {
    // Load and execute an embedded PE file
    try pe.RunPE.init(@embedFile("bin/app.exe")).run();
}

С аргументами командной строки

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" });
}

Загрузка из файла

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();
}

Разрешение экспортов из загруженного PE

root@kitploit:~
const pe = @import("pe");

// After loading a DLL into memory...
const base: [*]const u8 = @ptrCast(loaded_base);
const ntheaders = // ... get NT headers

// Resolve by name
if (pe.getExportByName(base, ntheaders, "ExportedFunction")) |func_ptr| {
    const func: *const fn () void = @ptrCast(@alignCast(func_ptr));
    func();
}

// Resolve by ordinal
if (pe.getExportByOrdinal(base, ntheaders, 42)) |func_ptr| {
    // Use the function pointer
}

Как работает передача аргументов

  • Нативные PE: Аргументы передаются путем патча PEB CommandLine, так что GetCommandLineW() возвращает предоставленные аргументы
  • .NET-сборки: Аргументы передаются напрямую в Main(string[] args) через вызов CLR

Соображения безопасности

Этот проект включает загрузку и выполнение произвольного кода, что может быть потенциально опасно. Используйте этот загрузчик только с доверенными PE-файлами и в контролируемых средах. Авторы не несут ответственности за любое неправомерное использование или ущерб, причиненный этим программным обеспечением.

Вклад

Вклад в zig-pe приветствуется! Пожалуйста, не стесняйтесь отправлять pull request'ы, создавать issue или распространять информацию.

  1. Форкните проект
  2. Создайте свою ветку функции (git checkout -b feature/AmazingFeature)
  3. Зафиксируйте изменения (git commit -m 'Add some AmazingFeature')
  4. Отправьте изменения в ветку (git push origin feature/AmazingFeature)
  5. Откройте Pull Request

Лицензия

Этот проект распространяется под лицензией MIT — подробнее см. в файле LICENSE.

Благодарности

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

Отказ от ответственности

Этот проект предназначен только для образовательных целей. Убедитесь, что у вас есть необходимые права и разрешения перед загрузкой и выполнением любого PE-файла.

Скачать инструмент
АрхитектураКод машиныРазрядность
i3860x014c32-бит
AMD640x866464-бит
IA640x020064-бит
ARM (ARMNT)0x01C432-бит
ARM640xAA6464-бит