阅读目录
热血江湖秒怪和无敌功能分析
发布于:2016-7-11 16:04 | 201333次阅读 作者: 管理员 | 原作者: TP | 来自: 原创
一、游戏介绍 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,玩家可以无限释放技能。 |

最新评论
发表评论