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