分析目的
我叫MT2目前外网存在八门神器定制辅助工具(如图1所示),功能恶劣(攻击方攻击必定爆击、防守方攻击必定MISS、技能无CD、技能攻击必定击中、攻击方必定10倍系数吸血、无需三星即可自动战斗、战斗时间延长到180秒),严重影响到竞技场玩家氛围。
图1. 八门神器定制辅助
所以本文主要分析八门神器我叫MT2的定制外挂原理。
实现原理
MT2是Unity游戏,八门神器MT2定制外挂主要是通过模块注入,HOOK了MONO加载mono_image_open_from_data_with_name函数。在该函数中获取Assembly-CSharp内容,直接修改IL代码实现imba功能。
下面具体分析几个步骤:1、注入;2、HOOK功能函数;3、功能修改。
1、注入
使用八门神器MT2辅助工具的时候,需要到八门神器中针对MT2选中一键辅助。而修改过程,八门神器是将MT2的lib目录下的libmain.so静态patch修改,在JNI_Onload函数处加载了注入模块及设置入口函数地址。如图2所示。同时会备份原来的libmain.so,保存为libmain.so.org(修改还原需要备份)。
图2. Libmain.so被patch之后的JNI_Onload函数
2、HOOK功能函数
通过上面提到的方式注入外挂功能模块libmf.so,该模块在入口函数myLoad中,修改了dlopen的导入表地址,如图3所示。
图3. 修改dlopen导入表地址
而在外挂作者自实现的mydlopen中,针对open的文件进行一个判断。如图4所示:如果是libunity.so,则修改mono_image_open_from_data_with_name函数的导入表;如果是libmono.so,则备份几个敏感mono函数的地址。
而mono_image_open_from_data_with_name函数是Mono机制中的一个敏感函数,既是加载DLL会通过该函数读入DLL内容。外挂作者通过HOOK了该函数,获取游戏脚本文件(Assembly-CSharp.dll)buffer,然后直接暴力修改buffer内容实现imba功能。
图4. Mydlopen函数
3、功能修改实现
Unity游戏在Android下通过Assembly-CSharp加载游戏脚本这点是众所周知的,而在mono_image_open_from_data_with_name函数中,Assembly-CSharp会赤裸裸展示出来。
外挂作者通过分析游戏脚本,即可得知一些关键修改点,然后暴力修改。针对MT2游戏八门神器修改了如图5所示修改。
比如说前两个点的修改,0x6E9BC和0x0x6E9C6被改成10,定位到游戏脚本逻辑,既是角色初始化中MAX_ENERGY和COST_ENERGY_FOR_ACTIVE_SKILL变量值被改小了。导致现象是玩家攻击一次即可蓄满能量槽再次施放技能,相当于无CD。这个点还是比如简单改法点,另外其它点,比如攻击必中之类的,还添加判断是否攻击者之类。(由于在这个点的dll是明文,实在是太多改法了。)
图5. 暴力修改游戏脚本文件
图6. 修改技能CD点(IL指令)
*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)
原文始发于微信公众号(游戏安全实验室):【案例分析】八门神器定制辅助
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论