一 漏洞简介
1)漏洞所属游戏名及基本介绍:有杀气童话(com.netease.sq),ARPG手游,类似天天来战、2)天下HD等。有伙伴系统(卡牌)。
3)漏洞对应游戏版本及平台:有杀气童话Android 0.8.2.12500
4)漏洞功能:竞技场(竞技场)直接胜利,可刷钻刷荣誉(可购买伙伴碎片)。
5)漏洞危害评级:红
二 漏洞实现介绍
1、漏洞实现使用工具
利用APKTOOL解APK包,IDA进行静态分析和动态调试。然后配合ILdasm、ILSpy、Ilasm实现IL代码阅读、修改重编译。
2、漏洞实现过程及实现原理
整个漏洞实现过程与一般的U3D手游类似,既是直接修改Assembly-CSharp.dll。利用ILSpy阅读代码,用ILdasm解析出IL代码,在IL代码基础上修改逻辑,最后用Ilasm编译回DLL即可。
图1. 有杀气童话mono_image_open_from_data_with_name函数
这里需要提到一点是,有杀气童话有对DLL进行加密。既是修改了Mono,如图1所示,mono_image_open_from_data_with_name函数有明显被修改痕迹。明显可看到针对游戏逻辑脚本文件Assembly-CSharp.dll有解密操作。因此之前直接从APK包解出来DLL的方法是不生效的,这里定位到Mono修改位置之后,可以在该函数尾部Dump出相关数据。利用IDA加载IDAPython脚本,如图2所示,在断点找到解密后的DLL内存地址,直接用脚本DUMP出来即可。
图2. IDAPython dump制定内存块脚本
在DUMP出DLL脚本后,由于要测试漏洞,需要修改游戏逻辑代码,这里可以考虑将该Mono中的"Assembly-CSharp.dll"字符串抹除便可绕过Mono的解密函数块。这样就能使用正常格式的DLL,我们修改后重编译的DLL就能被游戏识别。
解决了DLL解密,还有找到测试方案后,就可以按照之前方法直接修改IL代码测试漏洞。下面内容主要是叙述下漏洞的实现逻辑。
1)竞技场直接获胜
仔细分析游戏逻辑,SendPvpResultMsg可发现客户端会上报竞技场战斗结果。这种情况下,可以尝试直接修改协议相关字段。此次修改了MC2S_PvpArenaResult中的CombatLog属性,其win标志改为1。同时修改PvpScene::Update函数,使其直接结算,即可实现一进竞技场就获胜的功能。
三 漏洞效果截图
下图为利用竞技场直接胜利漏洞刷排名:
图3. 竞技场排行榜(注意战斗力)
图4. 竞技场排名上升钻石奖励
*转载请注明来自游戏安全实验室(http://gslab.qq.com)
原文始发于微信公众号(游戏安全实验室):【漏洞分析】有杀气童话竞技场直接胜利分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论