一、前言
关于支付宝的蚂蚁森林能量收取这个非常有重大意义的东西,本人表示非常认同,这个网上也是一直有人觉得马云是一个非常有远见的男人,的确虽然很多人觉得马云不会技术但是很能说,但是他说的都慢慢实现了,先不管这个种树到底能不能落实,马云的确在带领着阿里帮助世界地球变得越来越美好,而隔壁的企鹅公司暂时不评论。我们如果玩过能量收取都知道他有一个弊端就是每天早起收能量有时候会发现自己的能量被别人全部偷完了很不爽,而且自己在收取的时候也会发现非常的慢和难受,特别在好友比较多的时候。所以针对这么多问题就开发了一个自动收取的插件,还记得当初偷菜插件吗?和那个类似可以设置指定时间自动收取和偷取被人的能量的一款插件。
二、寻找突破口
不多说了接下来就开始分析如何编写这个插件,我们现在写插件都是基于Xposed的,而之前说过支付宝有防止Xposed的功能,所以我们得先把这个功能给干掉,不了解的同学可以点击这里进行查看,那有的同学就好奇了为什么不用辅助功能做模拟点击呢?这个后面分析你就知道了,没法用辅助功能进行模拟点击的。接下来我们先找突破口,这个没的说一切从我们肉眼获取,分析界面信息:
这里看到了吗?非常奇怪的是页面非常简单,在我们没有写这个插件之前我以为这个页面很简单,是一个列表而已,但是不是。就是一个View,其实到后面会知道他是一个WebView而已。所以这里就解释了之前有的同学说用辅助功能做模拟点击,这里可以发现完全做不了的。所以我们得换个思路找突破口。因为这个页面不管是一个什么样的View,我们只要找到一个核心点即可。那么这里在给大家介绍一个寻找突破口的方法了,因为这里没有太多的字符串信息,也没法用搜索大法了。那么可以查看当前调用了哪些方法来找突破口,很多人想到了我之前写的icodetools工具了,但是那个工具这里不适合因为支付宝的包太大了,如果用那个工具会发现页面完全卡死了,那么该怎么办呢?
这个可以借助DDMS工具自带的方法调用栈信息了,不过可惜的是这个获取的前提是这个应用出于可调试状态,也就是要在DDMS列表中出现。那么支付宝肯定是不可以调试的,所以让他出于可调试的我们可以这么做反编译支付宝之后修改xml的android:debuggable="true"属性,然后回编译即可。这里有两个问题在我实际操作的过程中,一个是支付宝反编译修改添加都没有问题,但是回编译可能有问题。那么可以直接用AXMLEditor工具进行xml的二进制文件修改,然后签名,可惜的是支付内部有校验,这里用了kstools么有效果,可能是他内部用了其他的签名校验逻辑。到这里我们难道还需要先破解他的签名校验吗?感觉写个插件得解决很多问题。不过这里在告诉他家一个小工具就是可以临时修改设备的系统调试状态值mprop工具,这个我在之前脱360壳的时候介绍过了,不过这个工具现在有更新版本了。后面给出下载地址。工具使用非常方便:
在目录下找到指定cpu型号的mprop文件拷贝到设备目录下,然后修改权限为可执行的,然后直接运行三条命令即可:
# 修改init进程中的ro属性判断逻辑
/data/local/tmp# ./mprop
# 然后修改系统调试属性值
/data/local/tmp# setprop ro.debuggable 1
# 恢复init默认逻辑,之后就无法再修改ro属性了
/data/local/tmp# ./mprop -r
执行这三个命令之后就可以了,然后在查看这个属性值:
这里已经成功修改了系统的调试状态为1了,那么设备中所有的应用都可以出于调试状态了,即使没有android:debuggable="true"属性的应用。所以可以看到这个小工具的作用是非常的大了,而且也看到在逆向操作中如果有一些辅助小工具的话,效率是非常高的,这个工具大家也一定要记住他,在你以后逆向过程中肯定还会用到。然后我们在打开DDMS就可以看到支付宝主进程就出现了:
然后我们选择左上角那个可以获取当前方法执行的堆栈信息,然后弹出对话框我们选择下面一个,就是实时的每个方法都获取,避免丢失关键方法,但是这个会有很多大的效率问题也就是点击确定之后你的支付宝应用会卡死,所以这里操作的时候是在进入蚂蚁森林的页面那一刻才点击OK,然后等页面加载完成就立即点击结束也是右上角那个按钮即可: