СРЕДСТВА ЗАЩИТЫ ИСПОЛНЯЕМОГО КОДА ОТ ДИНАМИЧЕСКОГО АНАЛИЗА С ИСПОЛЬЗОВАНИЕМ ПЛАТФОРМЕННО ЗАВИСИМЫХ ПОДХОДОВ
Средства противодействия статическому анализу исполняемого кода
Защита х86 ассемблерного кода осуществляется при генерации кода целевой платформы (х86) из кода в формате промежуточного представления LLVM.
Для генерации х86 кода используется кодогенератор, входящий в состав LLVM. Процесс кодогенерации представляет собой несколько проходов по графу потока управления (control flow graph, CFG) программы с заменой команд промежуточного представления на команды х86. Под проходом понимается выполнение основной процедуры экземпляра класса, являющегося наследником класса LLVM Pass. Запуском проходов управляет LLVM Pass Manager.
Для осуществления защиты х86 ассемблерного кода кодогенератор LLVM был дополнен тремя проходами. Первый проход вставляет мусорные инструкции, второй проход вставляет инструкции для метаморфирования кода и третий проход вносит в код полиморфизм. Далее в этой главе представлено подробное описание всех трёх проходов.
Вставка мусорного х86 кода
При вставке мусорного х86 кода происходит запутывание кода, а именно, преобразование исходного текста или исполняемого кода программы в вид, сохраняющий ее функциональность, но затрудняющий анализ, понимание алгоритмов работы и модификацию при декомпиляции. Таким образом, данные инструкции «мусорного» кода позволяют решить следующие задачи:
Вывод из строя автоматов-детекторов.
Борьба со статистическими методами обнаружения: мусор состоит из последовательностей команд, которые встречаются в “легальных” программах.
Увеличивается сложность изучения кода при трассировке файла.
Увеличение элемента случайности в расшифровщике. С «мусором» появляются новые варианты компоновки кода. При этом вставка таких команд имеет так же огромное влияние на размер кода.
Рассмотрим группы «мусорных» инструкций х8б, используемые в нашем протекторе.
1) Зеркальные команды. Последовательное использование данных команд аннулирует изменения, вносимые ими.
Do'stlaringiz bilan baham: |