【案例分析】热血江湖秒怪和无敌功能分析

admin 2022年6月22日12:24:39评论89 views字数 987阅读3分17秒阅读模式

一、游戏介绍


1) 游戏名及基本介绍:热血江湖(com.hugenstar.tdzmclient360.ap),ARPG手游。

2) 游戏版本及平台:热血江湖 Android1.15.06.22.

游戏的主要玩法和升级方式是通过打副本做任务。秒怪和技能无CD的功能可以快速提升玩家等级,加快游戏进度。

 

二、分析过程使用工具


用apktool工具反编译分析APK包的结构,然后使用IDA静态分析和动态调试分析游戏相关逻辑实现方式。

 

三、实现过程分析


利用IDA解析APK中的关键so文件libtdzmClient.so可以得到绝大部分功能函数,且函数名未被混淆,于是直接从函数名定位到关键逻辑代码。


1、秒怪功能实现


通过字符串可定位到CLocalMonster::damage函数负责响应怪物受伤事件,如图1所示该函数会调用CustomActor::setHP设置怪物新血量,在该地方将CustomActor::setHP函数R1参数改成0即可实现功能。(setHP上面R1赋值指令直接改成Opcode:00 21 MOVS R1, #0)


【案例分析】热血江湖秒怪和无敌功能分析

图1. CLocalMonster::damage函数(怪物受伤响应函数)


由于程序对so文件作了一定的保护处理,许多函数的指令分为几个分开的片段,在setHP()方法处下断点,根据LR的指令值找到上层调用的函数位置,最终定位到如下的代码片段,该方法实现的功能为初始化怪物的血量:


【案例分析】热血江湖秒怪和无敌功能分析 

图2  怪物血量初始化函数


如图2中红色方框所示,该指令为取第一个参数的值,该参数就是怪物初始化的血量,因此秒怪功能的实现方法就是将该条指令修改为MOV R1,#1,这样一来所有怪物的血量都为1,玩家攻击即可实现秒杀。


2、技能无CD实现


由于技能相关的函数在符号表中可以直接找到,因此直接定位到SkillDataManager类的getSkillCDTime()方法,其关键代码片段如下:


【案例分析】热血江湖秒怪和无敌功能分析

图3  getSkillCDTime函数关键代码片段


如图3中红色方框所示,该指令的作用是将计算出的技能CD秒数写入寄存器R0作为返回值,因此,技能无CD的实现方法就是将该指令改为MOV R0,#0,这样所有的技能CD便都为0,玩家可以无限释放技能。



*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)


原文始发于微信公众号(游戏安全实验室):【案例分析】热血江湖秒怪和无敌功能分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月22日12:24:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【案例分析】热血江湖秒怪和无敌功能分析http://cn-sec.com/archives/1066273.html

发表评论

匿名网友 填写信息