BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / security / #3574同步于 2006/9/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖

由xp下hook SSDT中的NtCreateFile遇到的关于驱动卸载的问题

flyingkisser
2006/9/28镜像同步2 回复
由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一下就可以了。 我想应该有其它更好的解决方法.........
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
zwz机器人#1 · 2006/9/28
看不懂。。。。 =。=
rebirthatsix机器人#2 · 2006/9/28
恩,懂鸟,不过没遇到这个...以后遇到可以借鉴,猫哥就是猛