
Преобразует PE в шеллкод
Преобразует PE так, чтобы его можно было внедрить как обычный shellcode.
(При этом выходной файл остаётся валидным PE).
Поддерживает как 32-битные, так и 64-битные PE
Авторы: @hasherezade и @hh86
Цель этого проекта — предоставить возможность генерировать PE-файлы, которые можно внедрять с минимальными усилиями. Проект вдохновлён ReflectiveDLLInjection Стивена Фьюера, но отличие в том, что с помощью pe2shc вы можете добавить заглушку рефлективной загрузки после компиляции. Кроме того, заголовок PE-файла изменён таким образом, что выполнение внедрённого буфера можно начинать с самого начала — как и при работе с обычным shellcode. Он автоматически найдёт заглушку и продолжит загрузку полного PE.
🟢 Заглушка поддерживает только базовые структуры формата PE, такие как:
Обратите внимание, что хотя для большинства PE-файлов этого достаточно, некоторые исполняемые файлы могут использовать другие, более сложные аспекты формата PE. Это означает, что не любой PE можно успешно преобразовать в shellcode.
🚫 Примеры пока не поддерживаемых элементов:
📦 ⚙️ Скачайте последний релиз.
Используйте рекурсивное клонирование, чтобы получить репозиторий вместе со всеми подмодулями:
git clone --recursive https://github.com/hasherezade/pe_to_shellcode.git
pe2shc.exe <путь к вашему PE> [путь к выходному файлу*]
* - необязательно
Если PE был успешно преобразован, pe2shc сообщит, куда сохранён выходной файл:
[+] Сохранён в файл: <преобразованный файл>
например:
[+] Сохранён в файл: test_file.shc.exe
runshc.exe <преобразованный файл>
(*)Предупреждение: не забудьте использовать версию runshc с разрядностью, соответствующей преобразованному приложению (32 или 64 бита) — иначе приложение аварийно завершится!