首页
社区
课程
招聘
[旧帖] [求助]请问如何反调试驱动程序? 0.00雪花
发表于: 2008-1-3 10:35 4206

[旧帖] [求助]请问如何反调试驱动程序? 0.00雪花

2008-1-3 10:35
4206
已知:
    没有驱动程序的源代码,但是想知道这个驱动程序的功能,所以需要反调试。现在知道他是一个驱动PCI卡的程序,IDA后发现,在DriverEntry()里, 为
AddDevice ,
DriverUnload ,
DriverStartIo ,
MajorFunction[IRP_MJ_CREATE] ,
MajorFunction[IRP_MJ_CLOSE] ,
MajorFunction[IRP_MJ_WRITE] ,
MajorFunction[IRP_MJ_READ] ,
MajorFunction[IRP_MJ_DEVICE_CONTROL] ,
各例程传递了相应的回调函数地址。最后retn 8;
目的及问题:
    想得知MajorFunction[IRP_MJ_CREATE] 例程做的事情,但是无法跟进这个例程的回调函数。
我的尝试:
   1.使用Syser Debug直接加载,然后只能进入DriverEntry(),一步步最后就retn 8了。
   结果:
         一直跟到退出,无法跟进回调函数中去。

   2.打开Syser Debug,但是不加载,然后修改驱动程序,在MajorFunction[IRP_MJ_CREATE] 例程的回调函数加了一个int3断点,然后执行启动驱动程序的应用程序(想法:当执行CreateFile()函数时就会触发MajorFunction[IRP_MJ_CREATE] 例程回调函数的调用,运行到我添加的int3处便可以断下来,然后被Syser Debug捕捉到,然后将代码恢复,继续调便可以调试这个例程的回调函数,得知他做的事情了.但是 ...)
   结果:
      我有启动驱动程序的应用程序的源码(自己写的),单步调发现:在StartService()时出错,然后GetLastError()得知提示:不可用的驱动。然后我将int3(机器码:CC)的代码修改为nop(机器码:90)重新执行我的应用程序,这时便顺利启动了驱动程序,但是因为没有了int3断点,又无法使调试器Syser Debug跟进MajorFunction[IRP_MJ_CREATE] 例程的回调函数中。而且我发现,只要驱动程序中无论任何地方出现int3,那么应用程序StartService()都会报错说不可用的驱动程序,难道驱动程序中不能出现int3,如果真的不能的话,那么如何反调试驱动程序的回调函数呢?
最后:
      无奈,求助!
期盼:
     请懂得相关知识的您给于赐教,感激不尽!!!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
??????????我是菜鸟。。不过调试驱动似乎更适合用SOFTICE
2008-1-3 13:12
0
游客
登录 | 注册 方可回帖
返回
//