首页
社区
课程
招聘
[旧帖] [讨论]PP驱动的双机调试。 0.00雪花
发表于: 2012-10-24 14:54 2255

[旧帖] [讨论]PP驱动的双机调试。 0.00雪花

2012-10-24 14:54
2255
好久以前,就想研究内核,苦于时间有限,只是寥寥草草的看个大概,并不深入。

最近想拿完美的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 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 15
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
在windbg对这个标志位下读取断点,发现,系统会经常读这个标志,也就是说我没法断到我想要的位置,我想请问,windbg有没有类似于ce的那个查看读取此地址的代码的那个功能,不下断,只是显示一下地址,然后继续运行,这样,我就查看是什么地方读取了这个标志位。
2012-10-24 17:20
0
雪    币: 124
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
完美的PP不是那么容易搞的啊
2012-10-29 23:58
0
雪    币: 324
活跃值: (60)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
lz,能否告知一下KdDebuggerNotPresent这个全局变量应该怎么替换吗?
2015-12-17 14:55
0
游客
登录 | 注册 方可回帖
返回
//