-
-
[旧帖]
[讨论]PP驱动的双机调试。
0.00雪花
-
发表于:
2012-10-24 14:54
2256
-
[旧帖] [讨论]PP驱动的双机调试。
0.00雪花
好久以前,就想研究内核,苦于时间有限,只是寥寥草草的看个大概,并不深入。
最近想拿完美的PP为例子学习,据说很简单
,可是我竟然调试都调试不了。
我的调试环境是笔记本(主机)+台式机(被调试机),之间用1394连接。软件用的windbg
刚开始我在被调试机为调试状态的时候,运行游戏,游戏直接重启。因为以前看过类似的文章,我首先想到了kddisabledebugger这个函数。重新启动之后,下bp断点,发现PP并没有执行这个函数,又重启进入非调试状态,运行游戏之后,并没有任何异常。
由此我判断PP会在开始的时候判断当前系统是否为调试状态。这样,我就想到了系统的调试状态与非调试状态的转换。
搜索了相关资料(看雪有)后发现,系统调试状态与非调试状态主要是有kddebuggerenabled,以及kddebuggernotpresent这两个内核的全局变量以及kidebugroutine这个函数指针这3点决定着。
于是写了一个小代码。将系统转换一下,很遗憾,自己不会定位kddebuggerenabled以及kidebugroutine这两个的地址(想请教一下高手这里如何定位)。kitrap的地址也不会获取。
抱着试一试的态度,只改了kddebuggernotpresent这个标志位。发现,PP驱动在调试状态下可以启动了。
可能,PP驱动只是在启动的时候读取一下这个标志位,即可判断当前系统是否为调试状态。
现在问题是,在PP启动完成以后,我将这个标志位改回。主机与被调试机又可以正常的通讯了。
但是因为PP HOOK了3号中断,那么在windbg里面下断之后,继续运行,被调试机重启。(不知道是不是因为PP HOOK了3号中断,看中断流程上,被调试机如果不在调试状态,执行了int3之后,直接进入PP的3号中断,如果被调试机在调试状态的时候,执行3号中断,主机进行相应之后,异常不是就不进入PP的3号中断了吗?那为什么这里会重启呢?
到点上班了,晚上回来继续提问。希望能有高手给指点迷津。
[课程]Linux pwn 探索篇!