Набор статей и руководств по дизассемблеру IDA



Использование языка IDC для анализа зашифрованного программного кода


Использование языка IDC для анализа зашифрованного программного кода





Этот пример показывает, как использовать IDC для дешифрации части программы, во время ее анализа. Для примера взята часть вируса Ripper.

Двоичный образ вируса загружен в IDA и с точки входа запущен автоанализ.

Использование языка IDC для анализа зашифрованного программного кода



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

Использование языка IDC для анализа зашифрованного программного кода



Создадим на IDC небольшую программу, имитирующую подрограмму дешифрации.

static decrypt(from, size, key) { auto i,x; // объявляем переменные for ( i=0; i < size; i=i+1 ) { x = Byte(from); // считываем байт x = (x^key); // дешифруем его PatchByte(from,x); // записываем на место from = from + 1; // следующий байт } }



Сохраним эту программу IDC в файле и нажмем F2, чтобы загрузить ее в интерпретатор IDA.

Использование языка IDC для анализа зашифрованного программного кода



Затем нажмем shift-F2, чтобы вызвать ее с соответствующими значениями. Обратите внимание, что в качестве стартовой точки указан линейный адрес. При нажатии OK программа выполнится.

Использование языка IDC для анализа зашифрованного программного кода



Теперь информация расшифрована



Использование языка IDC для анализа зашифрованного программного кода



Поместим курсор на смещение 0x50 и нажмем C, чтобы указать IDA, что теперь по этому адресу расположен код.

Использование языка IDC для анализа зашифрованного программного кода



И появился код, размещающий вирус в памяти, вместе с довольно невежливым сообщением... Теперь мы можем продолжить анализ остальной части вируса.

~~\ Перевел Сергей Середа, 1999, Кишинев 24-71-96, /~~

~~\ e-mail: serge_sereda@hotmail.com /~~



Содержание раздела