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

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

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

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

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

Категории

Все категории
Loading categories
rust-mordor-rs — Библиотека Rusty Hell's Gate / Halo's Gate / Tartarus' Gate / FreshyCalls / Syswhispers2 | Kitploit
Инструменты/GitHubGitHub/gmh5225/rust-mordor-rs
ЭксплуатацияОбход IDS/IPSОбратная инженерияШелл-кодПост-эксплуатацияАнализ вредоносных программRed TeamingРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubgmh5225/rust-mordor-rs

rust-mordor-rs

Библиотека Rusty Hell's Gate / Halo's Gate / Tartarus' Gate / FreshyCalls / Syswhispers2

32354 лет назадПроверено Kitploit
Репозиторий

Популярное

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

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

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

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

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

Hell's Gate / Halo's Gate / Tartarus' Gate и FreshyCalls / SysWhispers2 на Rust

Я назвал этот проект Mordor, потому что Hell's Gate / Halo's Gate / Tartarus' Gate почему-то напоминают мне Чёрные врата Мордора из Властелина колец, хаха, а проекту нужно крутое название — так почему бы и нет?

BlackGate Благодарность Middle-earth: Shadow of War Wiki

TODO (разработка в процессе)

  • Сделать его более удобным для пользователя
  • Добавить описание использования в README.md
  • Добавить системные вызовы / ассемблерные макросы
  • Решить, хочу ли я оставить его библиотекой или сделать чем-то, что генерирует выходные файлы, как SysWhispers1, SysWhispers2, SysWhispers3

Хукинг

Хукинг — это техника, используемая для перехвата вызовов существующих функций или перенаправления потока выполнения легитимного API в другое место в памяти. Это место в памяти может контролироваться злоумышленником, антивирусом (AV), системой обнаружения и реагирования на конечных точках (EDR) или античитом (AC).

Inline Hooking: Это позволяет нам заменить первые несколько байтов (ассемблерных инструкций) целевой функции инструкцией перехода, чтобы перенаправить поток выполнения в другое место в памяти.

Import Address Table Hooking (IAT hooking): Таблица адресов импорта — это таблица поиска указателей на функции, импортируемые из DLL или исполняемых файлов. IAT-хукинг позволяет нам заменить адрес функции в таблице адресов импорта на другой, чтобы перенаправить поток выполнения программы.

BlackGate Благодарность Kyle Mistele

Описание

Что такое Hell's Gate / Halo's Gate / Tartarus' Gate?

Hell's Gate — это техника внедрения в процесс, которая позволяет нам искать последовательность байтов, называемую syscall stub, в модуле ntdll.dll, чтобы извлечь номера системных вызовов и сохранить их в специальной таблице в памяти, которая затем используется для прямого вызова системных API. Однако ограничение Hell's Gate заключается в том, что ему нужен доступ к чистому модулю ntdll.dll, если функции находятся под хуком. В противном случае он не может заполнить необходимые номера системных вызовов и в итоге не может выполнить вызовы нативных API. Чтобы решить эту проблему, родилась сестра-близнец под названием Halo's Gate, которая является всего лишь патчем для Hell's Gate, основанным на очень простом наблюдении.

Когда на функцию устанавливается хук (jmp <address>), мы не сможем динамически получить номера системных вызовов, поэтому для решения этой проблемы мы можем посмотреть на номера системных вызовов соседних функций и соответствующим образом скорректировать вычисления, чтобы получить наш номер системного вызова, поскольку ID системных вызовов в syscall stub следуют друг за другом с инкрементом.

Hell's Gate проверяет только последовательность байтов в следующем порядке 4c8bd1b8, которая в ассемблере выглядит так:

mov r10, rcx
mov eax, <syscall>

Halo's Gate делает то же самое, что и Hell's Gate, но с дополнительной проверкой наличия хука — проверяется, равен ли первый байт экспорта e9 (jmp), и если хук установлен, то Halo's Gate начинает смотреть на соседние функции и соответствующим образом корректирует вычисления, чтобы получить номер системного вызова, поскольку ID системного вызова в заглушке syscall следуют друг за другом с инкрементом.

Однако не все EDR устанавливают хуки в одном и том же месте (в начале функции). Что если EDR ставит хук сразу после mov r10, rcx (4c8bd1)? Это сломает наш код.

Tartarus' Gate решает эту проблему, добавляя к Halo's Gate дополнительную проверку — последовательный поиск байтов 4c8bd1e9, что в ассемблере выглядит так.

mov r10, rcx
jmp <address>

Однако, если все функции перехвачены, мы можем найти первую из них и снять перехват со всех по одной, начиная с call ID 0. Этот метод называется Veles' Reek в SEKTOR7.

FreshyCalls / SysWhispers1 / SysWhispers2 / SysWhispers3

Техника FreshyCalls ищет в Export Directory функции, начинающиеся с Nt (исключая Ntdll), и сортирует их по адресам. Как ни удивительно, наименьший адрес соответствует номеру системного вызова 0, следующий — номерам системных вызовов 1, 2, 3... Вы можете убедиться в этом сами в x64 dbg или Windbg.

Syswhispers2 делает то же самое, но вместо поиска функций Nt в каталоге экспорта ntdll.dll он ищет функции, начинающиеся с Zw. Как ни удивительно, функции Zw и функции Nt указывают на одни и те же заглушки системных вызовов и имеют одинаковый номер системного вызова.

Здесь мы можем это проверить: syswhisper2

syswhisper2

Разница между функциями Zw и Nt объясняется Microsoft здесь:

"*API служб нативной операционной системы Windows реализован как набор подпрограмм, выполняющихся в режиме ядра. Эти подпрограммы имеют имена, начинающиеся с префикса Nt или Zw. Драйверы режима ядра могут вызывать эти подпрограммы напрямую. Пользовательские приложения могут обращаться к этим подпрограммам с помощью системных вызовов.

За небольшими исключениями, каждая подпрограмма нативных системных служб имеет две слегка различающиеся версии с похожими именами, но разными префиксами. Например, вызовы NtCreateFile и ZwCreateFile выполняют схожие операции и, фактически, обслуживаются одной и той же подпрограммой системы в режиме ядра.

Для системных вызовов из пользовательского режима версии Nt и Zw подпрограммы ведут себя одинаково. Для вызовов из драйвера режима ядра версии Nt и Zw подпрограммы различаются тем, как они обрабатывают значения параметров, которые вызывающий передаёт подпрограмме.

Драйвер режима ядра вызывает версию Zw подпрограммы нативных системных служб, чтобы сообщить подпрограмме, что параметры поступают из доверенного источника в режиме ядра. В этом случае подпрограмма предполагает, что может безопасно использовать параметры без их предварительной проверки. Однако, если параметры могут поступать как из пользовательского, так и из ядерного источника, драйвер вместо этого вызывает версию Nt подпрограммы, которая определяет на основе истории вызывающего потока, были ли параметры получены в пользовательском режиме или в режиме ядра*"

В двух словах:

Hell's Gate: Разбирает ntdll.dll, чтобы найти начало заглушки системного вызова (4c8bd1b8), а затем извлекает ID системного вызова. Однако, если заглушка системного вызова перехвачена, наш код сломается.

Halo's Gate: То же, что и Hell’s Gate, но добавляет дополнительную проверку наличия перехвата, проверяя, является ли первый байт e9 (jmp), и если перехват присутствует, то Halo's gate начинает смотреть на соседние функции и соответствующим образом корректирует вычисления, чтобы получить номер системного вызова, поскольку ID системного вызова в заглушках системных вызовов следуют друг за другом с шагом единица.

Tartarus' Gate: То же, что и Halo's Gate, но добавляет дополнительную проверку наличия перехвата заглушки системного вызова во второй строке, после инструкций ассемблера mov r10, rcx, путём поиска следующей последовательности байтов: 4c8bd1e9.

FreshyCalls: Ищет функции, начинающиеся с Nt, в Export Directory, сортирует их по адресам, и наименьший адрес соответствует идентификатору системного вызова 0.

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