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

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

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

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

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

Категории

Все категории
Loading categories
MOEW — Белая книга | Kitploit
Инструменты/GitHubGitHub/harryeetsource/moew
Оборонительные ИнструментыЭксплуатацияОбратная инженерияОтладчикиАнализ вредоносных программОбучение и ОбразованиеЭксплуатация Бинарных Файлов
GitHubharryeetsource/moew

MOEW

Белая книга

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

Популярное

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

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

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

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

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

Невидимые угрозы — видимые решения.

Каскад исключений на невыровненных опкодах (MOEW)

3‑стадийный SEH-каскад PoC (безвредный, x86/Wow64)

Кратко: Данный PoC демонстрирует 3‑стадийный каскад обработки структурных исключений (SEH), вызванный намеренным невыровненным исполнением необработанных байтовых последовательностей, первая корректная инструкция которых — вызывающая сбой div reg с нулевым делителем.
Каждая стадия исключения устанавливает следующий SEH-обработчик, инициирует новое невыровненное деление на ноль и выполняет безвредную наблюдаемую нагрузку, после чего восстанавливает исходную SEH-цепочку и корректно завершает работу.


1. Обзор

MOEW (Misaligned Opcode Exception Waterfall) — это образец оборонительного исследования, демонстрирующий управляемое многостадийное исполнение на основе исключений в среде x86/Wow64 Windows. Он показывает:

  • Ручное управление SEH-цепочкой через fs:[0]
  • Намеренное невыровненное исполнение вручную составленных байтовых последовательностей (blob1, blob2, blob3)
  • Стадийные SEH-обработчики, связанные в цепочку
  • Многоуровневую рекурсию сбоев через:
    • KiUserExceptionDispatcher
    • RtlDispatchException
    • Пользовательские обработчики в режиме пользователя
  • Чистый путь завершения, восстанавливающий исходную SEH-цепочку

Вся нагрузка безвредна:

  • Стадия 1: Запускает Блокнот
  • Стадия 2: Записывает файл-маркер в %TEMP%
  • Финальная стадия: Запускает Калькулятор

PoC намеренно «обезврежен». Никакие данные не шифруются, не изменяются и не уничтожаются.


2. Возможности

  • Полностью детерминированная SEH-рекурсия через 3 стадийных обработчика
  • «Голые» x86-байтовые последовательности с несколькими корректными путями декодирования
  • Невыровненный div по управляемым смещениям (ECX/EDX/EBX = 0)
  • Глобальный счётчик стадий для логирования и трассировки
  • Полное восстановление исходной головы SEH-цепочки (ORIGINAL_SEH)
  • Rust nightly + встроенный ассемблер + голые функции
  • Безвредная, но видимая «нагрузка» для телеметрии и отладки

3. Требования к окружению

3.1 Архитектура

  • Только x86 (32‑бит)
  • Компиляция с помощью MSVC-тулчейна
  • Работает также на 64‑битной Windows в режиме WoW64

3.2 Rust Nightly

PoC использует возможности, доступные только в nightly:

#![feature(asm_experimental_arch)]
#![feature(naked_functions)]

Установите необходимые компоненты:

rustup toolchain install nightly
rustup target add i686-pc-windows-msvc --toolchain nightly

3.3 Отключение SAFESEH

Поскольку PoC устанавливает пользовательские SEH-обработчики, отсутствующие в таблице SAFESEH, необходимо указать линковщику отключить проверку SAFESEH.

Создайте .cargo/config.toml:

[target.i686-pc-windows-msvc]
rustflags = [
  "-C", "link-arg=/SAFESEH:NO",
]

4. Инструкция по сборке

Соберите бинарный файл:

cargo +nightly build --target i686-pc-windows-msvc --release

Результат находится по пути:

target\i686-pc-windows-msvc\release\seh_waterfall.exe

5. Запуск PoC

Выполните:

seh_waterfall.exe

Ожидаемый порядок управления:

Stage 0 → misaligned blob1 → Stage 1 handler
Stage 1 → misaligned blob2 → Stage 2 handler
Stage 2 → misaligned blob3 → Final handler
Final  → restore SEH       → exit

Видимые артефакты:

  • Запускается notepad.exe (Стадия 1)
  • Создаётся %TEMP%\moew_stage2.txt (Стадия 2)
  • Запускается calc.exe (финальный обработчик)

6. Технический разбор

6.1 Структура SEH-записи

В 32‑битной Windows SEH-записи образуют связный список, хранящийся по адресу fs:[0]:

#[repr(C)]
struct SehRec {
    next: *mut SehRec,
    handler: usize,
}

Каждый обработчик использует стандартную сигнатуру SEH:

extern "system" fn handler(
    record: *mut u8,
    frame: *mut u8,
    context: *mut u8,
    dispatcher: *mut u8,
) -> i32

6.2 Глобальное состояние

static STAGE_COUNTER: AtomicU32 = AtomicU32::new(0);
static mut ORIGINAL_SEH: *mut SehRec = std::ptr::null_mut();

Используется для:

  • подсчёта глубины рекурсии обработчиков
  • восстановления исходной головы SEH-цепочки в конце каскада

7. Логика стадий

Стадия 0 — Первоначальная настройка фрейма

  1. Сохранить fs:[0] как ORIGINAL_SEH.
  2. Создать SEH-запись, указывающую на обработчик Стадии 1.
  3. Перезаписать fs:[0] этой новой записью.
  4. Выполнить невыровненный переход в blob1 + 5, который декодируется как div ecx (после установки ECX = 0).

Стадия 1 — Первый SEH-обработчик

  1. Запустить notepad.exe.
  2. Создать SEH-запись для обработчика Стадии 2 и добавить её в вершину цепочки.
  3. Выполнить невыровненный переход в blob2 + 3 → div edx (при EDX = 0).

Стадия 2 — Второй SEH-обработчик

  1. Записать %TEMP%\moew_stage2.txt.
  2. Установить финальный обработчик в SEH-цепочку.
  3. Выполнить невыровненный переход в blob3 + 3 → div ebx (при EBX = 0).

Финальный обработчик — Завершение

  1. Запустить calc.exe.
  2. Восстановить ORIGINAL_SEH в fs:[0].
  3. Завершить процесс корректно через process::exit(0).

8. Невыровненные сбойные последовательности

8.1 blob1

#[unsafe(naked)]
pub extern "C" fn blob1() {
    naked_asm! {
        ".byte 0xB8, 0x10, 0x00, 0x00, 0x00", // mov eax, 0x10
        ".byte 0xF7, 0xF1",                   // div ecx
        ".byte 0xC3",                         // ret
        ".byte 0x90, 0x90, 0x90",             // nop padding
    }
}
  • Выровненное декодирование: mov eax, 0x10; div ecx; ret
  • Невыровненное по смещению +5: div ecx (при ECX = 0 → #DE)

8.2 blob2

#[unsafe(naked)]
pub extern "C" fn blob2() {
    naked_asm! {
        ".byte 0x55",                         // push ebp
        ".byte 0x8B, 0xEC",                   // mov ebp, esp
        ".byte 0xF7, 0xF2",                   // div edx
        ".byte 0xC3",                         // ret
        ".byte 0x90, 0x90, 0x90",             // nop padding
    }
}
  • Выровненное декодирование: push ebp; mov ebp, esp; div edx; ret
  • Невыровненное по смещению +3: div edx (при EDX = 0 → #DE)

8.3 blob3

#[unsafe(naked)]
pub extern "C" fn blob3() {
    naked_asm! {
        ".byte 0x53",                         // push ebx
        ".byte 0x8B, 0xD8",                   // mov ebx, eax
        ".byte 0xF7, 0xF3",                   // div ebx
        ".byte 0xC3",                         // ret
        ".byte 0x90, 0x90, 0x90",             // nop padding
    }
}
  • Выровненное декодирование: push ebx; mov ebx, eax; div ebx; ret
  • Невыровненное по смещению +3: div ebx (при EBX = 0 → #DE)

9. Конвейер исключений

Каждая сбойная стадия повторно входит в пользовательский конвейер исключений Windows:

KiUserExceptionDispatcher
    → RtlDispatchException
        → обход SEH-цепочки (fs:[0])
            → обработчик MOEW

Типичный вид в отладчике:

seh_waterfall!blobX+offset
ntdll!KiUserExceptionDispatcher
ntdll!RtlDispatchException
seh_waterfall!stageN_handler

Каскад полностью основан на реальных аппаратных сбоях и диспетчеризации SEH; никакие синтетические или поддельные исключения не используются.


10. Вывод файла-маркера

Файл, записываемый на Стадии 2, выглядит так:

MOEW Stage 2 Marker
-------------------
This file was written by the Stage 2 SEH handler
as a benign demonstration payload.

Его наличие в %TEMP% служит простым наблюдаемым доказательством того, что Стадия 2 была выполнена через SEH-цепочку.


11. Примечания по безопасности

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