最近睡前喜欢听一听鬼吹灯,在某听书软件上发现需要购买会员才可以免费听,但是每天也就听个一两集,感觉包月买会员有点不值当,刚好最近要把好久没用的Xposed复习一波的想法,买一个月的会员把自己想要听的书都下载下来,为自己搞一点小福利。
抓包分析
想要模拟应用下载资源的过程,首先需要抓包分析我们到底需要模拟哪些数据包,什么参数需要通过Xposed插件来Hook或者调用获取。
请求对应书籍的章节列表,下图是书籍首页列表,每次上拉刷新20个章节,第二页请求与第一页有一些差别。
通过请求章节列表来获取章节id以及章节名用于给下载好的文件命名。通过下述请求获取到的track_id来请求每个章节返回的下载链接,下载链接包含在返回的ep和fileId中,这两个参数都被加密了。
- 在解密ep和fileid之后,直接请求download_url即可获得音频文件,保存到本地即可。
分析调试,定位关键函数
通过在ep和fileid下断点,动态调试定位到解密这两个字段的位置及函数
进一步调试发现两个解密函数都在EncryptUtil这个类中,因此后续只需要想办法通过Xposed调用这两个函数即可
编写Xposed插件
想要通过python编写脚本与Xposed插件进行通信,传输数据可以采取socket或者搭建http服务器两种方式,这里我采取了通过nanohttp搭建小型服务器达到数据交互的效果。
由于需要调用的两个函数都包含Context类型的参数,那就需要找到调用该Context的函数将其Hook获取到。
同时需要注意的是要调用的函数并不是static函数,因此在invoke的时候第一个参数不能为空,需要赋值函数实例,找到同在这个类中的任何一个函数进行Hook获取其实例。
我这里Hook了同类中一个native函数,获取实例及Context。
之后通过接收python客户端传的ep和file_id参数及Android服务端Hook获取到的方法实例及Context参数进行invoke调用
总结
本文主要是为了记录一下在复习Xposed利用所学习到的一些东西进行技术交流,禁止用来做非法恶意事情,否则后果自付!如有侵权,请联系作者删除。