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 и запускаем ее на следующий манер: Ручная загрузка символьной информации |