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

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

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

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


set src=C:\WINNT\SYSTEM32\MSHTML.DLL

symchk %src% /s srv*.\*http://msdl.microsoft.com/download/symbols –v

Программа лезет в сеть, возбужденно подмигивая огоньками модема, и вскоре (или не вскоре — это уж от твоего канала зависит!) на диске образуются два новых каталога: .\mshtml.dbg\38D12257243000 с файлом mshtml.dbg и .\mshtml.pdb\38051D9A2 c mshtml.pdb, c размерами 2,8 Мб и 2,1 Мб. На самом деле, файлы передаются в сжатом виде, поэтому реально скачивается всего ~1,5 Мб. Ну, dbg-файл нам совершенно неинтересен (там содержатся адреса машинных команд, соответствующие номерам строк исходных текстов, которых у нас все равно нет), а вот pdb мы сейчас и загрузим в IDA Pro вместе со всей символьной информацией, которой решила поделиться с нами Microsoft. Перед этим рекомендуется скопировать динамическую библиотеку dbghelp.dll из Debugging Tools в коревой каталог IDA Pro, иначе плагин pdb.plw может не сработать.

Но прежде чем загружать символы, перейдем на место сбоя и посмотрим,как выглядит оригинальный дизассемблерный текст. Нажимаем <G> (goto) и вводим адрес "75ACC4DA", сообщенный доктором Ватсоном. Мы оказываемся в уже знакомой нам процедуре, вызывающей безымянную функцию 75A9211Dh, о назначении которой пока можно только гадать:

Дизассемблерный текст до загрузки символьной информации

.text:75ACC4C0 sub_75ACC4C0 proc near

.text:75ACC4C0 push esi

.text:75ACC4C1 mov esi, ecx

.text:75ACC4C3 call sub_75A9211D

.text:75ACC4C8 mov si, [esi+6Ch]

.text:75ACC4CC test si, si

.text:75ACC4CF jz short loc_75ACC4E9

.text:75ACC4D1 movzx ecx, si

.text:75ACC4D4 imul ecx, 98h

.text:75ACC4DA mov eax, [eax+420h] ; место сбоя

.text:75ACC4E0 pop esi

.text:75ACC4E1 lea eax, [ecx+eax-98h]

.text:75ACC4E8 retn

.text:75ACC4E9 ; --------------------------------------------------

.text:75ACC4E9

.text:75ACC4E9 loc_75ACC4E9:

.text:75ACC4E9 mov eax, offset unk_75C8D1A0

.text:75ACC4EE pop esi

.text:75ACC4EF retn

.text:75ACC4EF sub_75ACC4C0 endp

.text:75ACC4EF

После загрузки символьной информации (file -> load file -> PDB file) листинг радикально преображается, и мы получаем вполне осмысленные имена:

Тот же дизассемблерный текст после загрузки символьной информации

; struct INSTANTCLASSINFO * __thiscall COleSite::GetInstantClassInfo(void)

.text:75ACC4C0 ?GetInstantClassInfo@COleSite@@QAEPAUINSTANTCLASSINFO@@XZ proc near

.text:75ACC4C0 push esi

.text:75ACC4C1 mov esi, ecx

.text:75ACC4C3 call ?GetDocPtr@CElement@@QBEPVCDoc@@XZ;CElement::GetDocPtr()

.text:75ACC4C8 mov si, [esi+6Ch]

.text:75ACC4CC test si, si

.text:75ACC4CF jz short loc_75ACC4E9

.text:75ACC4D1 movzx ecx, si

.text:75ACC4D4 imul ecx, 98h

.text:75ACC4DA mov eax, [eax+420h] ; место сбоя

.text:75ACC4E0 pop esi

.text:75ACC4E1 lea eax, [ecx+eax-98h]

.text:75ACC4E8 retn

.text:75ACC4E9 --------------------------------------------------

.text:75ACC4E9

.text:75ACC4E9 loc_75ACC4E9:

.text:75ACC4E9 mov eax, offset ?g_ciNull@@3UCLASSINFO@@A ;CLASSINFO g_ciNull

.text:75ACC4EE pop esi

.text:75ACC4EF retn

.text:75ACC4EF ?GetInstantClassInfo@COleSite@@QAEPAUINSTANTCLASSINFO@@XZ endp

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