niufen 发表于 2018-3-4 10:40:09

过64位下TP保护DebugPort清零源码(不用过PG)


    前不久研究了一些32位下各种保护,收获颇多,但是在32位下由于内存限制所以,卡卡的感觉让人很不爽,于是研究了一下64为下的保护。

   测试游戏:JFZR环境:win7 x64

   一:首先是双击调试,我之前发过一篇帖子,总结过双击调试的一些关键变量之类的东西,64位和32位基本想通。
PS:过双击调试的时候要打一下PG的补丁,以为要替换那几个全局变量,还有就是Inline Hook IoAllocateMdl这个函数。这里再贴一下代理函数:
PMDL newIoAllocateMdl(
      __in_opt PVOIDVirtualAddress,
      __in ULONGLength,
      __in BOOLEANSecondaryBuffer,
      __in BOOLEANChargeQuota,
      __inout_opt PIRPIrpOPTIONAL)
{
      if (VirtualAddress == KdEnteredDebugger)
      {
                //DbgPrint(" address: %p\n", KdEnteredDebugger);
                VirtualAddress = (PUCHAR)KdEnteredDebugger + 0x30;
      }
      return oldIoAllocateMdl(VirtualAddress, Length, SecondaryBuffer, ChargeQuota, Irp);
}

    二:双击调试过了之后,开始对关键点下访问断点(全局调试对象权限,DebugPort),发现*P并没有对DebugPort做清零,而是只对全局调试对象权限做了清零处理,难道没有了DebugPort清零?于是自己写了个程序对程序模拟的试了一下DebugPort清零(在未打PG补丁的情况下),结果就是触发PG蓝屏。也就是说64位下如果对DebugPort清零就会触发PG。

但是对全局对象权限的清零并不会触发PG。处理方法就是简单粗暴地用DPC定时器把权限给写回去:

源码:
**** Hidden Message *****

a891822088 发表于 2018-3-14 06:26:54

过64位下TP保护DebugPort清零源码

kriestian 发表于 2018-4-3 21:33:21

这个学习了谢谢

aa526228825 发表于 2018-4-6 13:47:53

111下载过来看看

Wrench 发表于 2018-4-11 11:42:15

学习一下,感谢楼主分享

sz1396262666 发表于 2018-4-11 12:55:12

这个很强大学习了

littlewisp 发表于 2018-5-31 10:03:07

非常感谢,学习学习

baqtdiyc 发表于 2018-6-3 22:52:32

这个必须要学习一下。谢谢

xingzongping 发表于 2018-6-8 23:09:18

:L 回个看看哦

AZHI 发表于 2018-6-8 23:59:03

{:2_26:} {:2_26:} {:2_26:} {:2_26:} {:2_26:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 过64位下TP保护DebugPort清零源码(不用过PG)