Здравствуйте. Вот задался вопросом-как определить измененна ли IDT таблица и если изменна, то к какому именно объекту она адресует, т.е. Чтото вроде комманды NTCALL в айсе , только все надо сделать программа. Конечным результатом действия программы должно быь вывод перехватываемых NT функций и указание объекта(exe,dll,drv) в адресное пространство которого происходит переадресация. Заранее благодарен.
Сравнить с оригинальной таблицей, либо проверить обработчик на принадлежность к какому либо модулю, с условием что заранее известно к какому модулю принадлежит оригинальный. Получить оригинальную IDT можно из энтрипоинт ядра, там немного ниже во всей линейке есть код, копирующий IDT: 005DA968 mov esi,ntoskrnl.005EFD54 005DA96D mov ecx,800 005DA972 shr ecx,2 005DA975 rep movs dword ptr es:[edi],dword ptr [esi] 5EFD54 - Это указатель на IDT. Отнимаем от него из опционального заголовка адрес загрузки и получаем RVA IDT.
Адрес не обязательно может принадлежать какому-то драйверу, если речь идет о загруженных драйверах то пройтись по PsLoadedModuleList там есть ImageBase и SizeOfImage, соотвественно проверить на вхождение, если просто нужно найти образ то идти вверх от адреса пока не упремся в MZ/PE, но заголовка может и не быть.
Но из PlLoadedModuleList можно и удалить драйвер,и при этом всё будет работать,все функции и потоки сохраняться. что в такой ситуации делать?
Не понятен вопрос и вообще к чему это. А что тебе нужно сделать?, если определить к какому модулю принадлежит обработчик в IDT то я описал варианты как это можно сделать.
посмотреть какай секция промаппирована по данному адресу, тобишь получить указатель на объект секция. а дальше, если эта секция содержит образ загруженного дрова, то pSection->Segment->ControlArea->FilePointer->FileName. поидее должно сработать