Данный инструмент предоставляется исключительно в образовательных целях.
Автор не несет ответственности за любое неправомерное или вредоносное использование этого скрипта. Использование данного инструмента для сокрытия вредоносного ПО или для обхода систем безопасности является незаконным.
Используйте на свой страх и риск.
Этот скрипт предназначен для шифрования исполняемых файлов Windows (.exe) с использованием AES-256-CBC и создания для них загрузчика на Python.
Ключевой особенностью является то, что сгенерированный Python-загрузчик не записывает расшифрованный .exe файл на диск. Вместо этого он:
- Расшифровывает полезную нагрузку (payload) в памяти.
- Динамически разрешает необходимые функции Windows API (
VirtualAlloc,VirtualProtect,CreateThreadи т.д.) черезGetProcAddress. - Использует эти функции для ручной загрузки PE-файла (копирование секций, обработка импортов и релокаций) в новую область памяти процесса Python.
- Передает управление на точку входа загруженного в память кода.
Скрипт также применяет несколько техник обфускации к сгенерированному загрузчику:
- Ключ шифрования AES и вектор инициализации (IV) генерируются случайно для каждого запуска.
- Сгенерированный ключ/IV и зашифрованные данные дополнительно обфусцируются с помощью динамически генерируемого XOR-ключа.
- Имена импортируемых модулей, имена функций Windows API и некоторые внутренние строки в загрузчике также обфусцируются с помощью XOR и восстанавливаются только во время выполнения.
- Python 3.x
- Библиотека
cryptography(pip install cryptography)
python encryptor.py <путь_к_входному.exe> <путь_к_выходному.py><путь_к_входному.exe>: Путь к исполняемому файлу Windows x64 (.exe), который нужно зашифровать.<путь_к_выходному.py>: Путь, по которому будет сохранен сгенерированный Python-загрузчик (.py).
Сгенерированный .py файл можно затем запустить на целевой машине.
Для дальнейшего уменьшения вероятности обнаружения и для удобства пользования, сгенерированный Python-загрузчик (.py) можно скомпилировать в самостоятельный исполняемый файл (.exe).
pyinstaller: Рекомендуемый способ. Компиляция с помощьюpyinstaller(командойpyinstaller output_loader.py) часто приводит к значительному снижению количества обнаружений антивирусами по сравнению с исходным.pyфайлом.nuitka: Использованиеnuitkaдля компиляции, как правило, не дает такого же эффекта снижения детектов. Количество обнаружений скомпилированного с помощьюnuitkaфайла может оставаться на том же уровне, что и у исходного.pyскрипта, или даже незначительно увеличиваться в некоторых случаях.
Если основной целью является минимизация обнаружений, рекомендуется использовать pyinstaller для финальной компиляции загрузчика.
Примечание: Данные наблюдения основаны на ограниченном количестве тестов. Реальные результаты и количество обнаружений могут варьироваться в зависимости от конкретного шифруемого файла, используемой версии антивируса. Разработка велась не для злобных целей, поэтому задачи полностью спрятать что-либо от антивирусов - не было.
Разработано с ❤️ LavrCode