yangyunhui

功不唐捐,玉汝于成

Android逆向学习笔记(三)

安卓逆向学习笔记(三)

安卓逆向第三课

目录


切水果游戏

原apk文件: 通过网盘分享的文件:cut_fruit.apk
链接: https://pan.baidu.com/s/1w0AvkaUB-dHTnQgdlcGT8g 提取码: yjkb

第一种方法

我们下载好文件之后,需要考虑一个问题,也是我在笔记二中踩坑很久的问题。

因为我们修改完apk之后是要根据签名去编译的,所以在开始修改文件之前,我们需要对文件进行一些操作。

  1. 解包文件
  2. 删除签名文件(META-INF)
  3. 打包
  4. 加签名

这些在我的第二篇文章中有具体命令,但是在这里我还要说一下,如果说显示内部没有该命令,我们进行第1,3步骤时,可以这样做:

  1. 解包: 使用命令java -jar D:\ruanjian\apktool\apktool_2.12.1.jar d "D:\ruanjian\cut fruit\cut_fruit.apk" -o "D:\ruanjian\cut fruit\cut_fruit_d.apk"

  2. 打包: 使用命令java -jar D:\ruanjian\apktool\apktool_2.12.1.jar b "D:\ruanjian\cut fruit\cut_fruit_d.apk" -o "D:\ruanjian\cut fruit\cut_fruit_dns.apk"

  3. 加签名: 我们进入AS文件夹下的D:\AndroidTools\SDK\build-tools\35.0.0

    使用命令: apksigner sign --ks "D:\Key.store" --ks-key-alias "key0" --out "D:\ruanjian\cut fruit\cut_fruit_ds.apk" "D:\ruanjian\cut fruit\cut_fruit_dns.apk"

这些是我们开始的前提条件,我们打开原版文件看看软件打开是什么样子的。

这是购买界面,当我们点击购买时会出现

我们可以判断在代码中可能也会有 **支付失败 ** 字段,我们将该apk文件拖入AS中进行反编译

我们使用在线 Unicode 编码转换 | 菜鸟工具得到支付失败的unicode编码是\u652f\u4ed8\u5931\u8d25

在AS中进行搜索,发现

很奇怪,字段不是支付失败,可能是其他的?那我们直接搜失败吧

失败的unicode编码是\u5931\u8d25

在AS中搜索\u5931\u8d25

经过我一个一个检查,我发现框住部分是有用的(购买失败)。

在这个函数中,有支付成功,支付失败,支付取消这三种逻辑。我们的目的就是无论是支付取消还是支付失败,都是支付成功的效果。

在这个和第二篇笔记的思路一样,因为不太理解函数内部实现逻辑,所以直接将支付成功的代码,粘贴到支付取消,支付失败的函数中。

第二种方法

第二种方法是老师的方法,找到调用购买失败函数的函数,将调用的这个函数都改成购买成功的函数就可以了。

我这样说可能很难理解,我们看一下代码就非常清晰了。

我们先搜索购买失败这个函数,也就是payResultFalse函数

红框圈住的分别是三个分支:

  1. 购买取消
  2. 购买成功
  3. 购买失败

看smali代码很难理解,我们可以看看它的java源码。我的AS不知道为什么不能转换,但是没关系,我们可以使用jadx查看源码

很明显,这里老师的思路就是:无论resultCode是多少,我们调用的都是payResultSuccess函数。

非常好办,直接将红框中的函数都替换 payResultSuccess函数:

改成这样就ok了。

第三种方法

我想到的方法是将失败函数与成功函数名进行对调,但是貌似不可以

看一下破解后的游戏界面

作业

作业的apk文件我下载的都有点问题,暂时先将这个部分跳过,有机会再写。