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

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

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

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


...постой, а на что мы будем ее устанавливать?! Уж точно не на функцию GetDocPtr(), поскольку к моменту ее вызова данные уже разрушены. Было бы замечательно брякнуться непосредственно на сам блок памяти и посмотреть, кто его разрушает, но, к несчастью, он выделяется динамически, и его адрес непредсказуем (тем более, как уже отмечалось, сбои происходят в различных местах).

Уж не знаю, чтобы бы мы стали делать, не будь в нашем распоряжении отладочных символов, но ведь они есть! Мы знаем, что блок памяти с падучей структурой данных инициализируются конструктором класса CElement, к которому принадлежит функция GetDocPtr(), поэтому мы должны найти конструктор, установить на него точку останова и следить за всеми создаваемыми объектами. Возвращаемся в IDA Pro, давим <Ctrl-Page Up> для перехода в начало листинга, нажимаем <ALT-T> (поиск в листинге) и пишем "__thiscall CElement::CElement" (так объявляется конструктор по правилам языка Си++). Не проходит и минуты, как IDA Pro находит его по адресу 75AA321Bh (вообще-то отождествить конструктор можно и без отладочных символов, см. "Фундаментальные основы хакерства", электронную копию которых можно бесплатно скачать с ftp://nezumi.org.ru, но на это требуется время, которого у нас нет, а в битве за exploit'ы каждая секунда дорога, так как нужно захватить управление уязвимыми машинами раньше всех остальных, создать огромную армию дронов и почувствовать себя Чингисханом.

Дизассемблерный текст конструктора объекта CElement

.text:75AA321B ; public: __thiscall CElement::CElement(enum ELEMENT_TAG, class CDoc *)

.text:75AA321B ??0CElement@@QAE@W4ELEMENT_TAG@@PAVCDoc@@@Z proc near

.text:75AA321B push esi

.text:75AA321C mov esi, ecx

.text:75AA321E call ??0CBase@@QAE@XZ ; CBase::CBase(void)

.text:75AA3223 mov eax, [esp+arg_4]

.text:75AA3227 mov dword ptr [esi],CElement@@6B@;const CElement::`vftable'

.text:75AA322D mov [esi+10h], eax

.text:75AA3230 inc dword ptr [eax+8]

.text:75AA3233 call ?_IncrementObjectCount@@YGXXZ;_IncrementObjectCount()

.text:75AA3238 mov eax, [esi+18h]

.text:75AA323B mov ecx, [esp+arg_0]

.text:75AA323F xor ecx, eax

.text:75AA3241 and ecx, 0FFh

.text:75AA3247 xor ecx, eax

.text:75AA3249 mov eax, esi

.text:75AA324B mov [esi+18h], ecx

.text:75AA324E pop esi

.text:75AA324F retn 8

.text:75AA324F ??0CElement@@QAE@W4ELEMENT_TAG@@PAVCDoc@@@Z endp

Назад на стр. 090-055-7  Содержание  Вперед на стр. 090-055-9