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