Крутой протектор – не беда Ms-Rem (Ms-Rem@yandex.ru) Спецвыпуск: Хакер, номер #057, стр. 057-056-6 Формируется таблица измененных состояний и зависимостей между ними, после чего производится перегруппировка элементов таблицы таким образом, чтобы независимые элементы находились в одном месте. Далее к таблице применяется метод многопроходной оптимизации, который значительно сокращает число ее элементов. По сокращенной таблице строится цепочка инструкций, соответствующая изменениям, записанным в ней, и эти инструкции компилируются в машинный код. Это один из алгоритмов, которые можно использовать при анализе действительно сложного метаморфа. Можно поступить и по-другому: писать не эмулятор, а трассировщик, анализирующий путь исполнения программы и строящий таблицу изменений на основе этих данных. Как показывает практика, написать полноценный эмулятор чрезвычайно сложно, поэтому приходится комбинировать эти способы. В некоторых полиморфах и метаморфах можно встретить весьма хитрые методы запутывания кода, связанные с нестандартными опкодами инструкций. Большинство современных дизассемблеров и отладчиков могут неправильно дизассемблировать код, содержащий множественные префиксы либо неверное значение в поле Reg байта MOD r/m для Extended группы опкодов. В качестве примера можешь взять байты C7 F0 34 12. Большинство дизассемблеров (IDA в том числе) дизассемблируют это как mov eax, 1234h, а на самом же деле это INVALID OPCODE. Такие инструкции могут использоваться в защите для неявного вызова обработчика SEH, поэтому при создании дизассемблера следует учесть их. Для анализа таких инструкций в качестве образцового можно использовать мой дизассемблер, который лежит диске (если найдешь в моем детище ошибку, обязательно сообщи мне). Качественный метаморф ты можешь найти в ExeCryptor'е. Он имеет большой разброс генерируемых инструкций, самомодифицирующийся код и много SEH. Все это приправлено немалой глубиной морфинга. Декодировать его сложно, но в этом нет ничего невозможного. Попробуй. Анализ виртуальных машин В самых крутых защитах (в частности StarForce 3 Pro) можно встретить следующий прием: часть кода защищаемой программы и самой защиты переводится в псевдокод и исполняется на виртуальной машине. Для полного снятия такой защиты нужно восстановить этот код, а значит, придется исследовать ВМ и разбираться в алгоритмах ее работы. В общем случае ВМ, применяемые в защитах, делятся на два типа: эмулирующие исполнение псевдокода и использующие вызовы функций ВМ из native-кода. В первом случае виртуальная машина получает код операции и по своим таблицам определяет производимые действия. Исполнение псевдокода полностью эмулировано в цикле работы машины. |