首页
社区
课程
招聘
[旧帖] [原创]对抗debugport清0,转移debugport 0.00雪花
发表于: 2012-9-8 15:14 3260

[旧帖] [原创]对抗debugport清0,转移debugport 0.00雪花

2012-9-8 15:14
3260
小弟对这个还不太熟悉。但是多方了解以后知道。debugport是R3调试器必要的一个东西,大概是发送调试消息什么的就靠他了吧

就我的虚拟机系统而言(Microsoft Windows XP Professional 版本2002 Sercive Pack 3)

DebugPort位于进程EPROCESS +0XBC处;
是一个指针。指向一个调试结构

如何对抗清0呢。

第一种是找到清0的代码 NOP之。但是要随着某些东西的更新 而更新NOP的地方,比较麻烦。

既然这样为什么不把DebugPort转移到别的地方呢?

我开始了测试。双机调试
虚拟机打开 notepad
windbg找到 EPROCESS的进程,+0xbc得到 Debugport地址

物理机 ba w4 debugport的地址

得到创建debugport的代码是
nt!DbgkpSetProcessDebugObject+0x6a:
8065cdb1 e86dd2e7ff      call    nt!ObfReferenceObject (804da023)
上面一句就写入了这个地址。
(对应R3的函数是 NtDebugActiveProcess)

看到上面的
8065cdab mov [edi+0xbc],eax
明显 EDI=EPROCESS
        EAX=DebugPort的值

我在这里HOOK  jmp到我的函数。保存DebugPot的数值。

接下来就是无聊的 ba r4  debugport的地址
然后开始测试调试notepad 记录下访问到的地址。
总共有很多个代码访问到了这里。
我清理了以后得到常用的13个地址。(不是所有的都找到了)

这里为方便,我大多是修改代码为 MOV XXX,[我存放debugport地址]
对于访问到DEBUGPORT的地址我都没有JMP,而是直接MOV 所以是有缺陷的。

不再一一列举了

特别注意几点(蓝屏必看)

1 由于代码是硬编码的。
我的虚拟机系统版本是 Microsoft Windows XP Professional 版本2002 Sercive Pack 3
不同版本会BSOD 。不要搞错版本了。

2 我没HOOK前 调试了一个程序,然后加载驱动HOOK。没问题。重启以后 直接加载驱动 结果蓝屏了。。重启。windbg 我跑到我HOOK的地址去看,全部是问号。地址无法访问。所以先要任意调试一个软件。关闭调试程序,。(再跑去看一下,这下那个地址有代码了)。再加载这个驱动才不会蓝屏。我估计是如果没有开始调试过的话,驱动中的某些代码还没有加载到内存中。

3由于只有一个debugport地址,所以一次只能调试一个程序。调试多个程序肯定会出问题的。(也不要在有进程在被调试的时候加载这个驱动)
解决办法是,修改代码。在每个PATCH的地方JMP到自己的处理函数。建立一个链表。依据传递过来的EPROCESS 给对应的DEBUGPORT的值。。我太懒。要写十几个JMP 所以我宁愿一次只调试一个程序。


VC6.0+DDK

有BSOD风险。请谨慎使用。并看清以上红色部分。BSOD造成的损失我不负责啊。

Anti_DbgPort.rar

看片要无码。上看雪要有码啊。求码。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 83
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看得迷迷糊糊 不是很懂
还是支持~
2012-9-8 15:42
0
雪    币: 77
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
mark
2014-4-13 18:48
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主可以说得细细点吗,小菜想学这个呀
2014-4-14 14:03
0
游客
登录 | 注册 方可回帖
返回
//