前言

  很久没有总结过关于逆向编程的文章了,来写一篇实践分享给大家。主要来说说如何通过逆向修改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-战斗直接胜利相关推荐

  1. 安卓逆向笔记--apk加固

    安卓逆向笔记–apk加固 资料来源: 浅谈安卓apk加固原理和实现 Android中的Apk的加固(加壳)原理解析和实现 前两个太老了所以具体代码借鉴下面的 Android Apk加壳技术实战详解 一 ...

  2. 安卓逆向——修改APP的名称,图标和包名多开分身

    修改APP的名称,图标和包名多开分身 1. 把apk拖入到 Android killer 2. 修改apk的名字 搜到结果,把得到的文件,把"土豆视频" 改成 修改成的名字 回编译 ...

  3. 安卓逆向_18 --- APK保护策略【Java代码混淆、资源混淆、签名校验】

    Java 代码混淆介绍:https://www.bilibili.com/video/BV1UE411A7rW?p=60 Android 反编译利器 jadx:GitHub上直接下载:https:// ...

  4. 安卓逆向——修改APP去广告案例

    修改APP去广告案例 首先 没有去 广告打开的样子 ,显示的广告 这里使用 Android killer 工具 反编译 apk ,查看源码,打开 AndroidManifest.xml 文件查看 配置 ...

  5. 安卓逆向_3 --- 篡改apk名称和图标、修改包名实现应用分身、修改资源去广告、去除re管理器广告

    From:https://www.bilibili.com/video/BV1UE411A7rW?p=7 Android 中 adb shell dumpsys 相关命令:https://blog.c ...

  6. 安卓逆向_3 --- 篡改apk名称和图标、修改包名实现应用分身、修改资源去广告、去除re管理器广告...

    From:https://www.bilibili.com/video/BV1UE411A7rW?p=7 Android 中 adb shell dumpsys 相关命令:https://blog.c ...

  7. 安卓逆向_13 --- AndroidStudio + Smalidea 动态调试 smali 代码【APK可调试】、gradle 配置

    教我兄弟学Android逆向04 动态调试smali代码:https://www.52pojie.cn/thread-658865-1-1.html From:Android Studio 3.6 调 ...

  8. 安卓逆向_1 --- 逆向环境配置、APK 文件结构、APK 打包流程

    哔哩哔哩:https://www.bilibili.com/video/BV1UE411A7rW?p=1 Android 逆向工程师系统培训‹第九期›( 课程目录 ):https://ke.yijin ...

  9. 项目“恶意APK检测系统”——安卓逆向部分学习

    项目"恶意APK检测系统"--安卓逆向部分学习 交流逆向工程相关知识 +Q1906661021 以下内容按笔者的浏览和学习顺序为序,并无难易之分 1.proguard progua ...

最新文章

  1. 摘:C/C++中时间类time.h
  2. 修改Centos7的网卡ens32 改为eth0
  3. 标签页如何用php静态显示,php使用标签替换的方式生成静态页面
  4. discussion function on the github system
  5. OS- -进程详详解
  6. dsp 数据类型强制转换_JavaSE第二章总结—数据类型
  7. arm9 安装java_QT5.7 AM1808 ARM9的交叉编译
  8. 全球信息产业的云转型浪潮
  9. 基于BP神经网络和ORL库的人脸识别matlab仿真
  10. ul阻燃标准有几个等级_UL阻燃等级介绍说明
  11. 琼斯是计算体心立方弹性模量_本科阶段固体物理期末重点计算题.doc
  12. ftp服务器在线编辑,ftp服务器上怎么直接修改office文档.
  13. 什么是共享设备,对共享设备如何分配?
  14. html网页文字链接的若干问题
  15. 让VMWare拥有Intel千兆网卡
  16. 超全!互联网大厂职级薪资表,全国各地互联网大厂分布(校招/社招/考研/考公)
  17. 《期权、期货及其他衍生产品》读书笔记(第八章:证券化与2007年信用危机)
  18. 在线查询倒闭公司数据
  19. 2W字!详解20道Redis经典面试题!(珍藏版)二
  20. 非参数统计的Python实现—— Mann-Whitney 秩和检验

热门文章

  1. 8大基本数据类型各占多少字节和一些单位常识
  2. 2021Java面经:【漫画(2)
  3. 论文笔记(十六):Learning to Walk in Minutes Using Massively Parallel Deep Reinforcement Learning
  4. Visual Studio设置release版本可调试
  5. 垂直投影法分割验证码
  6. oracle数据误删怎么恢复,Oracle数据误删了怎么恢复
  7. python : Tkinter布局
  8. 带你了解什么是MySQL数据库(八)数据库锁机制
  9. matlab状态空间模型构建函数ss
  10. 全国大学生“高教杯“成图大赛:轴类零件的快速建模