请选择 进入手机版 | 继续访问电脑版

 找回密码
立即注册
查看: 2970|回复: 63

分析TP驱动保护系列教程_定位TenProtect保护机制

[复制链接]

8

主题

55

回帖

154

积分

版主

破解达人认证

积分
154
发表于 2024-5-10 19:35:01 | 显示全部楼层 |阅读模式
很久以前,我计划制作一个TenProtect保护分析系列,一直鸽到现在。

对TenProtect研究过游戏安全的朋友肯定不陌生,它可谓业界标杆。

然而,无论保护有多强,一定会有瑕疵。出于学习和研究的目的,我写下了我自己与TenProtect战斗的记录,我希望TenProtect可以走得更远。



TenProtect保护分析

TenProtect简介

分析TP驱动保护系列教程_定位TenProtect保护机制6370 作者:誓言。 帖子ID:101 游戏宝鹭社区_baolu.cc

TenProtect,是由腾讯自主研发推出的安全系统,可以有效保护游戏不受外挂侵犯,同时具备反木马盗号功能,能有效的防止用户游戏帐号和虚拟财产被窃取

腾讯 TenProtect 系统主要作用为:外挂检测、反盗号、反非法工作室、防非法消息

该系列不提供任何成品,伸手党可以退出了,仅供学习交流研究,严禁用于任何非法途径

分析的环境

本人采用的分析环境为XP 32位,使用的为论坛的虚拟机镜像

首先32位驱动和64位驱动还是有不少差别的

WIN64引入了两个内核保护机制,KPP和DSE

  • KPP:循环检查几个重要驱动数据段和代码段是否被修改,如果被修改,则触发0x109蓝屏;防止内核修改
  • DSE:驱动签名强制,禁止加载不正确签名的驱动;签名验证

在WIN64上限于上面两个保护机制使得驱动保护相比XP环境下变得薄弱

而本着学习和研究的目的,选择XP系统作为范例



研究成果图

研究成果放的是之前的截图,时间是:2021/2/25(懒得再搞一遍了)

可以看到OD可以正常地附加游戏(仅研究游戏的保护机制,本人没有参与过也不打算参与任何网游的外挂开发销售,勿扰!!!)

分析TP驱动保护系列教程_定位TenProtect保护机制6308 作者:誓言。 帖子ID:101 游戏宝鹭社区_baolu.cc



TenProctect的保护

分析保护之前,首先要明确TenProtect提供了哪些保护

下面给出TenProtect的保护:

  • 针对Windbg的双机调试的保护
  • 针对打开进程的NtOpenProcess的保护
  • 针对读内存的NtReadVirtualMemory的保护
  • 针对写内存的NtWriteVirtualMemory的保护
  • 针对打开线程的NtOpenThread的保护
  • 针对附加进程的KeAttchProcess的保护
  • 针对附加进程的KeStackAttachProcess的保护
  • 针对附加进程的KeForceAttachProcess的保护
  • 针对恢复进程的NtResumeProcess的保护
  • 针对恢复线程的NtResumeThread的保护
  • 针对调试信息传递相关的DbgkpPostFakeThreadMessages的保护
  • 针对唤醒调试目标的DbgkpWakeTarget的保护
  • 针对调试权限标志的ValidAccessMask清零的保护
  • 针对调试对象的DebugPort清零的保护



上述的保护中,比较麻烦的为针对Windbg的双机调试的保护和针对调试对象的DebugPort清零的保护

前者需要了解双机调试的通信原理,后者需要了解DebugPort的作用并自建调试体系(干掉检测线程自然也行)

除开上述的保护,TenProtect还会对硬件断点进行检测,通过获取DR寄存器的信息来进行判断

可以通过Hook NtSetContextThread和NtGetContextThread 这两个和线程上下文相关的函数来实现绕过检测



如何获知TenProtect的保护

上面提到了如此多的保护,现在来说说如何知道TenProtect所作的保护

ARK

这里需要用到ARK(AntiRootkit),所谓的ARK就是反内核工具,ARK这种工具可以让我们得到系统内核的相关信息

常见的ARK工具有:

XueTr、IceSword、Wsyscheck 、Snipesword等



使用ARK分析保护

这里使用的ARK为XueTr

此次分析的游戏为QQ堂,算是个比较古老的小型游戏,但麻雀虽小五脏俱全,其TenProtect还是很强力的

打开游戏,等TenProtect加载完毕后再打开ARK:XueTr

SSDT HOOK

点击 内核钩子→SSDT

分析TP驱动保护系列教程_定位TenProtect保护机制5981 作者:誓言。 帖子ID:101 游戏宝鹭社区_baolu.cc

可以看到SSDT被挂了两个钩子:NtReadVirtualMemory和NtWriteVirtualMemory

这里便是所谓的SSDT HOOK,关于SSDT HOOK 会单独开章节说明,这里不继续深入



Kernel Inline HOOK

点击 内核钩子→内核钩子

分析TP驱动保护系列教程_定位TenProtect保护机制9039 作者:誓言。 帖子ID:101 游戏宝鹭社区_baolu.cc

可以看到有不少内容,前面几个Hook是虚拟机自带的,无须关注;只需关注底下的几个Hook

这里以最后一个Hook为例,即0x805D5832,使用Windbg查看其地址对应的函数

输入指令:

u 0x805D5832

u指令为查看指定地址的汇编指令,得到:

分析TP驱动保护系列教程_定位TenProtect保护机制8486 作者:誓言。 帖子ID:101 游戏宝鹭社区_baolu.cc

可以看到该地址对应的函数为PsResumeThread,也就是说TenProtect在PsResumeThread的头部做了HOOK

这个时候会发现PsResumeThread貌似并不在前面给出的保护中,暂且不急,看看PsResumeThread和前面函数的关联

通过前面的XueTr可以得到,被Hook的文件为ntkrnlpa.exe,使用IDA打开ntkrnlpa.exe

然后通过ALT+T 搜索PsResumeThread

分析TP驱动保护系列教程_定位TenProtect保护机制3346 作者:誓言。 帖子ID:101 游戏宝鹭社区_baolu.cc



得到:

分析TP驱动保护系列教程_定位TenProtect保护机制9557 作者:誓言。 帖子ID:101 游戏宝鹭社区_baolu.cc



选中PsResumeThread函数后按快捷键Ctrl + X 查看交叉引用:

分析TP驱动保护系列教程_定位TenProtect保护机制3010 作者:誓言。 帖子ID:101 游戏宝鹭社区_baolu.cc

可以看到前面提到的保护:NtResumeThread、DbgkpPostFakeThreadMessages、DbgkpWakeTarget均调用了被HOOK的PsResumeThread

于是如果想要绕过保护则需要替换PsResumeThread函数,将其变成我们自己写的函数MyPsResumeThread

以此要Hook的函数为NtResumeThread、DbgkpPostFakeThreadMessages、DbgkpWakeTarget,而非PsResumeThread

其它内核钩子分析方法同上,这里不再赘述,这里只是简单地说明一下如何定位TenProtect所做的保护



其它保护

上面只分析了SSDT HOOK和Kernel Inline HOOK,肯定有人会想问ShadowSSDT和其它钩子呢

关于ShadowSSDT在以后的篇章也会详细说明,但该游戏并没有针对ShadowSSDT的保护,于是无须分析

除此之外,还有Windbg双机调试的保护、ValidAccessMask清零的保护和DebugPort清零的保护没有提及

因为这三个保护相对复杂一些,需要对调试体系有一定的了解才行,之后也会单独开篇章分析

总结

分析流程
  • ARK工具扫描被改动的函数
  • 确定被改动函数的交叉引用
  • 确定需要绕过的函数
  • 绕过函数



补充说明

此篇笔记主要说明了如何定位TenProtect的SSDT HOOK和Kernel Inline HOOK

关于相对比较复杂的Windbg双机调试的保护、ValidAccessMask清零的保护和DebugPort清零的保护 留作之后

定位之后才能有针对性地绕过,但这里的定位只是借助了ARK和Windbg两个工具定位的,真正想要写代码定位留作之后再作补充

这里先预告一下 通过代码定位内核函数的五种方法:

  • 特征码定位法,通过特征码定位到内核函数附近,然后加上偏移即得到内核函数地址
  • 通过MmGetSystemRoutineAddress函数定位,该方法定位的函数有限制
  • SSDT定位法,通过SSDT表的地址加上SSDT函数的偏移计算得到对应的函数地址,该方法仅可定位SSDT函数
  • PE文件导出表扫描法,通过解析PE文件的导出表获得函数的地址,该方法仅可定位导出的函数
  • 符号表PDB解析法,通过解析PDB文件获得函数的地址



该系列的门槛可能较高,需要在对操作系统和调试机制有一定的了解的情况下学习
该篇的内容不算多,算是简单介绍了有关TenProtect保护的定位,后续会不断补充更新,有不足之处希望大家能指出


0

主题

764

回帖

1492

积分

金牌会员

积分
1492
发表于 2024-5-10 19:35:39 | 显示全部楼层
我是来刷分的,嘿嘿

8

主题

753

回帖

1530

积分

金牌会员

积分
1530
发表于 2024-5-10 20:10:30 | 显示全部楼层
难得一见的好帖

4

主题

760

回帖

1532

积分

金牌会员

积分
1532
发表于 2024-5-10 20:43:40 | 显示全部楼层
不错,支持下楼主

0

主题

775

回帖

1492

积分

金牌会员

积分
1492
发表于 2024-5-10 21:13:52 | 显示全部楼层
学习了,不错,讲的太有道理了

8

主题

709

回帖

1442

积分

金牌会员

积分
1442
发表于 2024-5-10 21:34:38 | 显示全部楼层
我抢、我抢、我抢沙发~

4

主题

698

回帖

1408

积分

金牌会员

积分
1408
发表于 2024-5-10 21:55:51 | 显示全部楼层
前排支持下

5

主题

740

回帖

1495

积分

金牌会员

积分
1495
发表于 2024-5-10 23:54:18 | 显示全部楼层
写的真的很不错

7

主题

746

回帖

1513

积分

金牌会员

积分
1513
发表于 2024-5-11 00:18:16 | 显示全部楼层
我是个凑数的。。。

0

主题

786

回帖

1521

积分

金牌会员

积分
1521
发表于 2024-5-11 00:38:47 | 显示全部楼层
学习了,不错,讲的太有道理了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|宝鹭社区 |网站地图

GMT+8, 2024-6-22 21:13 , Processed in 0.196675 second(s), 31 queries , Redis On.

Powered by BaoLu.Cc

© 2018-2024 宝鹭社区.

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