SHGenOB: Генератор шеллкода из C-кода PIC
Введение
SHGenOB — это инструмент на Python, предназначенный для генерации шеллкода из позиционно-независимого кода (PIC), написанного на C. Он автоматизирует процесс компиляции C-кода, извлечения секции .text и, при необходимости, шифрования полученного шеллкода с помощью XOR-шифрования.
Этот проект полностью основан на этом материале от hasherezade.
Позиционно-независимый код (PIC)
Важное примечание для пользователей SHGenOB: Чтобы этот инструмент генерации шеллкода работал корректно, C-код во входном файле должен быть написан как позиционно-независимый код (PIC). Инструмент предполагает, что предоставленный код соответствует принципам и характеристикам PIC, описанным ниже.
Позиционно-независимый код (PIC) — это тип машинного кода, который может выполняться независимо от его абсолютного адреса в памяти. Эта характеристика делает PIC особенно полезным при создании шеллкода, разделяемых библиотек и некоторых видов вредоносного ПО. Ключевые особенности PIC включают:
- Независимость от адреса: PIC может корректно выполняться независимо от того, куда он загружен в память.
- Отсутствие фиксированных ссылок на память: Он избегает использования абсолютных адресов, полагаясь вместо этого на относительную адресацию или другие методы для ссылок на области памяти.
- Самодостаточность: PIC обычно включает все необходимые данные внутри самого кода, уменьшая внешние зависимости.
- Стек-строки: Объявление строк как массивов символов вынуждает компилятор помещать их в стек, а не в секцию .data или .pdata PE-файла.
- Без перемещений (Relocation-Free): Он не требует от загрузчика выполнения перемещений, что ускоряет загрузку и выполнение.
- Меньший размер: PIC часто приводит к меньшему размеру бинарного файла по сравнению с кодом, зависящим от адреса.
- Адресация относительно регистров: Для доступа к данным и выполнения переходов часто используется адресация относительно регистров.
- Использование смещений: Вместо абсолютных адресов PIC использует смещения от текущего указателя инструкций.
- Платформозависимые методы: Разные архитектуры CPU могут требовать разных методов для достижения позиционной независимости.
PIC необходим в сценариях, где точный адрес загрузки кода заранее неизвестен, что делает его ключевой концепцией в разработке шеллкода и некоторых областях системного программирования. При использовании SHGenOB убедитесь, что ваш входной C-код соответствует этим принципам PIC, чтобы генерировать эффективный и надежный шеллкод.
Возможности
- Компиляция PIC C-кода с использованием инструментов Microsoft Visual Studio
- Извлечение секции .text из скомпилированного исполняемого файла
- Опциональное шифрование шеллкода с помощью XOR-шифрования
- Вставка сгенерированного шеллкода в шаблон загрузчика
- Компиляция и тестирование загрузчика со сгенерированным шеллкодом
- Поддержка режима отладки для просмотра промежуточных файлов
- Очистка промежуточных файлов после успешного выполнения
Требования
- Операционная система Windows
- Python 3.6 или выше
- Microsoft Visual Studio 2022 Community Edition (или совместимая версия)
- Следующие пакеты Python:
- Компилятор C (cl.exe) и ассемблер (ml64.exe) из Visual Studio
- Файл vcvars64.bat из Visual Studio (для настройки среды компиляции)
Установка
- Установите Python 3.6 или выше с python.org
- Установите Microsoft Visual Studio 2022 Community Edition
- Установите требуемые пакеты Python:
pip install pefile argparse
- Клонируйте или скачайте этот репозиторий на свой локальный компьютер
Использование
Запустите скрипт из командной строки со следующим синтаксисом:
python shgenob.py --code-file <path_to_c_file> [--masm-file <path_to_masm_file>] [--debug] [--xor-key <key>]
Аргументы:
--code-file или -cf: (Обязательный) Путь к файлу main.c, содержащему PIC-код
--masm-file или -mf: (Необязательный) Путь к внешнему .masm файлу для включения дополнительной ассемблерной логики в шеллкод
--debug или -d: (Необязательный) Включить режим отладки (пропускает очистку промежуточных файлов)
--xor-key или -xk: (Необязательный) XOR-ключ для шифрования шеллкода (формат: AA,BB,CC)
Примеры:
# Базовое использование
python shgenob.py --code-file main.c
# С внешним MASM-файлом
python shgenob.py --code-file main.c --masm-file custom_logic.masm
# Со всеми опциями
python shgenob.py --code-file main.c --masm-file custom_logic.masm --debug --xor-key AA,BB,CC
Описание функций
save_to_file(content, filename): Сохраняет переданное содержимое в файл в текущем каталоге
cleanup(): Удаляет промежуточные файлы (.asm, .exe, .obj, .lnk) в текущем каталоге
xor_encrypt(shellcode, key): Шифрует шеллкод с помощью XOR с использованием переданного ключа
insert_shellcode_into_loader(formatted_shellcode, loader_file): Вставляет шеллкод в шаблон загрузчика
extract_text_section(file_path, key): Извлекает секцию .text из PE-файла и опционально шифрует её
find_file(root_dir, file_name): Ищет файл в указанном каталоге и его подкаталогах
run_command_with_vcvars(command, vcvars_path): Выполняет команду с установленными переменными окружения Visual Studio
compile_cpp_file(cpp_file, vcvars_path, output_exe): Компилирует C++ файл с помощью компилятора Visual Studio
modify_asm_file(asm_file): Модифицирует сгенерированный ассемблерный файл для совместимости с шеллкодом
main(cpp_file, args): Главная функция, которая управляет процессом генерации шеллкода
Порядок работы
- Разбор аргументов командной строки
- Поиск инструментов Visual Studio (vcvars64.bat, cl.exe, ml64.exe)
- Компиляция входного C-файла в ассемблер
- Модификация сгенерированного ассемблерного файла
- Сборка модифицированного ассемблерного файла
- Извлечение секции .text из полученного исполняемого файла
- Опциональное шифрование извлеченного шеллкода
- Сохранение шеллкода в файл
- Вставка шеллкода в шаблон загрузчика
- Компиляция загрузчика
- Тестирование загрузчика со сгенерированным шеллкодом
- Очистка промежуточных файлов (если не включен режим отладки)
Отладка
Используйте флаг --debug, чтобы пропустить процесс очистки и просмотреть промежуточные файлы. Это полезно для поиска и устранения неполадок и понимания процесса генерации шеллкода.
Вопросы безопасности
- Этот инструмент предназначен только для образовательных целей и авторизованного тестирования
- Сгенерированный шеллкод может быть обнаружен антивирусным программным обеспечением
- Используйте шифрование (XOR-ключ) для обфускации шеллкода, но учтите, что это базовая форма обфускации
- Убедитесь, что у вас есть разрешение на использование этого инструмента на целевых системах
Ограничения
- В настоящее время поддерживаются только Windows и набор инструментов Microsoft Visual Studio
- Ограниченная обработка ошибок для некоторых пограничных случаев
- XOR-шифрование — это базовая форма обфускации, которая может быть недостаточной для всех случаев использования
Участие в разработке
Вклад в улучшение SHGenOB приветствуется. Пожалуйста, выполните следующие шаги:
- Сделайте форк репозитория
- Создайте новую ветку для вашей функции
- Зафиксируйте ваши изменения
- Отправьте изменения в ветку
- Создайте новый Pull Request