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 |