Столкнулся с интересной пробелемой: положим есть два драйвера хукающие некую функцию в SSDT: А (антивирус) и R (rootkit). Драйверы абсолютно независимы один от другого и, в общем случае, даже не знают о существовании "соперника". При установке хуков образуется "цепочка фильтров" функции, причем порядок А и R произволен, т.е., может быть ситуация, что вначале A поставил хук, а R вставил хук перед ним; а может быть и наоборот. Проблема возникает если А и R выгружаутся в неправилном порядке (например во время перезагрузки системы). Возникает ситуация когда вектор SSDT указывает в "пустоту" и BSOD неотвратим. Есть ли какой нибудь способ решить эту проблему?
Ну или как вариант, восстанавливать хуки на выгрузке не на старые адреса, а на оригинальные.. Следовательно не имеет значения, кто после тебя или перед тобой будет снимать хуки, они всегда будут оригинальные
wertyman Не всегда работает. Попробуйте сделать такое с Касперким - получаем на экране отсутствие красной и желтой компоненты цвета.
katrus Они же не должны выгружаться при перезагрузке. Да и снимать хуки обычно не входит в практику A, и уже тем более R =) Вообще при любой манипуляции с хуками стороннего кода надо учитывать его специфику, иногда это не так то просто.
Mental_Mirror То есть можно безопасно предплоложить, что А не имеют привычку выгружать свои драйверы? Другими словами, если R не имплементирует OnUnload - все будет в шоколаде?
Если софт не кривой, то он свои драйвера-хукеры не выгружает, вот и все решение проблемы. А насчет порядка расстановки хуков, то есть другое вытекающее обстоятельство, если А хукает те же функции, что и R, то если А ставит свои хуки позже, хуки R нельзя задетектить, поскольку в SSDT будут указатели на обработчики А.
+1 Если я правильно понял задачу то в системе возможно будут работать одновременно и A и R ещо и независимо. Ну тогда аль руткит грамотно написан то не должен синить екран. Для етого должен ПРЕДУГАДАТЬ наличие А в системе и обязательно установить свои хуки первыми в SSTD и переодически их обновлять дабы к-нибуть хитрый А не сбросил их. Тоесть А никак не должен узнать о наличии R, но R должен заранее предугадать наличия А - сохранять уже существующие адреса. Ну если А неправильно выгрузится (не уст. обработчики) - ето лишь по его вине будет синька... И ето же касается грамотности выгрузки R - пускай не допустит непредугаданной перезагр. системы и выгрузки себя (на то и хуки) иначе синька очень вероятна.
На самом деле проблема несколько проще - R не совсем rootkit. Это вполне легальная программа и нет никаких проблем с тем, что антивирус определяет ее. Единственная проблема - reboot приводит к BSOD
А сам R хукает функцыю ребута системы? Вероятно система просто без предупреждения выгружает его и он не успевает восстановить нужные адреса обработчиков. Или что то не в порядке с DriverUnload в самом R. Сомневаюсь что тут проблема с антивиром. (если он лицензионный конечно )