Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

Техника отладки

Крис Касперски ака мыщъх

Спецвыпуск: Хакер, номер #057, стр. 057-020-2


Сначала исследуемый файл пропускаем через ИДУ. Затем в меню File выбираем пункт Produce output file->Produce MAP file (причем имя MAP-файла должно совпадать с именем самого дизассемблируемого файла). В появившемся диалоговом окне взводим все три галочки: Segmentation information (информация о сегментах), Autogenerated names (автогенерируемые имена) и Demangle names (размагленные имена). Полученный MAP-файл скармливаем утилите idasym (ее можно скачать с сайта www.idapro.com) и конвертируем в sym-формат. Далее с помощью утилиты nmsym, входящей в комплект поставки SoftIce, sym-файл преобразуем в nms. Уф! Половина работы сделана! Запускаем NuMega Symbol Loader, в его меню File выбираем пункт Open, открываем nms-файл и жмем Module->Load. Появившаяся надпись "Symbols for C:\TEMP\SIMPLE.NMS successfully loaded" говорит о том, что все прошло успешно. Осталось только открыть исполняемый файл (File->Open и Module->Load).

Посмотри на скриншоты и сравни, как выглядит экран отладчика с символами и без них.

Без символьной информации назначение функций 401234h и 401124h совсем не очевидно, и на их отладку можно было бы угробить несколько часов лучших лет своей жизни, а с символами все и так ясно. К тому же символьные имена можно использовать в точках останова, например: "bpx _fgets" (установить точку останова на функцию чтения пароля) или "bmp aMygoodpassword" (установить бряк на код, обращающийся к эталонному паролю).

Точки останова на функции

Точки останова (они же breakpoint'ы или просто бряки) - основное оружие хакера в борьбе с защитными механизмами. Наибольшей популярностью пользуются точки останова на API-функции. Чтение содержимого окна часто (но не всегда) осуществляется функцией GetWindowTextA, открытие файла - CreateFileA, загрузка динамической библиотеки - LoadLibraryA и т.д. С помощью установки бряка на эти функции мы можем локализовать защитный код, заставив отладчик всплывать всякий раз, когда защита пытается сделать что-то нехорошее.

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

Для установки brakepoint'а на какую-нибудь функцию достаточно нажать <Ctrl-D>, и, дождавшись появления отладчика на экране, написать "bpx имя_функции". Однако нужно учитывать, что в SoftIce точки останова носят глобальный характер, и если мы установим бряк на функцию CreateFileA, отладчик будет вылезать при каждом открытии/создании любого файла в системе. Вот радость! Чтобы охладить пыл отладчика, необходимо использовать условные точки останова. Допустим, мы хотим всплывать только на файле "keyfile.key". Открываем MSDN и смотрим прототип CreateFile. Видим, что lpFileName передается в крайнем левом аргументе. Поскольку аргументы API-функций заносятся в стек справа налево, указатель на имя открываемого файла окажется на вершине стека - ниже только адреса возврата.

Назад на стр. 057-020-1  Содержание  Вперед на стр. 057-020-3