Доброго дня! снимаю перехват в функции DrvUnload так: Код (Text): __asm { cli mov eax, cr0 mov CR0Reg,eax and eax,0xFFFEFFFF mov cr0, eax } (NtUserSetWindowsHookExPtr )( (void **)(pServiceDescriptorTableShadow[1].Base)[0x225]) = (NtUserSetWindowsHookExPtr )TrueNtUserSetWindowsHookEx; __asm { mov eax, CR0Reg mov cr0, eax sti } получаю бсод Перехват работает нормально, но при восстановлении tue-адреса в таблице... фигня получается. Может с контекстами связано!? Поскажите, что(как) делать. Спасибо!
Вот тут есть рабочий пример перехвата сабжевого адреса SST http://bugtraq.ru/library/programming/.keep/hookguard.zip Там восстановление происходит не в DriverUnload, а через KeInsertQueueApc
retmas Адреса функций выровнены, следовательно операция записи проходит атомарно и нужды в Interlocked-функциях нет. Alisa 1. Желательно привести код бсода, как уже говорили. 2. Желательно не снимать перехваты. 3. Дай бинарник драйвера, перед снятием перехвата поставь int 3, чтоб мне легче было попасть "на место." Только не забудь номер функции определять динамически, а то не факт, что у меня найдется такая же система, как у тебя...
Скорее всего DriverUnload происходит в контексте не GUIшного процесса, отсюда и BSOD. Хотя опять же, как сказали ранее, нужно смотреть...
Что? Ты сам хоть понял что сказал?=) Обращение идет к памяти ядра, к которой у дрова доступ всегда имеется
Да ну? Попробуй обратиться к какой-нить функции из Shadow-таблицы в контексте не ГУИ-процесса. Alisa Я и вправду не вижу в драйвере аттача к GUI-процессу перед установкой/снятием хуков ShadowSDT. Ты уверена, что перехват ставится? Проверь каким-нибудь антируткитом.
Ты видно сам не понял. Указатель на таблицу SST для win32k.sys отражается в адресное пространство только для GUI приложений (остальным экспорт win32k.sys попросту не нужен). Поэтому при попытке модифицировать таблицу, указатель на которую не валидный, система выпадает в BSOD. Если нет уверенности что установка перехвата производится в контексте GUI приложения (например драйвер стартует при запуске системы), необходимо юзать KeAttachProcess/KeDetachProcess.
AntiFreeze В том-то весь и прикол, что у Алисы установка хука идет в DispatchControl, т.е. в контексте вызывающего (GUI) процесса. А вот снятие в DriverUnload, которая выполняется явно не в том контексте. Отсюда и БСОД.