• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Пишем Crypter на коленке часть 1: Начало / Знакомство

Barmaleus

(L2) cache
Пользователь
Регистрация
11.08.2023
Сообщения
403
Реакции
165
Гарант сделки
11
Депозит
0.0001
Данная статья предназначена для новичков и только в ознакомительных целях, использование приложенных вложений только с указанием авторства.

Ну, а мы начинаем наше путешествие в мир криптеров за пачку киреешек(шутка), на выходе будет продукт который можно будет продавать и стать зимбабвийским миллионером). Глубоко залазить в терминологию и прочую по_бень не будем приступим сразу к основной информации.

PE(Portable Executable) файл- бинарник, исполняемый файл, сугубо говоря exe файл или же dllка.

Shellcode - машинный код, предназначенный для выполнения напрямую в памяти процесса.

CLR (Common Language Runtime) - частью архитектуры .NET для управления выполнением кода.

AV - AntiVirus / Антивирус.

AMSI (Antimalware Scan Interface) - это интерфейс который позволяет антивирусным программам сканировать и анализировать подозрительный код в реальном времени. Это как специальный "фильтр" в Windows, который проверяет все подозрительные операции в системе, не работает в нативных программах.

Malware - вирус, троян, вредоносная программа.

Дизассемблере - программа которая транслирует исполняемый файл / бинарь в машинный код который мы сможем более менее понять.

Сейчас все AV работают вместе: создают изолированную среду, следят за поведением кода и используют облачные сервисы для анализа подозрительного поведения. Поэтому простые способы внедрения кода уже не проходят, и приходится придумывать все более сложные способы обхода защиты.

1748789716208.png


Основные техники внедрения кода так и не поменялись и их проблемы остались такими же как и были.

LoadPE - это метод ручной загрузки PE-файла в память, но у него есть серьезные ограничения: не все PE файлы можно загрузить корректно, часто возникают ошибки при обработке заголовков, сложности с правильной загрузкой секций / ресурсов в памяти и проблемы с импортами и переопределением функций.

Для тех кто не знает что это, объясню по простому, импорт - это то, что вы используете из другой библиотеки чтобы не реализовывать самим. Например написали хотите вы написать программку написать на плюсах или си и берете публичный код для своей реализации, библиотека для GUI приложений и так далее, если нет исходного кода, то вы используете dll файл и берете функции с него, при этом вы зависите от него.
Секции в PE файле - это как комнаты в доме, где каждая комната предназначена для своего дела: одна для хранения инструментов, другая для документов, третья для диванных войск, четвертая для домохозяеек и т.д. В PE файле есть основные секции: .text для кода программы, .data для данных, которые уже инициализированы, .rdata для констант, .bss для неинициализированных данных, .idata для импортов, .edata для экспортов и .rsrc для ресурсов. Каждая секция имеет свои права доступа: .text обычно только для чтения и выполнения, .data для чтения и записи, а .rsrc может быть общедоступной.

Тык
или Тык

RunPE продолжает работать даже на Windows 11, но имеет свои ограничения: легко обнаруживается современными системами защиты, создает процесс и инжектит в него код(очень легко его можно сдампить, поставив брячку на WinAPI функции), может быть заблокирован облачными сервисами и сложно обойти проверки песочниц, легко может быть сдамплен обычным школьником которые решит поставить брячку на WriteProcessMemory.

Тык

Shellcode - это чистый машинный код, но и он имеет свои проблемы: сложно создать стабильный код для разных версий Windows, может быть обнаружен при анализе поведения(или же тупо пойман по куску кода в памяти), требует больших знаний и написания костылей за свой счет без использования библиотек, пример хорошего loaderа который конвертит PE файлы в шеллкод - Donut(Бублик)

CLR - это среда выполнения .NET, которая также имеет ограничения: может быть отслежена системами защиты(AMSI), сложно скрыть поведение программы и нужно патчить AMSI, есть ограничения в работе с памятью и есть риск обнаружения при анализе облачными сервисами.


Все эти загрузчики достаточно древние, но при этом до сих пор актуальные и широко используемые в создании malware.

Помимо способов загрузки кода существуют и способы сокрытия зашифрованного PE файла в конечном закриптованном файле, в основном хранят в секции .text / .data / .rdata / .rsrc(ресурсы) или же подгружают с интернета в виде картинок из которых потом и берут сам PE файл. Все из этих секций можно будет посмотреть в дизассемблере.
Секция .text в PE файле - это основная секция, где хранится исполняемый код программы. Это как "кабинет программиста", где лежат все инструкции, которые компьютер будет выполнять.
1748786264764.png

Секция .data - это как "кладовка с барахлом", где хранятся все переменные и значения, которые программа уже задала заранее. Это противоположность секции .bss, где хранятся незаданные данные. В .data можно как читать, так и записывать информацию во время работы программы.

Секция .rdata (read-only data) - это как "архив важных документов", где хранятся только для чтения данные, такие как константы, строки и другие неизменяемые значения. Она защищена от записи, чтобы предотвратить случайные или намеренные изменения важных данных.

1748786452607.png

Секция .rsrc (ресурсы) - это как "хранилище медиа и интерфейса", где хранятся все элементы, которые пользователь видит и использует: иконки, изображения, меню, диалоги и другие ресурсы программы. Ее спокойно можно посмотреть с помощью программы Resource Hacker.
1748786528086.png

У антивирусов существует несколько видов анализа исполняемых файлов основные из них - статический, эвристический, динамический.

Статический анализ - визуальный осмотр файла, поиск аномалий и сигнатур(уже известных кусков кода в двоичном формате, которые так или иначе были замечены в подозрительной активности, анализ ресурсов, хеш таблицы импортов, энтропия и прочее.

Таблица импортов - это специальная структура в PE файле, которая содержит информацию о всех внешних библиотеках и функциях, которые программа использует. Это как список необходимых инструментов, которые программа берет из других библиотек. В ней хранятся названия DLL и методов из них.
1748787414349.png

Эвристический анализ - это как "умное предположение" на основе уже известных паттернов(прям как в играх) кусков двоичного кода. Анализ с помощью обученного искусственного интеллекта / натренированной модели, которая будет выявлять аномалии и странности - Пример обученной модели с исходниками(тык).

Динамический анализ - проверка исполняемого файла в изолированной среде, отслеживание поведения и выявление похожих файлов которые уже были, отслеживание url запросов, к каким процессам / файлам был доступ, грубо говоря самый страшный анализ который только может быть.

Современные антивирусы комбинируют все эти методы анализа и поэтому нужно быть готовым против всех, статический анализ достаточно легко обмануть простыми техниками и очисткой кода на бинарном уровне, путём изменения настроек компилятора(Настройки оптимизации и т.д.).

Можно сказать начальную часть этапа мы прошли и узнали много нового или же подкрепили старые знания, которые были у вас до этого, в следующих частях будет знакомство с языками программирования и IDE(редакторы кода) для них.

Написание кода будет в следующих статьях, а пока что было только ознакомление с основной терминологией и с чем нам предстоит иметь дело. В комментариях поправляем меня если что-то не так объяснил или где - то ошибся.

Автор: Barmaleus
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх