-
-
[旧帖]
[原创]对抗debugport清0,转移debugport
0.00雪花
-
发表于:
2012-9-8 15:14
3260
-
[旧帖] [原创]对抗debugport清0,转移debugport
0.00雪花
小弟对这个还不太熟悉。但是多方了解以后知道。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期)