Методы разработки вредоносного ПО: классические и неклассические подходы
Выбор языка для разработки вредоносного ПО
Обход статического анализа антивирусов: ключевые методы
Техники обхода сигнатурного анализа
Видимость вызываемых WinAPI функций в таблице импортов
О сложности переписывания больших библиотек в шуточной форме на примере libcurl и файла easy.c
Замена функций стандартной библиотеки языка C на WinAPI аналоги
Сокрытие импортируемых функций
Видимость библиотеки user32.dll и функции MessageBoxA в таблице импортов структуры Portable Executable (PE)
Базовый пример использование LoadLibrary и GetProcAddress
Шифрование строк для защиты от анализа
Про видимость строковых литералов имен входящих параметров LoadLibrary и GetProcAddress
- Храниться в бинарном файле как не зашифрованный строковый литерал.
- Получаться из внешнего источника (например, из HTTP-ответа сервера).
- Вычисляться во время исполнения программы
Современные техники шифрования строк
Один из наипростейших шифров, использовавшихся во вредоносном ПО (141 строка)
Использование шифрования строк во время компиляции с дешифрованием во время исполнения посредством макроса TXT
Противодействие динамическому анализу: обнаружение эмуляции
Шуточное сравнение QEMU, Unicorn Engine и FLOSS
Обнаружение эмуляционной среды
Github issue, связанный с неправильной эмуляцией инструкции bswap в Unicorn Engine, использовавшийся раньше для обнаружения эмуляционной среды
Пример ассемблерного кода для обнаружения эмуляционной среды, который работал более пяти лет
Пример использования этого распознавания эмулятора в языке C++
Техника API Hammering
Улучшение примера с обнаружением эмуляционной среды, где бесконечный цикл реализован корректно, через API Hammering.
Обход хуков антивируса
Современные подходы к обфускации кода
- Обфускация посредством модификации исходного кода (ей и была посвящена большая часть статьи).
- Обфускация посредством модификации итогового бинарного файла, осуществляемая специальной программой-обфускатором, которая рекурсивно заменяет одни инструкции на иные, эквивалентные, но более сложные для анализа (доступ к программе-обфускатору чаще всего предлагается как услуга по подписке).
- Обфускация посредством модификации компилятора для генерации запутанного бинарного кода (так можно полностью автоматизировать обфускацию посредством модификации исходного кода)
- Комбинированный подход (чаще всего подходов 1 и 2).