白菜 DebugPort 全分析收集 加研究日记
现在多数程序为了防止调试。基本上都用到了驱动HOOK 内核API。
至于绕过那些HOOK,基本上大家应该已经是没有什么问题了。
估计像我这样的菜鸟也不算多了。研究DebugPort 清0,倒是难倒了我。。。
所谓DebugPort 清0,就是向 EPROCESS->DebugPort 不停写入 NULL(0)值。。让调试器无法收到调试信息。。。
现在能找到的资料也不算多。。。也许是因为解决方法一旦公布出来,从而导致程序升级。
就现在能找到的资料来谈谈;
1:通过修改调试相关函数,修改DebugPort端口,指向EPROCESS结构中的其它成员,大多数驱动已经有监视了。
2:NOP掉程序驱动中清0函数和监视函数,需要分析程序驱动。
3:修改EThread->Process 指向自定义结构,程序驱动如果也是这样访问的DebugPort此方法都无效了。
4:HOOK 缺页异常然后把eprocess弄成invalid然后自己处理,此方法本菜鸟没试过,因为本菜鸟还不知如果HOOK 缺页异常,能找到的资料甚少。也希望有大牛们能指点一二。
5:用WRK自己编译内核ntoskrnl.exe,改造EPROCESS结构。。。此法只能用于 XP64和2003SP1.
暂时本菜只了解到这些方法,本菜才疏学浅,至今自己也没想出别的解决思路。。。
下面说下本菜用第一种方法在 WIN7下的研究。。
因为网上资料大多数为XP系统的。所以自己分析了一下WIN7 调试相关函数。
本菜用的双机调试,至于如何双机调试网上资料很多。就不在赘诉。
打开虚拟机,打开一个程序。如 LoadSys.exe
之后本机打开Windbg通过串行端口连接虚拟机。
lkd->!process 0 0 LoadSys.exe
得到LoadSys.exe 的EPROCESS地址如。0x87654321
lkd->ba r4 0x87654321+0xec (WIN7上DebugPort 偏移为 0xec,可以通过lkd->dt nt!_eprocess,查看。)
上一句下了访问断点。。之后进入虚拟机,打开一个OD。附加LoadSys.exe..这时虚拟机就会断下来。我们来看看调用了哪些函数。。
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
