另一个简单的安卓游戏逆向

概述

一个简单的安卓游戏内购破解,通过建立夜神模拟器与AndroidKiller之间关联,动态获得app输出的日志信息,以此为基础进行分析。

 

工具

夜神模拟器v3.8.3.1

Andriod Killer v1.3.1.0

 

分析过程


将app安装到模拟器中,分析发现游戏中以金币为货币,金币的获取需要充值

 

因为本次需要使用AndroidKiller中的日志信息,所以需要在当前安卓设备(夜神模拟器)与AndroidKiller之间建立关联,这里采用的方法是分别执行夜神模拟器和AndroidKiller中的adb程序,从而让两者连接本地同一个接口,具体指令如下

 

AndroidKiller连接安卓设备相关资料见

https://www.52pojie.cn/thread-769707-1-1.html

https://blog.csdn.net/weixin_44538399/article/details/91419126

 

指令执行完成后,在AndroidKiller中Android选项卡下点击刷新,然后选中已经找到的设备,点击日志,进入日志界面,此时打开模拟器中的游戏,进入游戏商城,在点击金币购买按钮之前,点击日志窗口中的"开始"按钮,此时日志窗口开始获取程序日志信息。如下图

 

点击游戏中的金币购买,可以看见日志窗口中出现捕获到的日志信息,此时我们从后往前依次分析日志,根据日志信息中的字符串,使用AndroidKiller的工程搜索可以找到对应处理的代码,经过分析,字符串Failed DX_payCode2指向关键的函数,如下图

 

搜索Failed DX_payCode2发现只有一个samli文件被命中

 

使用AndroidKiller的反编译功能,得到此处的smali文件的JAVA源码,此时可以发现两个函数payFailed和paySuccess,疑似关键函数

 

仔细分析下两个函数发现,除了输出不同的日志信息(paySuccess输出的日志信息与支付成功相关),两个函数都是对OderFinish和sendMessage函数及进行调用,仅仅是调用的参数有所不同,此时大胆猜测,如果将两个函数中用于调用OderFinish和sendMessage的函数参数进行调换,是否能够达到目的。

 

找到AndroidKiller中对应的smali指令,然后将两个函数的参数进行调换,并保存修改。

 

使用AndroidKiller对apk进行重新编译打包签名,然后将得到的新apk文件安装到模拟器中,运行发现游戏金币已经可以任意购买。

posted on 2019-12-01 15:54  sdfsdfdvsd  阅读(418)  评论(0)    收藏  举报

导航