首页
社区
课程
招聘
[求助]请问如何反调试驱动程序?
发表于: 2008-1-3 16:13 8281

[求助]请问如何反调试驱动程序?

2008-1-3 16:13
8281
已知:
    没有驱动程序的源代码,但是想知道这个驱动程序的功能,所以需要反调试。现在知道他是一个驱动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
支持
分享
最新回复 (4)
雪    币: 135
活跃值: (226)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
2
“反调试”?应该叫“调试”吧?

如果这个SYS没加壳,你可以在IDA里找到要中断的代码的偏移量,然后在SYSERDEBUGGER里有个指令查看当前所有驱动的信息,具体指令叫什么忘了,找到你要调试的驱动的SYS的基地址,加上偏移,就是你要下断点的代码的内存位置,然后直接下断点就行了
2008-1-3 20:11
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=dncwbc;399759]已知:
    没有驱动程序的源代码,但是想知道这个驱动程序的功能,所以需要反调试。现在知道他是一个驱动PCI卡的程序,IDA后发现,在DriverEntry()里, 为
AddDevice ,
DriverUnload ,
DriverStartIo ,
MajorFunction[IR...

结果:
      我有启动驱动程序的应用程序的源码(自己写的),单步调发现:在StartService()时出错,然后GetLastError()得知提示:不可用的驱动。

[/QUOTE]

驱动修改后要修改一下头部的checksum值,可以找个PE工具,否则加载会提示Driver Invalid
2008-1-4 00:26
0
雪    币: 170
活跃值: (116)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
非常感谢Aker的解答,我按照您说的做了,吧CheckSum修改了,这个时候的问题是我只要运行到StartService()那么机器就重新启动了。如果是打开Syser的话,运行到StartService()就蓝屏了。怎么回事呢?我在虚拟机里面做的。。。
2008-1-4 11:11
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
5
驱动本身可能有反调手段,另外也可能修改后出现了错误
你可以用一个开源工具叫 kmdmgr来加载驱动测试,不需要自己写代码
可以只register,不run,另外你可以用ida,或windbg看看代码到底怎么做的。
2008-1-4 12:54
0
游客
登录 | 注册 方可回帖
返回
//