12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 1733|回复: 0

Dota2 国服 VAC系统分析

[复制链接]

345

主题

345

帖子

700

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
700
发表于 2019-9-25 09:52:52 | 显示全部楼层 |阅读模式
DOTA2的反外挂检测上看,VAC并没有做太多的工作,更多的是做一些特征上报(进程、线程、线程模块),这也可能是由于dota2本身的安全性较高,并没有加载完整的VAC方案(如另一款V社游戏CSGO,从玩家反馈来看,还会对游戏窗口、以及DX函数是否被hook等进行检测,甚至在某些特殊服务器还会加载驱动,后续将对该游戏进行进一步分析)
VAC全称VALVE ANTI-CHEAT,是VALVE公司(V社)开发的一款反作弊系统,V社从不公布其具体内容,在网上几乎查不到其工作原理。
..
喜欢玩Steam最近。对你有帮助,给个热心就好
..


1. 文件结构以国服dota2为例,根目录下存放着steam平台相关的文件下载的游戏在steamapps\common中,如dota2游戏文件在steamapps\common\dota 2 beta\:
V社为dota2分别编译了32位版本和64位版本,根据操作系统决定启动32位还是64位程序:
(但其实64位系统也可以强制执行32位dota2,只要打开32位dota2.exe即可)从文件结构以及文件名来看,并未有VAC系统的痕迹,似乎都是游戏相关的可执行文件或资源文件(后面的分析发现在tier0.dll、tier0_s.dll、steamclient.dll中有安全方案)。挑选几个重要的文件,如dota2.exe,engine2.dll等,都没有主流的PE文件保护:
IDA:
2. 启动进程steam启动为例(国服dota2只是把steam.exe换成dota2launcher.exe,只作为启动器),游戏拉起时会有如下进程:
Steamwebhelper是3进程启动,容易想到就是chrome的cef框架,从模块中马上就能得到验证:VAC系统有可能在这些进程中一个或多个之中 3. 驱动模块挂勾NtLoadDrv以及通过工具查看驱动加载,并未发现有驱动模块。 4. 调试器检测常规的调试工具如OD、CE可以附加dota2.exe,硬件断点、软件断点也同样可加可用,但在挂OD每隔一段时间或执行关键操作,如进入对局中等,调试器会断下来,发现是游戏主动抛出了异常,影响调试器工作:tier0.dll + 0x32A68,tier0_timestamp:0x58A60C70)
在另外一个模块tier0_s.dll也有同样的逻辑:tier0_s.dll + 0x11DA8,tier0_s_timestamp:0x58800BAE)
在调试器上忽略该异常代码就不会影响:
另外一些常规的调试器检测API也同样有覆盖,但对于当前各种OD插件来说根本没有意义:
该模块里还有一些主动触发中断的手段(如主动触发int3),但只有在检测到被调试时会主动触发异常,如果没检测到正在被调试,则不会触发:
(在过了调试器检测后上面代码没执行过,即使没过,也可以通过在调试器设置忽略int3异常)总的来说反调试方面做的比较基础,改一下调试器参数即可过(测试号测试1周并未封号)相关文件目录:根目录\tier0.dll根目录\steamapps\common\dota 2 beta\game\bin\win32\tier0.dll 5. 外挂特征监控作为反外挂系统最基础一个环节,相信VAC系统肯定不会漏下:A) 进程扫描Hook NtQuerySystemInformation等底层枚举进程的函数,发现dota2.exe每隔1s都会枚举一次进程,在有新进程出现的时候就回去读取该进程文件进行上报,如打开pchunter:
定位到代码位于steamclient.dll + 0x247AE0(steamclient_timestamp:0x5880156E),通过NtQuerySystemInformation(参数0x10 SystemHandleInformation)获取系统句柄:
成功后通过EnumProcess进行枚举:
另外发现steam本身也有类似的功能,同样引用了steamclient.dll:
最后通过NtCreateFile和GetFileInformationByHandle获取文件信息进行上报
B) 窗口遍历通过hook遍历窗口相关api,FindWindow、EnumWindows、EnumChildWindows发现并没有对窗口进行检测。C) 模块遍历通过hook遍历模块相关api,如NtQuerySystemInformation等发现并没有对本进程模块进行检测。D) 线程创建与前面的方法一样,通过hook常用的api进行分析,发现依旧没有检测线程,但是在后续的分析中,发现了另外VAC一个非常规的检测线程的手段,熟悉windows开发的同学应该知道,在有新的线程创建的时候,系统会对当前进程所有dll发送一个DLL_THREAD_ATTACH事件,VAC正是利用了这个特性,在stramclient.dll中处理这个事件,感知线程的创建,之后有如下操作:1) NtQueryInformationThread获取线程起始地址,定位到模块
2) 通过VirtualQuery、QueryWorkingSetEx获取线程起始地址附近的内存属性,虚拟页拓展信息、模块签名作为线程特征:
3) 根据线程起始地址读取模块信息,结合步骤2获取到的信息进行上报:
总的来说,VAC做了一些进程、线程、线程模块特征的上报,作为后台的一种判定(实际上会出现一些误判,玩dota2的时候经常就会弹VAC发现作弊、禁止开局的框,此时重启进程或电脑就正常)相关文件目录(dota2.exe以及steam.exe都是加载此dll进行检测):根目录\steamclient.dll 6. 内存完整性检测A) 代码篡改类型:通过给可执行代码下硬件断点(确认是否有通过读代码段校验是否被篡改),Hook游戏中UEF、VEH处理函数(确认是否有在页属性被破坏后感知异常并上报),发现dota2似乎并没有对代码进行校验。另外自己亲自修改目前外挂会修改的代码偏移(如networksystem.dll,steamclient.dll等),连续1周并未被封号(之前测外挂在1~2天就会被封)。 B) 异常接管类型(VEH、SEH、UEF捕获硬件断点等):分析发现并未有相关的外挂检测,但利用VEH、UEF捕获异常生成dump文件(tier0.dll. Tier0GenericMiniDumpHandler_SetOptions  tier0_timestamp:0x58A60C70):
7. 其他的一些分析从上面的分析上来看,dota2中的VAC系统并未有很多的工作,但VAC肯定不仅仅只有这些功能,尝试搜索一些字串,如VAC,发现resouce\souceinit.dat中有vac2.dll的字串,发现这个dat是一个标准PE文件,且从导出表来看,这个文件就是vac2.dll,但遗憾的是并没有加载到内存中(无论是LoadLibrary还是MapViewOfFile形式映射,在进程中也搜索不到相关的字串和代码)。
结.

来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-4-24 03:25 , Processed in 0.125000 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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