作者:dawu@知道创宇404实验室
时间:2019/02/25
英文版本:https://paper.seebug.org/943/
如果你想第一时间了解漏洞资讯,可以关注我们的知道创宇Paper:https://paper.seebug.org/829/
这是一篇游戏引发的简单技术文。
起因是个人很喜欢玩 google play
上的一些数字类型(角色攻击是线性增长,怪物指数变强,到后期越打不过,通过重生增强属性变强)的小游戏。但是这种游戏仍旧存在一定缺陷,前期资源不多,玩的太慢、玩的时间长了,就感觉没意思,就不想玩了,所以在玩到游戏中期的时候,往往都会去网上搜索XXX破解版/内购版,快速进入后期然后放弃这款游戏。
这样的做法其实是很不安全的,因为无法判断XXX破解版/内购版在破解/内购之后还做了什么。所以我最后的解决办法是,逆向这些apk,修改游戏逻辑。让我在玩的时候,可以快速度过缓慢的前期。
逆向了几个玩过的游戏,发现这类游戏使用Unity3D开发的居多。因此本文将介绍简单Unity3D类安卓游戏的逆向修改思路。
逆向最简单的Unity3D类安卓游戏建议使用安装好 JAVA 环境的Windows系统(涉及到dll文件的修改,所以Windows平台更加适合)。
一般 APK 逆向,常使用到 apktool
、dex2jar
、jd-gui
。在逆向 Unity3D 安卓游戏时,仅仅只需要使用到 apktool
因为一般的 Unity3D 安卓游戏的主逻辑都在 asserts/bin/data/Managed/Assembly-CSarp.dll
中,所以我们还需要 dll文件逆向/重新打包
的工具。
C:\Windows\Microsofr.NET\Framework\v4.0.30319\ilasm.exe
修改完 apk 之后,需要对 apk 进行签名。该命令用于生成签名的证书。
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 0validity 10000
# 记住设置的密码,最后自签名应用的时候需要输入密码
用Unity3D开发了一个简单小游戏作为本文的样例,逻辑十分简单:
具体代码可以参考 Github
1.使用 apktool
解压游戏安装包
java -jar apktool.jar d game.apk
2.提取出 game/assets/bin/data/Managed/Assembly-CSarp.dll
,使用 ILSpy
打开即可看到 dll 里面的逻辑。
注: Unity3D开发的安卓游戏,其核心代码都在这个 dll 文件中,所以逆向/修改这个 dll 文件就可以了。这也是 Unity3D 和 其它安卓逆向不同的地方。
在没有混淆的情况下,反编译出的函数内容和原内容十分相似:
ILSpy 反编译的 Click1 内容
3.找到关键函数、关键逻辑后,就可以尝试反编译 dll
文件并修改。使用 ILDASM
将 dll
文件反编译成 il 文件。使用 ILDASM
打开 dll
文件后, File -> dump
就可以导出反编译结果了。
4.根据步骤2,就很容易理解逻辑了,然后根据速查表,就可以知道在步骤3导出的il
文件中修改哪里了。例如步骤2中 Click1
就是游戏中 点击闯关
按钮绑定的逻辑。闯关的关键判断就在: info.hero_power + info.temp_power + info.add_power >= info.monster_power
。所以打开步骤3中生成的 .il
文件,结合 .NET IL 指令速查表修改这部分对应的关键逻辑即可。
修改为 info.hero_power + info.temp_power + info.add_power != info.monster_power
就可以通过此处的逻辑判断。
5.修改关键逻辑后,通过重新编译 dll
文件、apk
文件、签名修改后的 apk
就可以在手机上安装运行了。
重新编译dll文件命令如下:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe game.il /output=Assembly-CSarp.dll /dll
将重新编译的dll放回 game/assets/bin/data/Managed/
目录下,使用apktool重新打包apk:
java -jar apktool.jar b game
cp game/dist/game.apk ./
自签名应用:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore game.apk alias_name
6.修改成功,开局修炼一次后,就可以无限闯关。顺利到达第30关。
本文由 Seebug Paper 发布,如需转载请注明来源。
欢迎关注我和专栏,我将定期搬运技术文章~
也欢迎访问我们:知道创宇云安全 :https://www.yunaq.com/?from=CSDN91905
如果你想与我成为朋友,欢迎加微信kcsc818~