Доброго времени суток! Примерно такая тема уже как то поднималась как то, но всё же не совсем та.... Зная адресс внутри драйвера(например адресс обработчика какой нить апи) можно получить информацию об этом драйвере(например ПОЛНЫЙ ПУТЬ К ФАЙЛУ), например вызовом (ZwQuerySystemInformation с классом SystemModuleInformation) и существуют программы реализующие эту технологию (например AVZ) Вопрос: А из каких структур такая информация может быть получена?
ну так в чём проблема, сам же написал как) вызывай себе ZwQuerySystemInformation с классом SystemModuleInformation, и смотри, если адресс будет больше, чем базовый_адресс_модуля, и меньше, чем базовый_адресс_модуля + его_размер, значит нужная ф-ция находится внутри него
2 fr0b-p БИГ сэнкс, исчерпывающий ответ, это всё что было нужно. по этому запросу нашлась страница: http://alter.org.ua/ru/docs/nt_kernel/procaddr/ - там вся нужная инфа
Только вот ещё какой вопрос, кому нибудь известно зачем ещё и кем используются эти таблицы (которые из LDR_DATA_TABLE_ENTRY'ов) кроме получения информации о драйвере. Как может отразится удаление из этой таблицы структуры какого нибудь драйвера?
"Как может отразится удаление из этой таблицы структуры какого нибудь драйвера?" - попробуй, если прокатит сообщи. Для начала оставь структуру как есть а измени только ассоциативные списки, это должно быть менее губительно. P.S. http://www.wasm.ru/print.php?article=wayround
>> это ответ на какой вопрос? какой из ответов? там их 2 первый - на многие вопросы что у тя возникнут при дивелопменте совта такова рода а в продакшн такой ахтунг конечно низя... в теории :о) второй - возможная альтернатива тому что хошь зделоть ты статья wayround немного не про то
ладно я поковыряюсь, чуть позже сообщу что получилось. конечно не про то, но это не значит что там не оказалось того что было нужно единственное остался открытым вопрос: "кто ещё и с какой целью юзает эти таблицы"
- вот нашел: 1. PsaEnumerateProcessModules(HANDLE ProcessHandle, PPROCMOD_ENUM_ROUTINE Callback, PVOID CallbackContext) 2. ListUserModules(PPEB peb) -> используется в IsModuleLoaded(LPSTR p) -> возвращает PDEBUG_MODULE 3. LdrpInit(PCONTEXT Context, PVOID SystemArgument1, PVOID SystemArgument2) 4. RtlpQueryRemoteProcessModules(HANDLE ProcessHandle, PRTL_PROCESS_MODULES ModuleInformation, ULONG Size, PULONG ReturnedSize) В основном для перечисления и получения информации о модулях, а также при его создании, по этим данным некоторые функции проверяют присутствие модуля (IsModuleLoaded). На что это конкретно влияет непонятно.
Lord_De_Seis FU rootkit изменяет ассоциативные списки, и ничего, работает. ИМХО никак, станет невидимым для ZwQuerySystemInformation и т.п. Только вопрос, нафиг это надо? руткит чтоли пишешь
Сейчас я пишу не руткит но это вещь мне пригодится. Действительно FU удаляет из этих списков.... мне почему то всегда казалось что он удаляет другую структуру (которая из каталога первичного пространства имен) и какую такую функцию?
прикольно, выходит можно убрать драйвер из списка просто убрав эту структуру (в смысле из ассоциативного списка), без перехватов, а есть софт который нетока обнаружит но еще и удалит такой драйвер?
Вообщем ура... Полуфинал АСМ прошёл, зачёты зданы, сессия сдаётся потиху теперь можно сново дурью помаятся... Вообщем со структурой той вот что: Код (Text): typedef struct _LDR_DATA_TABLE_ENTRY { LIST_ENTRY LoadOrder; LIST_ENTRY MemoryOrder; LIST_ENTRY InitializationOrder; PVOID ModuleBaseAddress; PVOID EntryPoint; ULONG ModuleSize; UNICODE_STRING FullModuleName; UNICODE_STRING ModuleName; ULONG Flags; USHORT LoadCount; USHORT TlsIndex; union { LIST_ENTRY Hash; struct { PVOID SectionPointer; ULONG CheckSum; }; }; ULONG TimeStamp; } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; 1) Есть там поле "FullModuleName" меняй, пиши туда любые гадости - всё работает. 2) Есть три LIST_ENTRY (LoadOrder, MemoryOrder и InitializationOrder) ZwQuerySystemInformation - будет искать драйвер используя LoadOrder... а)Но простое удаление из списка LoadOrder влечёт за собой не стабильную работу системы - то есть всё работает но потом запускаешь какой нибудь firefox и.... б)Удалив структуру из списков LoadOrder, MemoryOrder получим тот же эффект в)Удалив из InitializationOrder... сразу BSOD 3) Но в FU всё палит....
Так может всё таки кто нибудь знает как корректно удалить из списка структуру? И почему нельзя её удалять просто нахаляву?