Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #90, ИЮНЬ 2006 г.

IE: все по-старому

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

Хакер, номер #090, стр. 090-055-4


Теперь исследуем сбой, относящийся к IEdie2-3, дизассемблерные окрестности которого выглядят так:

Фрагмент дизассемблерного листинга доктора Ватсона, описывающего сбой IEdie2-3

eax=00000000 ebx=000af334 ecx=00000428 edx=01340294 esi=01480007 edi=01481990

eip=75acc4da esp=0006dba0 ebp=0006dbcc iopl=0 nv up ei pl nz na pe nc

функция: <nosymbols>

75acc4bd 60 pushad

75acc4be 8501 test [ecx],eax ds:00000428=?????

75acc4c0 56 push esi

75acc4c1 8bf1 mov esi,ecx

75acc4c3 e8555cfcff call 75a9211d

75acc4c8 668b766c mov si,[esi+0x6c] ds:01efd5de=????

75acc4cc 6685f6 test si,si

75acc4cf 7418 jz DllGetClassObject+0x14b19 (75acd3e9)

75acc4d1 0fb7ce movzx ecx,si

75acc4d4 69c998000000 imul ecx,ecx,0x98

СБОЙ -> 75acc4da 8b8020040000 mov eax,[eax+0x420] ds:00000420=??????

75acc4e0 5e pop esi

75acc4e8 c3 ret

FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name

0006DBCC 75A92F0F 00000001 00000000 0006DC44 000AF23C mshtml!DllGetClassObject

Адрес сбоя совсем другой (75ACC4DAh против 75AD7E2Eh), но библиотека все та же — MSHTML.DLL, да и хронология событий очень похожа на предыдущую. Исключение вызывает инструкция MOV EAX,[EAX+0X420] c регистром EAX, равным нулю, возвращенным функцией 75A9211Dh (см. CALL 75A9211D), которая, по идее, должна возвращать указатель на объект или структуру данных, но не возвратила, так как память была разрушена!

Еще у нас имеется дамп user.dmp, сброшенный IE перед смертью. Дамп можно загрузить в отладчик WinDbg (file -> open crush dump), входящий в состав DDK, однако ничего нового мы не узнаем. Дамп — это мертвое тело, труп программы. Команды трассировки в нем не работают, и все, что мы можем, это просматривать память, стек и регистры, которые мы и так знаем (спасибо отчету доктора Ватсона). Большие перспективы открывает дизассемблирование MSHTML.DLL и живая отладка по месту падения (just-in-time debugging), чем мы сейчас и займемся.

Роем вглубь

Берем файл MSHTML.DLL (он находится в каталоге WINNT\System32) и загружаем его в IDA Pro или другой дизассемблер (но лучше, чем IDA Pro вы все равно ничего не найдете). Michal Zalewski в своем сообщении жаловался на отсутствие исходных текстов, серьезно затрудняющих анализ. Что ж, исходных текстов IE в нашем распоряжении действительно нет, но отладочные символы получить можно. В них содержатся имена всех неэкспортируемых функций и объявления объектов и структур.

IDA Pro 5.0 автоматически сгружает отладочные символы всех системных файлов с msdl.microsoft.com, стоит только сказать: file -> load file -> PDB file. В более древних версиях это приходится делать вручную. Для начала нам потребуется пакет "Debugging Tools for Windows", бесплатно распространяемый Microsoft: www.microsoft.com/whdc/devtools/debugging/. Скачиваем версию для своей операционной системы, устанавливаем, заходим в каталог /bin, находим там утилиту symchk.exe и запускаем ее на следующий манер:

Ручная загрузка символьной информации

Назад на стр. 090-055-3  Содержание  Вперед на стр. 090-055-5
Hosted by uCoz