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

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

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

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

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

И появился код, размещающий вирус в памяти, вместе с довольно невежливым сообщением... Теперь мы можем продолжить анализ остальной части вируса.
~~\ Перевел Сергей Середа, 1999, Кишинев 24-71-96, /~~
~~\ e-mail: serge_sereda@hotmail.com /~~