首页
社区
课程
招聘
[旧帖] [原创]过TP双机调试 0.00雪花
发表于: 2013-12-6 10:28 4312

[旧帖] [原创]过TP双机调试 0.00雪花

2013-12-6 10:28
4312
本文纯属于技术交流,请不要拿去干伤天害理,尤其不能干有损企鹅之事,否则本人概不负责,,来源于网络,还之于网路,废话不多说,没驱动基础的和大牛们飘过(2013-12-6)
  原理:企鹅干掉了全局变量KdDebuggerEnabled,KiDebugRoutine,2函数KdSendPacket,KdReceivePachet恢复即可
1:kdDebuggerEnabled:
   地址获取:
extern PBOOLEAN KdDebuggerEnabled;
   调试状态:*(PBYTE)KdDebuggerEnabled=0x01;
   禁止调试:*(PBYTE)KdDebuggerEnabled=0x00;
就这么简单
2:KiDebugRoutine:写入函数地址KdpStub(禁止) /KdpTrap(调试)
   思路就是在KdpStub函数头写入KdpTrap地址(本人采用特征码暴力搜索内核函数地址法获取2函数地址)
                EnMem(true);//去内存保护
                RtlCopyMemory(SaveStub,(PBYTE)KdpStub,6);//保存6bytes
                                *pKdDisableCount--;//恢复事要++
                *(PBYTE)(KdpStub+5)=0xc3;//写入retn
                *(PBYTE)KdDebuggerEnabled=0x01;//开启调试变量
                EnMem(false);//开内存保护
                WriteJump((PVOID)KdpStub,(PVOID)KdpTrap);3://写入JMP指令跳到KdpTrap
3:hook企鹅自己实现的KdSendPacket/KdReceivePacket
   在其retn 10/retn 14两地址处写入JMP指令跳回到正常函数就可以让WinDug收到调试信息,后面当然要写入retn 10或retn 14(堆栈平衡),当然恢复时要和原来一样,最简单的办法是绕过TP的KdSendPacket/KdReceivePacket,采用绕过的办法TP是没法检测的
只要上面3步就可以双机调试了,亲测绝对能调试
4:备注,后面我没仔细分析了,有可能有CRC校验,还有INT 2D,INT 3都是线程检查调试状态,我采用的方法是摘除TP所有映像回调,内核定时器,用户层定时器回调,阻断其检查(网上源码多如牛毛)
5:最后有一个线程(大概5分钟一次)专门负责检查调试器状态,跟一下就知道了,在其头部retn作废它就OK了
修改步骤是:在游戏加载完毕才修改,虽然TP禁止了调试,只要修改了,则又可以调试了
思路最重要,为了防止TP打击,不传源码了,哪里不懂的可以交流.呵呵

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 189
活跃值: (253)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错,tp双机调试是这么干掉的没错,我有点糊涂的是那个摘除内核函数的映像回调是干吗用的。内核的CRC校验线程也能摘除吗?

能加个QQ交流一下吗?
2013-12-9 18:04
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
实际上只要3步就搞定了,网上的代码几乎全部作废
1:恢复Kdcom:kdSendPacket/KdCom:KdReceivePacket(绕过法)
   内核暴力搜索Nt!KdSendPacket/Nt!KdReceivcePacket地址,写入JMP跳到正常的kdcom:kdsendpacket
2:在KdStub头部写入JMP,跳到正常的KdTrap
3:extern PBOOLEAN KdDebuggerEnabled;
   调试状态:*(PBYTE)KdDebuggerEnabled=0x01;
   禁止调试:*(PBYTE)KdDebuggerEnabled=0x00;
  自己写入就可以了
没有其他了,就3步就可以稳定调试了,TX去掉检测了,
2013-12-13 17:20
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
回复2楼的朋友,所有内核,应用层的线程都可以停止掉的,自己试试就知道了(插入APC结束线程,很简单)
2013-12-13 17:24
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
有个检查线程在TesSafe.SYS(一共2个线程),注意多次重复加载游戏,TesSafe.sys并不卸载,还在工作中
2013-12-13 17:41
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
对这两个线程任何操作都会重启。。。
2013-12-14 18:54
0
雪    币: 3389
活跃值: (1525)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我也想研究,标记一下,谁可以带带我
2013-12-17 22:30
0
游客
登录 | 注册 方可回帖
返回
//