首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

安卓app动态调试,内购破解滑雪大冒险

内购的游戏是小米版的滑雪大冒险,比价有意思的小游戏;通过对滑雪大冒险小游戏综合运用apk逆向、java代码分析、smali分析、动态调试等基础方法。

内购破解之前的游戏,地图和道具都需要付费:

首先还是需要使用Androidkiller对apk进行反编译,同时使用JEB获取java源码,但是在本次案例中JEB并不能反编译该apk,原因是内存太小。

因此查看该app对应的源码使用Androidkiller继承的GD-GUI软件,andkiller反编译后如图:

但是该如何下手?如何找到支付相关的模块,有几种思路:观察自带的日志信息、命令行打印出操作界面对应的页面信息,如图:

这里首先去看看日志,在点击支付的时候同时观察日志信息,还是会发现一些有价值的信息:

发现其中疑似支付相关的是:Yodo1PayHelper, startPay call ...,那我们可以查找关键词Yodo1PayHelper、startPay,在查找之后还真有相关的类和方法:

一个带有支付字样的关键词方法pay,那这就是和支付相关的,然后再看这个方法对应的java源码,以便查找相关的逻辑:

这段代码很长,逻辑又相对混乱直接看java源码分析逻辑是比较困难的,那就只有先看看代码中的一些提示信息,比如:这是已购买的商品,购买成功。

这里有很明显的逻辑逻辑判断,但是我们依旧无法知道这部分是佛在支付成功的前提下执行,或者不管支付成功或失败都会效验一下。

这种情况下要么修改smali代码然后打包运行一下,要么就动态调试一下设置一个断点,看该处逻辑是否被执行。

在Androidstudio中导入反编译后的项目目录,然后设置好断点;接着在smali源码的AndroidManifest.xml文件中,application标签下设置android:debuggable="true",然后打包安装。

安装后在adb命令下设置转发:

pid是对应的apk进程号,通过下面命令获得:

接下来就是在Androidstudio中设置远程调试端口:

然后点击运行apk,在点击debug,可以看见当我们取消支付后会停在我们设置的断点处:

以及一些堆栈信息都可以找到,可以分析出是经过了之前的逻辑代码,并且在支付不成功的情况下是跳过了的,我们只需要找到对应smali逻辑修改一下即可,最后效果如图:

在支付界面点击返回即可,购买成功!

安卓逆向更像是一场瞎猫碰上死耗子的奇遇。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190906A0KOP200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券