教我兄弟学Android逆向03-课后作业

《教我兄弟学Android逆向》03的课后作业。

教程笔记

关于AndroidKiller

AndroidKiller中可以直接将待搜索中文转换为Unicode编码格式,点击下图中红框所示按钮即可。

关于smali中的switch语法

要求

  1. 跟着教程1破解游戏。
  2. 自己尝试破解教程2教程3中的游戏。

作业1

教程笔记

除了对以下常用关键码的积累,在分析时也可关注应用程序运行时打印的Log信息,从Log信息中获取对应当前应用程序的关键特征字符串,用以定位关键代码。

破解时可进行搜索定位的关键支付特征码

运营商网络 特征码 备注
中国移动 46000、46002、46007、46020 return 0 getMobileType
中国联通 46001、46006、46010 return 2 getOperatorType
中国电信 46003、46005、46011 return 1 getSimType

补充:关键字符串(每个应用程序可能不一样,可根据具体的log信息寻找属于当前APP的关键字符串。)

  1. 电信支付接口:Egame支付成功Egame支付Cancelorder id等。
  2. 联通支付接口:Unicom支付成功Unicom支付cancel等。
  3. 移动支付接口:payInYidong购买成功购买失败等。

去签名认证时可进行搜索定位的关键字符串

signatures
getAPPSecretString
有侵权
BLACK_NAME
check(可疑的关键方法名)
……

去广告时可进行搜索定位的关键字符串

ad
adIntervalInit
……

在内购破解时应先去除可能会产生费用的危险权限

android.permission.SEND_SMS
android.permission.CALL_PHONE
……

统一支付接口

很多APP中都包含不止一种支付接口和方式,所以我们在破解时可能还要根据实际情况,对各个支付接口进行破解。

该APP中的几种支付方式的积累

几种支付方式包括:短信,联通,移动,电信所使用的Egame支付等。


城市飞车破解

首先

运行apk,尝试支付,并查看其日志信息,获取到一句关键日志信息如图所示,然后根据此信息“无可用支付方式”定位到关键代码。

一个小错误

其实这里搜索“无可用支付方式”定位到的并不是与打印Log消息直接相关的class,直接相关的class是通过搜索SmsIAPListenerpay failed code定位到的。

然后

就一直卡在这了,因为是用的一台没有SIM卡、通过wifi上网、并且也没有支付宝和微信的测试手机进行破解,所以应用程序安装在上面之后一直提示“无可用支付方式”,根本就不会进行后续的支付操作,一直卡在上面的关键代码和对应的相关类上,最好的解决办法是去搞一张电话卡哈哈哈。不得不吐槽,后来尝试在夜神模拟器上运行app,总是动不动就出现无响应的情况,崩溃……

不过发现

在LogUtil.class中,发现了一个有趣的情况,如下图,作者在开发APP时封装了自己的log类,但是感觉像没封装一样,毕竟只要我们在测试手机的sdcard中添加一个alg文件,该应用程序就会打印出一些测试日志。

但是比较关键的日志记录,如下图所示,LogUtil.iT在class文件中并没有看到这个等级的日志定义,所以就看不到这些日志消息。

最后

在网上搜索到的破解思路如下图所示,后续我会抽时间继续尝试,看能不能在没有可用支付方式的情况下实现成功破解。


3D狂野飞车破解

首先

运行apk,尝试支付,并查看其日志信息,获取到关键日志信息如图所示,然后根据此信息“PayResult_isAirplaneMode”“GLibPay_CM”定位到相关class文件如下图。

然后

  1. 还是卡在这里了,因为支付流程肯定是比较复杂的,而我的分析思路就存在问题,想通过定位到支付开始的代码后,一路追溯到最终的支付成功和失败的代码上去,但是这就意味着要把整个支付过程的代码都理清楚,非常的耗时。
  2. 按照之前的思路一直跟踪寻找关键支付代码,其中涉及到的部分smali文件和搜索的关键词如下图所示。

  1. 后来仔细想了想,这个app的情况和上一个(连支付窗口都没有)不一样,能够成功跳出支付窗口,而我们的目的是直接关闭支付窗口达到成功购买的效果,所以从正常情况下关闭支付窗口的提示信息支付失败入手,搜索定位关键代码。

于是

内购破解

通过支付失败搜索定位到关键代码GameleyPay.class,将其中onSuccess方法的代码复制替换onFaild方法中的代码,即可达到购买的目的。

统一支付接口

通过分析发现,该app中包含以下支付接口——

  • 移动(CM)、联通(CU)、电信(CT)
  • 微信
  • 支付宝

GLib.classinit方法中包含对CM、CU、CT这三种支付方式的switch选择,通过修改将其统一为CM。

最终

最后别忘了要删除APP里面可能造成扣费的权限,如——

android.permission.SEND_SMS
android.permission.CALL_PHONE
……

参考资料

Android各种访问权限Permission详解