安卓从开发到逆向(三)逆向破解简单安卓手游,无限生命

3,030 阅读2分钟

在上一篇文章,我们学习了

juejin.cn/post/684490…

简单的认识了java代码和smali代码之间的对应关系,本文我们结合相关知识点,进行一次实战,逆向破解简单安卓手游,让无限生命称为可能。

安卓手游apk及逆向破解工具下载地址:

链接:https://pan.baidu.com/s/1mHOl9y-LXnETUg3oDAKNvA 
提取码:3ygd 

准备工具:

android killer,安卓手游1,夜神模拟器

我们先将安卓手游安装到夜神模拟器中,运行一下,看一下游戏初始给我们多少生命值。打开游戏后,点击商店,我们可以看到,游戏初始给我们提供了15个小球,3个护盾,0个通关钥匙,以及两次复活爱心。


接下来,我们点击无限量的球,购买道具,选择其他支付。


模拟器要求安装插件,点击取消,不安装。


此时无法购买即支付失败。使用androidkiller,对这款手游进行逆向破解。此时可以卸载在夜神模拟器中原始,也就是未破解前的手游app了。

打开androidkiller,将apk拖入软件,进行逆向破解。


如果androidkiller卡在正在反编译 APK 源码,请稍等...,则需要关闭androidkiller,重新打开。

切换到工程搜索,在搜索框中输入 支付失败 ,点击左下角的Aa,将文本转换为unicode,并点击搜索。


根据关键字特征,我们找到了支付失败文本所在的代码段


接下来,我们可以点击菜单栏的java图表,进行java和smali代码的对比分析。


在java代码中,我们可以看到,当前类OppPay$2$1中包含两个方法,分别为onFailure和onSuccess,同样的,在smali代码中,也存在着onFailure和onSuccess两个方法。通过阅读java代码,大致了解其支付逻辑。我们就可以着手于修改smali代码了。

我们的修改方法有两个,分比为:

1、将onFailure中的代码替换为onSuccess中的代码
2、找到onFailure方法的调用处,将其替换为onSuccess方法

经过对比分析,第一种方法更为简单。

我们复制smali中onSuccess的代码,替换onFailure代码。


修改后,切记,一定要保存。

接下来,我们点击androidkiller中的android标签,点击编译,重新将smali代码编译成apk包。


重新编译的apk包保存在当前项目目录下。


接下来就是见证奇迹的时刻了,我们将破解后的apk安装到夜神模拟器当中,运行,点击商店,购买无限量的球。


接下来,点击 其他支付


app提示安装插件,我们选择取消安装。


这时,我们就可以看到,原来的15个小球,现在变成无限量的小球了。


动手尝试一下吧。

代码参考

https://github.com/freedom-wy/reverse_android/tree/master/project/gddtk_game