Skip to content
RawrXDA exploit

RawrXDA exploit

Sploitus • September 27, 2026

Это полный PE32+ писатель и эмиттер машинного кода, реализованный на чистом ассемблере x64 MASM без зависимостей и без использования CRT. Он генерирует исполняемые Windows-файлы с нуля.

PE-писатель следует подходу бэкенд-дизайна, предоставляя чистый API для:

* Создания контекстов PE-исполняемых файлов

* Добавления импортов с правильными структурами IAT/INT

* Эмиссии машинного кода с управлением секциями

* Записи полных PE-файлов со всеми необходимыми заголовками

* **IMAGE_DOS_HEADER** : Стандартный DOS-заголовок с указателем e_lfanew

* **IMAGE_NT_HEADERS64** : NT-заголовки с файловым заголовком и дополнительным заголовком

* **IMAGE_SECTION_HEADER** : Заголовки секций для .text, .rdata, .idata

* **IMAGE_IMPORT_DESCRIPTOR** : Дескрипторы таблицы импорта

* **PE_CONTEXT** : Внутренняя структура контекста для создания PE-файлов

* **Вход** : RCX = базовый адрес образа (0 = по умолчанию), RDX = RVA точки входа

* **Выход** : RAX = дескриптор контекста PE (0 = ошибка)

* **Назначение** : Выделяет и инициализирует полную структуру контекста PE

* Выделяет память для DOS-заголовка, NT-заголовков, заголовков секций

* Инициализирует DOS-заголовок с правильной сигнатурой и e_lfanew

* Настраивает NT-заголовки с типом машины AMD64 и магией PE32+

* Настраивает дополнительный заголовок с базовым адресом образа, выравниванием секций/файлов

* Устанавливает виртуальные адреса и смещения файлов по умолчанию

* **Вход** : RCX = контекст PE, RDX = имя DLL, R8 = имя функции

* **Назначение** : Создает таблицу импорта с правильными структурами IAT/INT

* Управляет дескрипторами импорта для нескольких DLL

* Создает записи таблицы поиска импорта (INT)

* Настраивает записи таблицы адресов импорта (IAT)

* Обрабатывает структуры импорта по имени

* Отслеживает количество импортов и проверяет ограничения

* **Вход** : RCX = контекст PE, RDX = буфер кода, R8 = размер кода

* **Выход** : RAX = RVA кода (0 = ошибка)

* **Назначение** : Обрабатывает эмиссию машинного кода с правильным управлением секциями

* Копирует машинный код во внутренний буфер

* Проверяет размер кода на соответствие максимальным ограничениям

* **Вход** : RCX = контекст PE, RDX = имя файла

* **Назначение** : Полная запись файла со всеми заголовками, секциями и таблицей импорта

* Создает выходной файл с помощью соответствующих вызовов Win32 API

* Записывает DOS-заголовок и DOS-заглушку

* Вычисляет и обновляет финальные значения NT-заголовка

* Записывает заголовки секций для .text, .rdata, .idata

* Реализует правильное заполнение и выравнивание файла

* Записывает данные секций с таблицей импорта

* Обрабатывает все вычисления RVA и смещения файлов

* **GetProcessHeap()** : Получает кучу текущего процесса

* **HeapAlloc()** : Выделяет память, инициализированную нулями

* **HeapFree()** : Освобождает выделенную память при очистке

Все выделения памяти включают правильную обработку ошибок и очистку.

0x1000: .text section (SECTION_ALIGNMENT)

* **Базовый адрес образа** : 0x140000000 (по умолчанию для x64)

* **Выравнивание секций** : 0x1000 (4 КБ)

* **Выравнивание файла** : 0x200 (512 байт)

* **Подсистема** : Консольное приложение (IMAGE_SUBSYSTEM_WINDOWS_CUI)

1. Убедитесь, что MASM64 и Windows SDK установлены

2. Запустите `build.bat` для компиляции PE-писателя и примера

3. Выполните `PE_Writer_Example.exe` для генерации `hello.exe`

4. Протестируйте сгенерированный исполняемый файл

Все функции возвращают 0 при ошибке и ненулевое значение при успехе. Реализация включает:

* Максимальный размер кода 64 КБ (MAX_CODE_SIZE)

* Три фиксированные секции (.text, .rdata, .idata)

Реализация предоставляет прочную основу для:

* Чистый ассемблер x64 MASM - без зависимостей CRT

* Использует кучу Windows для управления памятью

* Совместим с Windows Vista и более поздними версиями

* Нулевые зависимости от внешних библиотек, кроме kernel32.dll

Эта реализация предоставляет полный, готовый к использованию PE32+ писатель, подходящий для бэкендов генерации кода, пользовательских компиляторов и упаковщиков исполняемых файлов.

Extracted Entities