КРИПТЕР ТЕХНИЧЕСКОЕ ЗАДАНИЕ Нужно написать криптер - программу, содержащую в себе нагрузку в виде ПРОИЗВОЛЬНЫХ .exe или .dll, маскирующую и запускающую ее. Термин "Стаб" - это холостая оболочка криптера без нагрузки. ТРЕБОВАНИЯ 1. Сборка в обе разрядности (32/64); нагрузка той же разрядности что и стаб. 2. Если нагрузка - .dll, она запускается БЕЗ CreateProcess. Путем развертывания в памяти текущего процесса, настройки reloc'ов, импорта/экспорта, и вызова точки входа. 3. Если нагрузка - .exe, запуск бесфайловой техникой. Предпочтительно ProcessHollowing. При этом должна происходить подмена родительского процесса. 4. Стаб должен маскировать нагрузку: 4.1. Добавлять "левый" импорт, мимикрируя (например) под GUI-программу (в обилии вызовы из GDI), или COM-компонент 4.2. Содержать "шумовую" логику: отрисовка окон, вызов COM-объектов, итд. Логика, разумеется, отключена и никогда не срабатывает, но АВ должен думать, что вот-вот и мы закончим инициализацию и тогда 4.3. Можно добавлять ресурсы - левые изображения, текстовые строки итд. 4.4. Нагрузка зашифрована и/или сжата. Можно использовать простейшее XOR-шифрование с длинной гаммой. Алгоритм сжатия - самый легковесный в плане размера и простоты самого алгоритма. 4.5. Нагрузка имеет высокую энтропию, а основная логика - низкую. Следует равномерно распределить нагрузку по разным секциям (.text, .data, .rdata итд). Таким образом нужно обойти детекты АВ по энтропии. 5. Выполнение требований "оформление кода и сборок" 6. Должны быть профили сборки как под LLVMO, так и под Microsoft C++. 7. Меры по обходу песочниц, задержки запуска нагрузки, на первом этапе опциональны. На втором этапе они станут обязательными. Режим использования криптера предполагает генерацию сотен файлов с разными хэшами в день. У всех этих файлов должны быть РАЗНЫЕ шумовые строки, ресурсы, если получится - маскирующая логика. То есть требуется высокий и АВТОМАТИЗИРОВАННЫЙ уровень полиморфизма. То есть, всю эту рандомизацию предлагается внести в систему сборки (в виде событий сборки или билдера). ОФОРМЛЕНИЕ СБОРКИ Цель всех дальнейших действий - подключение автоматической сборки на билд-машине, с целью выдавать большой объем сборок без участия человека. За счет объема процент брака на выходе будет иметь меньшее значение (можно будет выбрать 1 из 10 годный крипт). 8. Из сборки должны быть исключены ручные операции. Все подготовительные, промежуточные и финальные шаги должны быть оформлены как События сборки (правым тапком на проекте в MSVS - События сборки). Сюда относятся прошивки байт-массивов unsigned char payload[] = {..} из бинарных файлов, кодирование и упаковка нагрузки, затирание строк в финальном бинарнике, задание имени для финального бинарника, и любые подобные манипуляции. Билд должен собираться одним действием. 9. Должен иметься скрипт сборки. Например, build.bat (примерный вариант см. в приложении). Так чтобы можно было сборку включить в автоматизированную систему сборки на билд-машине. 10. Под каждый тип нагрузки должен иметься профиль сборки. Например, Release_Dll_Payload1, Release_Exe_Payload1 для нагрузки 1, Release_Dll_Payload2, Release_Exe_Payload2 для нагрузки 2 и так далее. Профиль сборки позволяет задавать независимый набор макросов препроцессора. Макросами препроцессора можно задать передачу параметров в нагрузку, способ ее развертывания, и прочее. Подобный подход применяется для систем сборки наподобие CMake. ПРИЛОЖЕНИЕ 1: СКРИПТ СБОРКИ echo Build started %DATE% %TIME% rem НАСТРАИВАЕМ ПУТИ ПОД СЕБЯ rem ЛОКАЛЬНЫЕ ИЗМЕНЕНИЯ В ЭТОМ ФАЙЛЕ В GIT НЕ КОММИТИТЬ! set msbuild="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe" set sln=D:\Projects\project\project.sln set buildlog=project.log rem type nul > %buildlog% echo Build started %DATE% %TIME% > %buildlog% :buildmain set buildprofile="Release|Win32" %msbuild% %sln% /Clean %buildprofile% %msbuild% %sln% /Build %buildprofile% /Out %buildlog% || goto builderr :over echo Build finished successfully %DATE% %TIME% echo Build finished successfully %DATE% %TIME% >> %buildlog% exit(0) :builderr echo Build %buildprofile% failed %DATE% %TIME% echo Build %buildprofile% failed %DATE% %TIME% >> %buildlog% exit(1)