Получение "имени" модуля. Здравствуйте ! Попрбую обрисовать ситуацию. WinXP SP2 (возможно SP3 - компьютер не мой) Внешнее проявление: Среди модулей, возвращаемых ZwQuerySystemInformation(SystemModuleInformation, ...) имеется один, имя которого "затерто" пробелами. (Если вызвать ZwQuerySystemInformation в kernel mode) - результат тот же. Т.е. нам известен только его BaseAddress (ну и размер образа). Подскажите, пожалуйста, как можно получить "настоящее имя" этого чуда природы ? Хотелось бы познакимится с ним поближе, ну и прибить гада Алгоритм решения может быть как для user mode, так и для kernel mode. (Работаем под Delphi, если это важно) P.S. Если ловить будем из режима ядра, то посьба учтывать, что в этой области я делаю только первые шаги. P.S.S. Хотелось бы это сделать своими руками, а не при помощи сторонних утилит. (Их буду использовать если самолапно не смогу решить задачку)
Из PEB модуля можешь найти его полный путь допустим. Можешь попробовать так: http://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx А для подстраховки поставь ProcessExplorer Руссиновича (хотя от него можно легко скрыться, то есть не факт, что он покажет ожидаемый результат)
TermoSINteZ Автору нужно ядерные модуля искать, PEB не причём. Нужно найти связанную с проекцией секцию, далее из обьекта секции извлечь связанный с ней файл и имя.
Допустим, из объекта секции я смогу вытащить нужное (на сто процентов не уверена). А как мне найти связанную с проекцией секцию ?
как вариант дополнительно отсканить ветку реестра \СurrentControlSet\Services\ на предмет "левых" ImagePath
Еслибы можно было перечислить все обьекты в ядре. Это сложная задача, вобщем я полностью не знаю как реализовать. Вот суть: Код (Text): SECTION_OBJECT->SEGMENT<->CONTROL_AREA->FILE_OBJECT->SECTION_OBJECT_POINTERS+ ^ | +--------------------------------------------+ http://gl00my.chat.ru/nt/mem.txt http://gl00my.chat.ru/nt/ob.txt Базы данных хэндлов ни какого отношения к обьетам в данном случае не имеют, ибо описатель закрывается после маппинга. Нужно пождумать.
Очень вероятно, что он прехватывает подобные попытки, да и как по имени узнать левое оно или нет ? А как работает ZwQuerySystemInformation(SystemModuleInformation, ...) ? Я к тому, что может попробовать исакть секцию аналогичным способом ?
Riply SystemModuleInformation перечисляет модуля в списке загрузчика, там имена описаны. Если дров скрывает себя в этом списке, то весьма вероятно что его тело находтся в памяти не в виде проекции. Подобное находится посредством отладки загрузки оси.
да, да, да... прям дровы пошли что писец, полвенды под перехватом держут, спасу нет! Riply попробуй снять лог хотябы простейшим скриптом http://pastebin.com/f27595ee8 , оч. интересно былобы посмореть =)
bugaga это просто слишком лучше глянуть стоят ли хуки на реестр, если стоят то снять, а патом уже смотреть что грузиться.
ааа.. вот еще хороший код скрипта http://pastebin.com/f610e0b14 , юзает NtQuerySystemInformation(DRIVER_INFORMATION выводит список загруженого добра с довольно подробные путями. вот к примеру какой у меня результат : http://pastebin.com/f77edaef4
Если стоят, то вряд-ли из user-mode Насколько я понимаю, ZwQuerySystemInformation(SystemModuleInformation, ...), с которой я начинала, - то же самое Пока, решила попробовать повозится с таблицей Handle`ов (EPROCESS.ObjectTable). Чем черт не шутит - вдруг получиться Конечно, есть интересная ф-ия ExEnumHandleTable, но скорее всего бегать по этим таблицам придется вручную.
ахха... кстати надеюсь боле-менее корректный вариант http://pastebin.com/f1f10746a по выводу SystemModuleInformation (нежели предыдущий, немецкий транслит с индийских плюсов (я просто в ужосе). описания структур брал из include\ddk\ntapi.h от MinGW ну а так да.. что Nt что Zw один хрен все пути идут в ntoskrnl.exe Have a nice day! ^_^
ну а как тогда ты собралась делать? если там руткит уровня ядра, тебе в любом случае работать р0, отсюда юзать либо сторонний софт или курить исходники которые найдешь в интернете.