
A dynamic unpacking tool
Shinigami — это экспериментальный инструмент, предназначенный для обнаружения и распаковки вредоносных имплантов, внедряемых через process hollowing или типовые процедуры упаковщиков.
Инструмент работает путём перехвата NT-функций, связанных с Process Hollowing, и пометки новых исполняемых страниц памяти битом page guard. Этот приём позволяет Shinigami обнаруживать непрямые изменения потока выполнения, обычно вызываемые шелл-кодом или распакованным кодом, что часто указывает на вредоносное ПО. Shinigami создаёт целевой исполняемый файл в приостановленном состоянии и внедряет DLL-библиотеку под названием «Ichigo». Эта библиотека автоматически перехватывает все необходимые функции для обнаружения и извлечения импланта. После того как артефакт полностью извлечён, инструмент завершает процесс.
Эффективность Shinigami может варьироваться в зависимости от конкретного вредоносного ПО, на которое он нацелен. Тем не менее, он станет ценным дополнением к любому набору инструментов для анализа вредоносных программ и может оказаться полезным при обнаружении и анализе вредоносного ПО, использующего process hollowing или типовые процедуры упаковщиков.
Важно: Это инструмент динамической распаковки, и его не следует запускать на вашем личном компьютере или в лаборатории статического анализа
Основной способ Shinigami по извлечению имплантов, внедрённых с помощью process hollowing, заключается в перехвате двух NT-функций: NtResumeThread и NtWriteVirtualMemory. Вот как это работает:
NtResumeThread Хук
NtWriteVirtualMemory Хук
--stop-at-write.Модуль универсальной распаковки Shinigami помечает вновь выделенные области памяти битом PAGE_GUARD; этот бит также применяется, если у какой-либо существующей области памяти права заменены на исполняемые. Используя guard pages, он может отслеживать, какая область памяти будет использоваться для размещения шелл-кода или PE-образов.
Для каждого обнаруженного шелл-кода Shinigami сохраняет на диск сам исходный шелл-код. Он также сканирует эту область памяти на наличие PE-файлов и сохраняет их. Shinigami рассматривает каждое выполнение шелл-кода как новый этап, поэтому в итоге в вашем рабочем каталоге появятся файлы с именами filename_shellcode_STAGENUM.bin or .exe.
У инструмента есть несколько параметров:
Usage: Shinigami [--help] [--version] [--output VAR] [--stop-at-write] [--verbose] [--only-executables] [--exported VAR] program_name
Positional arguments:
program_name Name of the program to execute
Optional arguments:
-h, --help shows help message and exits
-v, --version prints version information and exits
-o, --output Directory to dump artefacts
--stop-at-write Unhollow: Stop the execution when the PE file is being to be written
--verbose Display a verbose output
-p, --only-executables Only extract PE artefacts
-e, --exported Exported Function: Choose a exported function to execute if the target is a DLL (rundll will be used)
Некоторые важные параметры:
-o, --output: Указывает каталог для сохранения извлечённых артефактов. По умолчанию извлечённые артефакты сохраняются в каталог output в текущем рабочем каталоге. Вы можете указать другой каталог, передав его путь в качестве аргумента.
--stop-at-write: Этот аргумент используется во время распаковки процесса, подвергшегося Process Hollowing. Когда Shinigami обнаруживает, что PE-файл записывается в hollowed-процесс, он останавливает выполнение и сохраняет извлечённый PE-файл. Эта опция может быть полезна, если вы хотите избежать выполнения всего hollowed-процесса и вам нужно только извлечь распакованный код.
--verbose: Выводит подробный журнал. Это может быть полезно для отладки или понимания внутреннего устройства Shinigami.
![]() |
|---|
| Тестирование на Dridex |
После завершения извлечения процесс завершается, и у вас останется (надеюсь) извлечённый PE-файл:
![]() |
|---|
| Извлечённый имплант |
Обнаруженный имплант будет сохранён в формате, описанном в разделе методы обнаружения.
![]() |
|---|
| Распаковка случайного загрузчика, описанного здесь |
В приведённом выше примере Shinigami автоматически обнаружил поведение типового загрузчика и извлёк все выполнявшиеся шелл-коды и образы внутри него, не требуя каких-либо специальных переключателей для включения или отключения процедуры распаковки. Это стало возможным благодаря тому, что Shinigami использует часть функций модуля Unhollow, применяя общие хуки из библиотеки Gancho.
![]() |
|---|
| Распаковка DLL Emotet |
Shinigami также поддерживает DLL и умеет восстанавливать внедрённые бинарные файлы с отсоединёнными DOS-заголовками. В частности, такие вредоносные образцы, как Emotet, используют этот приём для обхода сканеров PE в памяти. Shinigami обнаруживает отсутствующие части (DOS-заголовок) и использует эвристики для их восстановления.
Забирайте подходящую вам версию на странице Релизы.
Будет замечательно, если вы поможете этому проекту; если хотите, вот зависимости и шаги:
Пожалуйста, открывайте issue или pull request для любых изменений, которые вы хотели бы внести.
Этот классный образ-талисман вдохновлён аниме Bleach и создан с помощью Dall-E.