-
-
[原创]过某p反双机调试,目标游戏fkxd.
-
发表于:
2015-6-1 11:39
8177
-
写东西我真的不会啊,有些细枝末节,我真的讨厌讲所以有不明白的大家加我,QQ,2386847899。本人属于三无之人,有的是时间,求收留。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
我就简单说说,检测的地方都有哪里。。。。
1. KiDebugRoutine ,KiDebugRoutine是函数指针,内核调试引擎的异常处理回调函数指针。当内核调试引
擎活动时,它指向KdpTrap函数,否则指向KdpStub函数。
2.KdDebuggerEnabled ,kdDebuggerEnabled变量不停的清零,清零的代码还做了检测,所以意味着不能轻易
修改*P的代码, kdDebuggerEnabled是windows全局变量,用来标识内核调试是否被启用
3.KdEnteredDebugger ,这也是用来标识内核调试是否被启用。
下面就来说说解决办法,对于第一个,既然检测KiDebugRoutine指向的函数,所以我们直接改他的函数他就
是over,所以我们可以想想从,它指向的函数的内部绕过,我用的是hook,KdpStub函数的办法,首先还没
开游戏之前咱们载入驱动,驱动怎么写,很简单,就是hook KdpStub 函数头,直接跳到,KdpTrap,因为我
们是debug模式启动,这时候,我们就把KiDebugRoutine指向的地址改为,KdpStub,然后我们下断点,发现
,依然可以正常使用。
第二个,我还是看别人的文章的,就是替换变量,简单讲就是哪里用到KdDebuggerEnabled,的时候我们就
,改为我们自己驱动的变量,然后,我们给值为1,但是,往哪里找到呢?,既然我们是调试,我们直接在
属于调试范畴的函数里面找,就在 KiDispatchException 这个函数里,总共有四处,我就懒得找了。
第三个,其实就是个标志,直接改为0,就行了。
这三处搞完,就可以吗?答案是,no。
大家可以想想,再看下面的解答。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。
好了,KdpTrap这个函数真是个阴险狡诈之徒,背着我们一直调用KdEnterDebugger对KdEnteredDebugger 变量清零,所以,解决上面的就可以双机调试了
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!