返回信息流由xp下hook SSDT中的NtCreateFile遇到的关于驱动卸载的问题
问题的来源:本来在win2k下hook过这个函数,然后写了一个console下的filemon,
还挺好用,最近换在xp下面调试,运行这个程序,然后蓝了。大概看了一眼代码,觉得没有问题,
然后想到是不是cr0的WP被置位,然后注册表中的EnforceWriteProtection被设置为1
,然后碰巧这段数据被read only了,于是在内核的hook处加了int 3,重新编译,运行,
断在此处,单步运行,修改SSDT中的这个函数的地址,并没有异常,然后F5,正常。
于是去掉int 3,编译,执行,前面闪过程序输出的关于文件创建的几行信息,然后再
次蓝掉。
重启完,用kd分析dump文件,发现异常出在我自己的NtCreateFile的内部,也就是
函数开始地址的不远处,但这块内存已经无效了,我想很正常啊,因为程序停止时,
会自动把这个驱动卸载掉,但为什么会在这出问题呢?
嗯,因为我的代码是这样的结构:
-------------------------------------------
installhook();
for(true)
{
Output_Something();
break condtion;
}
uninstallhook();
--------------------------------------------
比如,线程A运行于我的NtCreateFile,只运行了前几个指令,被切换到我的线程
,我的线程执行了uninstallhook,我的驱动被卸载,同时所在的内存被收回即变
为无效,cpu切换到线程A,但这时eip指向的地址已经无效了,异常,BSOD。
嗯,解决也很简单,uninstall前sleep一下就可以了。
我想应该有其它更好的解决方法.........
这是一条镜像帖。来源:北邮人论坛 / security / #3574同步于 2006/9/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖
由xp下hook SSDT中的NtCreateFile遇到的关于驱动卸载的问题
flyingkisser
2006/9/28镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。