Xposed之拦截经验分享
0 条评论0x00 简述
Xposed可以拦截Davik和Art虚拟机中的Java级方法,包括定义的jni接口,所以它能做的事情很多,只有想不到,没有做不到。
0x01 某信拦截
某信是国内目前最流行的通信软件,相信大家都有很多这样那样的新想法,比如某商、某营销等等;下面针对某信里面的一些拦截思路进行整理,与大家分享一下。
0x02 反编译工具
首先,我们要拦截某信,肯定是需要对某信的业务代码进行分析,所以需要对某信应用进行反编译(如果应用加壳的话,会增加一定难度,这里仅讨论未加壳的情况)。 用到的工具有:
1、dex2jar+jd-gui
很好用的一个工具,但是反编译出来的java代码会有一些错误。
2、Smali2Java
和上面的工具差不多,只有windows平台版本。
3、apktool
该工具用于对APK进行解包,如AndroidMinifest.xml文件等,它还可以把dex反编译为smali代码,当上述反编译工具得到的代码不全的时候可以结合smali代码进行分析。
0x03 功能拦截思路
大多数的APK应用都没有加壳保护,但是都进行了混淆,这样使得反编译出来的代码都是一些无意义的abcd…,这样增大了我们逆向分析的难度。所以我们需要一些方法去查找我们想要的功能,并进行拦截。
针对某信的文本、语音、图片的拦截思路都是大同小异,就是根据系统提供的方法去往上追溯分析(Framework层提供的API不会被混淆,应用和系统资源交互一定会使用到这些API),然后找到一个合适的拦截点进行拦截,然后对输入的数据进行自定义需求处理。
比如说文本的替换功能分析,我们可以通过对TextView的getText和setText方法进行拦截,因为应用要获取用户输入的消息必须从编辑框(系统控件)中获取信息,然后最终进行业务处理后进行发送,我们就可以在这一些地方进行拦截进行测试;
这样拦截后我们又遇到一个问题,因为应用很多地方都用到上述两个方法,我们怎么定位到想到的地方,这里我们可以通过打印栈信息往上分析: Log.d(tag, Log.getStackTraceString(new Throwable())); 在拦截点通过上述方式可以把调用的栈信息打印出来,结合反编译出来的代码进行分析,找到我们想要的拦截点。
与此类推,语音和图片的拦截点查找也是如此,通过对系统录音的几个方法进行拦截找到拦截测试点,再通过栈信息查找到最优的拦截点进行拦截处理。语音和图片都是文件,所以它们也可以通过文件IO的API(FileInputStream和FileOutputStream)去进行拦截然后分析栈信息。
0x04 总结
上述大概讲述了一下某信应用的一些拦截思路,这一块的理解需要更多的实践去消化,另外如果有更好的方法可以在下方给我们留言,大家一同探讨。