Можно ли как нить "спрятать" драйвер, так чтоб его не было в списке установленных драйверов, чтоб его нельзя было тривиальнум образом остановить и выгрузить. Например для пользовательских процессов подобного можно добится перехватив скажем ZwQuerySystemInformation, ZwTerminateProcess, ZwOpenProcess и их друзей. А вот как сделать что-то подобное для драйвера?
EP_X0FF Да, верно, это игра в кошки мышки. Но если потратив несколько дней я смогу добится защиты против "дурака" или заставлю профессионала повозиться хоть час - для конкретного проекта над которым я работаю это стоит вложенных усилий.
Как только ты начнешь прятать драйвер ты сразу же столкнешься с различными проблемами в плане совместимости. Может вместо прятанья драйвера его лучше залочить на диске, а имя отрандомить?
А как ты выгрузишь драйвер, который этого не поддерживает? Это чревато бсодом изза неосвобождения таких ресурсов, как засплайсенные функции, подмененные адреса и т.п. Они будут указывать на выгруженный драйвер, что неминуемо ведет к бсоду. Чтобы выгрузить дров, нужно его реверсить и самому писать драйвер_анлоад, которая подчистит все за ним, если это возможно. Например считает оригинальный код засплайсенных функций с диска
katrus В твоем случае в драйвер анлоад надо ввести функцию для проверки, чем была инициирована выгрузка. В связке приложение+драйвер это будет очень легко сделать.
EP_X0FF Да я так и сделал. В принципе, для меня решение с DriverUnload удовлетворительное. Простое и дуракоустойчивое.