看流星社区

 找回密码
 注册账号
查看: 37279|回复: 115

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

[复制链接]

该用户从未签到

发表于 2018-3-4 10:40:09 | 显示全部楼层 |阅读模式

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

     测试游戏:JFZR  环境:win7 x64

     一:首先是双击调试,我之前发过一篇帖子,总结过双击调试的一些关键变量之类的东西,64位和32位基本想通。
PS:过双击调试的时候要打一下PG的补丁,以为要替换那几个全局变量,还有就是Inline Hook IoAllocateMdl这个函数。这里再贴一下代理函数:
  1. PMDL newIoAllocateMdl(
  2.         __in_opt PVOID  VirtualAddress,
  3.         __in ULONG  Length,
  4.         __in BOOLEAN  SecondaryBuffer,
  5.         __in BOOLEAN  ChargeQuota,
  6.         __inout_opt PIRP  Irp  OPTIONAL)
  7. {
  8.         if (VirtualAddress == KdEnteredDebugger)
  9.         {
  10.                 //DbgPrint("[KdEnteredDebugger] address: %p\n", KdEnteredDebugger);
  11.                 VirtualAddress = (PUCHAR)KdEnteredDebugger + 0x30;  
  12.         }
  13.         return oldIoAllocateMdl(VirtualAddress, Length, SecondaryBuffer, ChargeQuota, Irp);
  14. }
复制代码


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

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

源码:
游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

发表于 2018-3-14 06:26:54 | 显示全部楼层
过64位下TP保护DebugPort清零源码

该用户从未签到

发表于 2018-4-3 21:33:21 | 显示全部楼层
这个学习了  谢谢

该用户从未签到

发表于 2018-4-6 13:47:53 | 显示全部楼层
111下载过来看看

该用户从未签到

发表于 2018-4-11 11:42:15 | 显示全部楼层
学习一下,感谢楼主分享

该用户从未签到

发表于 2018-4-11 12:55:12 | 显示全部楼层
这个很强大  学习了

该用户从未签到

发表于 2018-5-31 10:03:07 | 显示全部楼层
非常感谢,学习学习

该用户从未签到

发表于 2018-6-3 22:52:32 | 显示全部楼层
这个必须要学习一下。谢谢

该用户从未签到

发表于 2018-6-8 23:09:18 | 显示全部楼层
回个看看哦
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-24 20:26

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表