TenProtect(TP) 驱动保护原理.pdf

上传人:小** 文档编号:90957034 上传时间:2019-06-20 格式:PDF 页数:74 大小:2.86MB
返回 下载 相关 举报
TenProtect(TP) 驱动保护原理.pdf_第1页
第1页 / 共74页
TenProtect(TP) 驱动保护原理.pdf_第2页
第2页 / 共74页
TenProtect(TP) 驱动保护原理.pdf_第3页
第3页 / 共74页
TenProtect(TP) 驱动保护原理.pdf_第4页
第4页 / 共74页
TenProtect(TP) 驱动保护原理.pdf_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《TenProtect(TP) 驱动保护原理.pdf》由会员分享,可在线阅读,更多相关《TenProtect(TP) 驱动保护原理.pdf(74页珍藏版)》请在金锄头文库上搜索。

1、过过 DNF TP 驱动保护(一)驱动保护(一) 文章目录: 01. 博文简介: 02. 环境及工具准备: 03. 分析 TP 所做的保护: 04. 干掉 NtOpenProcess 中的 Deep InLine Hook: 05. 干掉 NtOpenThread 中的 Deep InLine Hook: 06. 干掉 NtReadVirtualMemory 中的 InLine Hook: 07. 干掉 NtWriteVirtualMemory 中的 InLine Hook: 08. 干掉 KiAttachProcess 的 InLine Hook: 09. 干掉 NtGetContextTh

2、read 中的 InLine Hook: 10. 干掉 NtSetContextThread 中的 InLine Hook: 11. 干掉 DbgkpQueueMessage 中的 InLine Hook: 12. 干掉 DbgkpSetProcessDebugObject 中的 InLine Hook: 13. 干掉 Debug 清零: 共四篇,本篇为第一篇。共四篇,本篇为第一篇。 01. 博文简介: 本篇博文仅仅是我对过本篇博文仅仅是我对过 TP 保护所作的一个总结,里面没有啥高深的技术,保护所作的一个总结,里面没有啥高深的技术, 仅仅是仅仅是 Hook 而已,并且只有些而已,并且只有些

3、InLine Hook 和和 SSDT Hook 的代码,的代码, 这些对大牛而言都是小菜一碟,所以大牛们可以直接飘过咯这些对大牛而言都是小菜一碟,所以大牛们可以直接飘过咯 _ 然后就是关于本篇博文,估计会比较长,所以我会按照上面的目录分出来一,二,三,四篇相 继发表。 然后就是关于本篇博文,估计会比较长,所以我会按照上面的目录分出来一,二,三,四篇相 继发表。 我先来装回逼科普下我先来装回逼科普下 TP 吧,直接从百度百科抄袭点过来吧,直接从百度百科抄袭点过来: TP 系统全称 TenProtect,是由腾讯自主研发推出的安全系统,可以有效保护游戏不受外挂侵犯,同时具备反木马盗号功能, 能有

4、效的防止用户游戏帐号和虚拟财产被窃取。腾讯 TP 系统主要作用为外挂检测、反盗号、反非法工作室、防非法消息。 具体功能如下: 反注入:TP系统能有效的阻止非法模块对游戏进行注入; 反加速:TP系统能防止游戏客户端的非法加速功能; 反模拟按键:TP系统能有效阻止模拟按键程序; 反脱机: TP系统能针对非正常登录游戏的行为进行检测; 反调试: TP系统采用内核级反调试技术,保护游戏进程不被调试和分析; 反木马: TP系统可以保护玩家帐号不被木马程序窃取; 检测外挂功能:TP系统能对外挂功能进行检测; 指令混淆: TP系统能对正常指令进行虚拟和变形,加大外挂作者逆向难度; 特征匹配: TP系统采用特

5、征码匹配技术,能准确检测到外挂的使用; 文件校验:TP系统可以准确检测游戏目录下的文件是否被第三方程序篡改; 游戏内存数据校验: TP系统所特有技术手段可以准确感知到游戏关键数据的异常; 游戏进程保护: TP系统可以保护游戏进程不被第三方程序读写; 游戏虚拟财产保护: 在玩家因不当操作引起帐号泄漏情况下,TP系统也可以保护玩家帐号内虚拟财产不被不法份子转移; 我几个日子弄了过 TP 的驱动保护,算下来前前后后也弄了半来个月, 虽然比较累,但还是收获了蛮多东西,这篇博文就是将如何过掉 TP 做的一个总结而已, 在这篇文章中我会一一介绍过掉 TP 所 Hook 的各种 API 的思路,并附上简要的

6、代码, 在过 TP 驱动保护的过程中以及一些思路和一些代码也很大程度上都是来自国内的几大论坛, 主要是看雪,一蓑烟雨,DebugMan 等论坛,这里对我所借鉴的那些哥们说 Many Thanks。 同时也得特别感谢刘总,很多地方若没有刘总的指导,则还指不定何时能够弄出来呢。 值得一提的是,我现在所做的过 TP 驱动保护只支持 32 位 XP,在所有的 32 位 XP 上都可 以正常运行, 不过 Win7 的话还不行,因为里面用到了搜索特征码来定位未导出 API,而我只针对 XP 做了 处理。 免责声明:免责声明: 此文仅作为技术交流,有心之人切记不要拿来做坏事,尤其是不要拿来做伤天害理,或者伤

7、害 企鹅利益的事情, 此文仅作为技术交流,有心之人切记不要拿来做坏事,尤其是不要拿来做伤天害理,或者伤害 企鹅利益的事情, 对于那些有心要做坏事的,则所有后果或者反正是坏的方面的责任都与我无关,对于那些有心要做坏事的,则所有后果或者反正是坏的方面的责任都与我无关, 如果此文伤害了某些公司的利益或者之类的,请站内消息或者留言联系我,本人看到后会第一 时间关闭此文。 如果此文伤害了某些公司的利益或者之类的,请站内消息或者留言联系我,本人看到后会第一 时间关闭此文。 02. 环境及工具准备: 前面也提过了,此次过 TP 的驱动保护仅仅只适用于 XP 系统,所以,首先你得准备个虚拟机, 然后装个 XP

8、 的系统, 至于是 XP SP2 还是 XP SPxxx 就随便了, 当然, 如果你喜欢 BSOD 的 话, 也完全可以装个其他的系统, 然后的话, 就得准备几个专业工具了, 首先一个当然是 Xuetr 了, 不过 TP 能够检测出 Xuetr,所以 Xuetr 在 XP 机器上和 TP 同时运行时, 轻则导致 TP 弹出警告框,重则蓝屏,这个看个人运气了。 然后还有一个工具也很重量级,也是 Rootkit 检测工具,叫做 Kernel Detective, 并且更重要的是 TP 和 Kernel Detective 是可以并存的,不会像 Xuetr 那样会被 TP 检 测出来, 不过 Ker

9、nel Detective 想比与 Xuetr 来说,Xuetr 能够扫描内核的 InLine Hook, 这个很强大, 这两个工具都很重要,其次就是 WinDbg 和 OD 以及 CE 了。 至于 WinDbg 的话自然是用来调试 Windows 内核或者调试驱动程序了, 而 OD 和 CE 的话可以用来测试咱所写的驱动是否真正的有效果,也就是测试是否真正的过了 TP 保护。 最后就是开发环境了,我的是 Visual Studio 2010 + Visual DDK + WDK,这个可以随 意搭建。 03. 分析 TP 所做的保护: 如果真要分析 TP 所做的保护的话,还是比较麻烦的,不过好

10、在各种论坛里面,各种前辈给指 出了明路, 比如堕落天才有一篇极好的文章,不过这篇文章是 2010 年 12 月份的了,中间 TP 也不是吃 饭的,肯定是有更新了, (继续为堕落天才打广告) 文章名称:散谈游戏保护那点事就从_TP开始入手吧 文章地址:http:/ 不过这篇文章的参考价值还是很大的, 比如在 NtOpenProcess, NtOpenThread 等等系统服 务的 Hook 上, TP 也还是差不多的,也就是变化不大,甚至很多的代码都可以拿过来直接用,而至于 TP 更新 的一些内核函数的 Hook 的话, 也可以从其他论坛里面找到一些,所以最主要的一点就是放狗搜索,放狗搜索到一些

11、资料以后, 可以用 WinDbg 或者 Kernel Detective 来验证这个内核 API 是否真的被 TP 所干掉了。 具体的俺也不晓得要怎么说了,总结一句就是放狗搜索。 下面放出几张截图,我是用 Xuetr 进行扫描的, 04. 干掉 NtOpenProcess 中的 Deep InLine Hook: TP Hook NtOpenProcess 的直接效果就是咱在应用层里面调用 OpenProcess(DNF 进程) 失败, 并且在 OD 或者 CE 里面也根本找不到 DNF 游戏的进程,更别提什么打开或者附加了, 这使得咱根本对 DNF 无从下手。研究过 TP 的都知道,TP 在

12、 NtOpenProcess 中是下了深 层的 InLine 钩子, 这个也早已经不是什么秘密, 各个论坛上的都知道, 是 Hook 的 ObOpenObjectByPointer, 对于这个,可以使用 Xuetr 扫描内核钩子扫描出来(TP 对 Xuetr 好像敏感,在 XP 机上可 能蓝屏)。 在一些简单的 InLine Hook 中,咱都是直接拿内核 API 的头 5 个或者头 7 个字节做 Hook, 这种 Hook 方式是很容易被干掉的,直接 SSDT Hook 就可以干掉, 对于用 SSDT Hook 干掉浅层的 InLine Hook 可以参考看雪上堕落天才的文章: 文章名称:S

13、SDT Hook 的妙用 - 对抗 Ring0 InLine Hook 文章地址:http:/ 不过 TP 是做的 Deep InLine Hook,也就是 Hook 的是 NtOpenProcess 深层的地址, 而不是函数头, 要想用 SSDT Hook 来干掉的话,除非自己重写 NtOpenProcess,否则很难干掉, 而且 TP 在对 NtOpenProcess 上还有检测,所以即使是重写 NtOpenProcess 也很麻烦, 因为在重写中也必须要绕过 TP 可以被 TP 检测到,从而弹出经典的 TP 警告框。 在这里咱可以在 Kernel Detective 中看到它所做的 In

14、Line Hook, 首先是启动 Kernel Detective,然后在 SSDT 子菜单中,找到 NtOpenProcess, 然后在上面右键,在右键菜单中选择反汇编当前地址,从而就会跳转到 NtOpenProcess 的反 汇编代码中了, 由于我的电脑太烂了,开个虚拟机,再跑个 DNF,再主机里面开个 Visual Studio 的话, 估计半天会没反应, 所以这里截图截的都是没有启动 DNF 的图,也就是在 TP 还没有进行 Hook 时候的截图, 对于电脑配置好的朋友,可以自己去测试,测试结果除了地址外,其他基本都是一样的, 那么如何实现干掉 TP 对 NtOpenProcess 所

15、做的 Hook 呢 ? 一般干掉的意思就是恢复 Hook, 但是恢复 Hook 有一个很严重的问题, 那就是很容易就被 TP 检测到了, 其实可以换个思路,为什么一定要干掉 TP 对 NtOpenProcess 所做的 Hook 呢 ? 就算被干掉了, 还得干掉 TP 用来检测 NtOpenProcess 的 Hook 是否被干掉的线程之类的, 这样就比较麻烦了,为何不直接绕过 TP 的 Hook 呢 ? 要想绕过 TP 的保护的话,我们也可以下一个 InLine Hook,如果发现是 DNF 进程的话, 那好啊, 咱直接跳到 TP 下的 InLine Hook 中执行(这样 TP 还是执行它

16、原来的代码,从而检测不出 来被改变了) 而如果不是 DNF 进程的话,那咱就跳过 TP 下的 InLine Hook 就好了, 上面这样说是说不清楚的,来点干脆的,写点伪代码比较容易看懂: TP 启动之前,也就是启动之前,也就是 Hook 之前的伪代码:之前的伪代码: 1: push dword ptrebp-38 2: push dword ptrebp-24 3: call ObOpenObjectByPointer 4: mov edi,eax 5: lea eax,dword ptrebp-B8 TP 启动之后,也就是启动之后,也就是 Hook 之后的伪代码:之后的伪代码: 1: push dword ptrebp-38 2: push dword ptrebp-24 3: call TPHookedObOpenObjectByPointer /这里代表 TP Hook ObOpen

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号