安卓逆向-修改APK-战斗直接胜利
前言
很久没有总结过关于逆向编程的文章了,来写一篇实践分享给大家。主要来说说如何通过逆向修改APK来实现游戏进入后直接获得胜利领取奖励。为了学习发展就不分享游戏名称了。下面我们开始吧:
使用到工具
AndroidKiller / IDE 3.1.0.0 (用来反汇编APK)
.NET Reflector 9.0 (用来查找修改)
过程
首先通过AndroidKiller将游戏APK安装包反汇编出来,使用.NET Reflector 打开目录下的Assembly-CSharp.dll文件。
F3(调查查询界面) → ctrl + m(查询方法类型) → win(查询关键字) → 选择精准匹配(如下图所示)。
我们锁定(上图中倒数第四个)Menber = win,Declaring Type = BattleState(战斗状态)这行,双击进去,顺便看看BattleState这个类都有些什么相关的信息。
(单词含义不太确定的可以百度翻译,平时多记多查点滴积累。)
AllEnemiesDead() : Boolean 批注:(所有敌人死亡)Boolean在这里叫做布尔值,代表返回的数据类型:True 或为 False
AllHeroDead() : Boolean (所有英雄死亡)
EndBattle() : Void 批注:(结束战斗)Void 当看到这个类型时要明白方法返回值为空 或 不返回值
这里我们把直接胜利,比喻成我们想添加的toast,想让toast在启动的时候显示,就要找到主启动的activity添加进去。
在Win() : Void → 右键Analyze / ctrl + r (进入分析器界面) →双击 展开列表 → 展开 Used By 。如下图:
批注:Depends On:执行Win()方法时所需要内容。 Used By : Win()方法 被哪些过程使用
BattleState.Win() : Void
Depends On
Used By
BattleState.Update() : Void
PlayerCmder.Reconnect(FullPlayerWrap) : Void
批注:我在这里看出 Win()方法 与 Update() 是属于BattleState类下的方法也可以说Reconnect()方法属于 PlayerCmder类
分析来看:发现游戏在运行 有查看 战斗状态(BattleState)的过程,而游戏在执行这个过程中会用到 胜利(Win()) 和 刷新(Update())的命令。 所以在这里只要我们把胜利的命令放在刷新命令的第一行,让玩家进入游戏时,系统就会查看战斗状态-刷新-玩家胜利。这就是代码之后执行的逻辑。
下面我们接着操作:
先来看看Update() : Void
对于代码看不明白的可以直接看下方文字即可:
public override void Update()
{base.Update();if ((this.m_status == Status.Init) && (BattleApp.aBattle != null)){this.m_status = Status.Runing;}if (BattleApp.aBattle != null){if (this.m_status == Status.BattleEndTutorial){if (Singleton<TutorialManager>.Get().IsTutorialFinishOp(this.m_battleEndTutorial)){if (this.m_result == BattleResult.Win){this.Win();}else if (this.m_result == BattleResult.Lose){this.Loss();}}}else{if (!this.m_bTriggerStartEvent && (this.ElapseTime > 0x9c4L)){this.m_bTriggerStartEvent = true;Singleton<TutorialManager>.Get().SendEvent(new BattleStart());}if (!this.m_bTrriggerWaveStartEvent && (this.ElapseTime > 0x9c4L)){this.m_bTrriggerWaveStartEvent = true;Singleton<TutorialManager>.Get().SendEvent(new WaveStart(this._curWave));}bool flag = false;if (!this.PauseTime && !this.WaveCleared){this.RemainTime -= App.Clock.DeltaMillis;if ((this.RemainTime <= 0L) || this.AllHeroDead()){flag = true;this.m_result = BattleResult.Lose;}if (this.AllEnemiesDead()){this._waveCleared = true;if (this.CurWave == this.MaxWave){flag = true;this.m_result = BattleResult.Win;}else{this.ClearWave();}}if (flag){this.OnBattleEnd();if (this.m_status != Status.BattleEndTutorial){if (this.m_result == BattleResult.Win){this.Win();}else if (this.m_result == BattleResult.Lose){this.Loss();}}}if ((this.m_helpAddEpDataList != null) && (this.m_helpAddEpDataList.Count > 0)){HelpAddEpData data = this.m_helpAddEpDataList[0];if ((data.Tick * 1000f) < this.ElapseTime){this.m_helpAddEpDataList.RemoveAt(0);BevUnit bevUnitByHeroID = BattleApp.aBattle.GetBevUnitByHeroID(data.HeroID);if (bevUnitByHeroID != null){bevUnitByHeroID.aUnitAttribute.aUnitProp.CurEP = UnitProp.MAX_EP;}}}}}}
}
通过分析代码可以看到胜利、失败、所有敌人死亡、所有英雄死亡。
想让游戏直接胜利,就在第一行Update() : Void上面调用Win() : Void方法。
在菜单Tools → Reflexil v1.6 →如下面两张图。
修改后:
小结
这样程序就能达到直接胜利的效果了,之后通过回编译、签名游戏、打包就可以把游戏安装到手机了。希望可以帮到对此技术好奇的你们,荣幸与您分享~
安卓逆向-修改APK-战斗直接胜利相关推荐
- 安卓逆向笔记--apk加固
安卓逆向笔记–apk加固 资料来源: 浅谈安卓apk加固原理和实现 Android中的Apk的加固(加壳)原理解析和实现 前两个太老了所以具体代码借鉴下面的 Android Apk加壳技术实战详解 一 ...
- 安卓逆向——修改APP的名称,图标和包名多开分身
修改APP的名称,图标和包名多开分身 1. 把apk拖入到 Android killer 2. 修改apk的名字 搜到结果,把得到的文件,把"土豆视频" 改成 修改成的名字 回编译 ...
- 安卓逆向_18 --- APK保护策略【Java代码混淆、资源混淆、签名校验】
Java 代码混淆介绍:https://www.bilibili.com/video/BV1UE411A7rW?p=60 Android 反编译利器 jadx:GitHub上直接下载:https:// ...
- 安卓逆向——修改APP去广告案例
修改APP去广告案例 首先 没有去 广告打开的样子 ,显示的广告 这里使用 Android killer 工具 反编译 apk ,查看源码,打开 AndroidManifest.xml 文件查看 配置 ...
- 安卓逆向_3 --- 篡改apk名称和图标、修改包名实现应用分身、修改资源去广告、去除re管理器广告
From:https://www.bilibili.com/video/BV1UE411A7rW?p=7 Android 中 adb shell dumpsys 相关命令:https://blog.c ...
- 安卓逆向_3 --- 篡改apk名称和图标、修改包名实现应用分身、修改资源去广告、去除re管理器广告...
From:https://www.bilibili.com/video/BV1UE411A7rW?p=7 Android 中 adb shell dumpsys 相关命令:https://blog.c ...
- 安卓逆向_13 --- AndroidStudio + Smalidea 动态调试 smali 代码【APK可调试】、gradle 配置
教我兄弟学Android逆向04 动态调试smali代码:https://www.52pojie.cn/thread-658865-1-1.html From:Android Studio 3.6 调 ...
- 安卓逆向_1 --- 逆向环境配置、APK 文件结构、APK 打包流程
哔哩哔哩:https://www.bilibili.com/video/BV1UE411A7rW?p=1 Android 逆向工程师系统培训‹第九期›( 课程目录 ):https://ke.yijin ...
- 项目“恶意APK检测系统”——安卓逆向部分学习
项目"恶意APK检测系统"--安卓逆向部分学习 交流逆向工程相关知识 +Q1906661021 以下内容按笔者的浏览和学习顺序为序,并无难易之分 1.proguard progua ...
最新文章
- 摘:C/C++中时间类time.h
- 修改Centos7的网卡ens32 改为eth0
- 标签页如何用php静态显示,php使用标签替换的方式生成静态页面
- discussion function on the github system
- OS- -进程详详解
- dsp 数据类型强制转换_JavaSE第二章总结—数据类型
- arm9 安装java_QT5.7 AM1808 ARM9的交叉编译
- 全球信息产业的云转型浪潮
- 基于BP神经网络和ORL库的人脸识别matlab仿真
- ul阻燃标准有几个等级_UL阻燃等级介绍说明
- 琼斯是计算体心立方弹性模量_本科阶段固体物理期末重点计算题.doc
- ftp服务器在线编辑,ftp服务器上怎么直接修改office文档.
- 什么是共享设备,对共享设备如何分配?
- html网页文字链接的若干问题
- 让VMWare拥有Intel千兆网卡
- 超全!互联网大厂职级薪资表,全国各地互联网大厂分布(校招/社招/考研/考公)
- 《期权、期货及其他衍生产品》读书笔记(第八章:证券化与2007年信用危机)
- 在线查询倒闭公司数据
- 2W字!详解20道Redis经典面试题!(珍藏版)二
- 非参数统计的Python实现—— Mann-Whitney 秩和检验
热门文章
- 8大基本数据类型各占多少字节和一些单位常识
- 2021Java面经:【漫画(2)
- 论文笔记(十六):Learning to Walk in Minutes Using Massively Parallel Deep Reinforcement Learning
- Visual Studio设置release版本可调试
- 垂直投影法分割验证码
- oracle数据误删怎么恢复,Oracle数据误删了怎么恢复
- python : Tkinter布局
- 带你了解什么是MySQL数据库(八)数据库锁机制
- matlab状态空间模型构建函数ss
- 全国大学生“高教杯“成图大赛:轴类零件的快速建模