Jian丶ylt 发表于 2018-10-8 18:42

内购?笨人自有笨办法

前两天偶然读到一篇文章:

https://blog.csdn.net/charlessimonyi/article/details/52027563

是讲在smali中插入log,通过打印log的方式,将程序执行某一步锁调用到的smali中的方法挨个打印出来,方便调试。

研究学习了一下

为什么要使用他?因为我本身代码基础比较差,所以分析起来会比较吃力,说实话,你让我手动插入个log我都不知道该往哪插,所以干脆将所有能插入log的地方都插入一下,然后一步步去分析,这里要再次感谢下原帖作者。


另外论坛中有个小伙伴已经把帖子中的代码工具化了,这里我附一份我保存的工具链接,忘记那个小伙伴是谁了,这里就不附链接了,总之感谢小伙伴的分享

链接: https://pan.baidu.com/s/1b6UIDGQp0je1FJp_ubBnCg 提取码: 9igf


使用姿势:

[*]将工具目录中的除readme外的三个文件copy到apkkiller的根目录中
[*]反编译apk工程
[*]运行InjectLog.bat文件,输入apk名称(不带.apk后缀)(因为是python脚本,所以整个过程中不建议使用任何中文路径。否则自行调试脚本)
[*]脚本执行完成后回编译,打开android monitor,查看log的工具
[*]新增日志过滤,内增加InjectLog字段


先找一个练手的app吧

链接: https://pan.baidu.com/s/1itYjjNJxQZUAcpqtvI0Tvw 提取码: hsaa

这个app是之前论坛小伙伴破解过的一个,我习惯在论坛中找练手的项目。这样在处理过程中如果遇到问题,之前有小伙伴已经解决掉了,自己没思路可以参考下,原贴同样没保存,抱歉

接下来进入正题

实际使用InjectLog的时候发现,如果所有smali方法中都加入log输出,可能实际游戏在运行的时候会循环输出N个日志,一个个删起来可能会比较累,因此可能需要根据实际情况去使用log输出定位问题

查看下该apk的smali的目录结构



通过观察我觉得,破解支付的时候需要关注主activity,另外由于这个是个migu的游戏,所以migu的sdk应该也需要关注一下,因此只将这两个目录下的所有smali文件添加log即可

添加方式:

[*]将InjectLog.smali放入反编译后的project/smali/com/hook/testsmali/ 目录下
[*]将InjectLog.py文件放入分别放入到截图中的leidian目录下和Sdk目录下,然后执行一下(可能脚本实际在小伙伴环境下运行的时候会有问题,这个时候就需要一定的python基础,可以让脚本正常运行,个人觉得比较简单)
[*]python执行完毕后删除python脚本


然后回编译,在游戏中调起支付窗口然后再关闭支付窗口看下log输出





先来看关闭支付窗口的时候他调用的这个方法是干哈的



这个是返回支付结果的,通过分析java代码可以知道,关键就是红框中的GMessage.success()方法是处理支付成功的

先看看GMessage.success()对应的smali代码



如图,GMessage.success()对应的就是第一个红框中给的那一行(没有任何分析步骤,就是猜的。我这么烂的水平都能分析出来)

所以,我们只需要再找到调起支付窗口的方法,然后将这段直接支付成功的代码给复制过去就ok了,嗯,理论上是这样的。

那么接下来就是从调起支付窗口时候调用到的一系列方法中找到正确的那一个即可。

通过看日志,主要的文件无非就两类,一类mainActivity的,一类migu的,通过实际游戏操作可以看到,被调起的支付窗口有migu字样。所以我猜测,应该是migu的sdk自带的支付窗口调用





第一个log中调用到的是miguPay方法,猜测一下,这个方法内的这一行代码是否就是调起支付界面的那个方法呢?先试试看好了,替换掉miguPay方法中的smali代码为直接支付成功那一行

改完后的smali应该长这样



然后回编译试一下

直接就购买成功了,没有弹出支付界面,开心

另外发现个其他烦人的问题:广告



这是我无法容忍的。之前破解内购的时候没注意看,现在再来翻过头来分析一下,这个广告是在一启动游戏的时候就出来的,所以我怀疑应该是绑定在启动activity上的,先看看清单文件中哪个是启动activity



如图,得知了哪个是主activity。

然后我发现一个很惊奇的事情,smali目录下没有找到cn目录。这完全颠覆了我的认知啊。什么鬼啊?这我要怎么办啊?这个apk怎么不按常理出牌啊

其实如果我将所有smali都加入打印log的方式然后将哪些会循环打印出来的log手动去掉,然后再按照之前的方式去分析的话其实是可以的,但是这样分析的过程会比较久。因此,带着分享的内容和疑惑在此发帖,请大神答疑

个人总结一下这种分析方式:不想说很好,但是也确实对于帮助了我们去分析和理解。希望对大家有用

好久没在论坛发帖了,不知道这样的格式实际出来什么效果;如果格式不过关麻烦管理及时通知


Jian丶ylt 发表于 2018-10-17 20:33

绿雪羚羊 发表于 2018-10-17 12:42
经测试,确实是插入log后导致的,不插入是可以运行的。

百度网盘今天疯了,十几k每秒的速度,下载了好半天才下载完,我试过插入log了,插入log后回编译运行游戏没发现你说的闪退问题。但是插入log的过程中批处理脚本运行到一个位置的时候有卡了一下,我在想,是不是插入log的脚本还没执行完你就关闭了cmd窗口,导致部分文件损坏。正常插入log我这边确定游戏是可以运行的

冥界3大法王 发表于 2018-11-19 16:00

@Jian丶ylt
安卓破解最大的难点是:
1,得静态分析,这点不像OD什么的,马上能看到过程结果,猜到流程
2,若上IDA进行分析,道行得高,也不不是一帆风顺的
3,对于网络程序,对于支付程序,有的还有自校验,比如广告很多的,改的不到位就不知哪里出问题了,到处闪退。
所以,抓包+DDMS+输出日志,还是超级关键的,不然 头大三号。
楼主,你还可以弄个循环,输出编号A1,A2,A3。。。。。这样日志就更有针对性了。

seimei_cla 发表于 2018-10-8 18:57

有点厉害!!!学习一下!

xiaowanzi52 发表于 2018-10-8 18:58

我去不亏是许代码的,厉害我得哥呢 !

狂侠先森 发表于 2018-10-8 19:10

哈哈,支持一波

yssun 发表于 2018-10-8 20:15

有点厉害!!!学习一下!

123benny456w 发表于 2018-10-8 20:21

厉害啊 收藏了 有时间试试

kk1212 发表于 2018-10-8 21:16

你的这个方法不错,不管是什么方法只要能达到目标就OK   

加大死时间 发表于 2018-10-8 21:42

感谢分享!

ydsnlt 发表于 2018-10-8 21:58

厉害了我得哥呢 !

cqom 发表于 2018-10-8 21:58

这个必须顶
页: [1] 2 3 4 5 6 7
查看完整版本: 内购?笨人自有笨办法