首先需要一部可以root的手机,小米,锤子。魅族,vivo,华为(需要先解锁)。然后安装xposed模块和JustTrustMe模块。
然后电脑端打开Fiddler,打开远程调试。端口默认8888(可以更改)
手机访问电脑ip地址+:端口(我的是192.168.0.102:8888),下载fiddler证书,安装.
然后就可以抓包了。
启动软件,开始抓包,打开一个付费课程,抓包结果如下:
1cccadb8b2acffa3180f46f6c3c8179a.png (218.32 KB, 下载次数: 0)
下载附件
2022-8-6 10:58 上传
edaf9207f62cf7be7bb9580d176357ae.png (201.11 KB, 下载次数: 0)
下载附件
2022-8-6 10:58 上传
首先是一个https请求,格式是 https://courseware-ocs.hjapi.com/v5.2/courseware_contents/课程地址?key=**&part=1
注意到请求时带上了Tenant-id和sign。
返回的就是一个json。其中data就是加密的m3u8地址
然后通过解析data数据,获取到m3u8地址
6301ba0090774af156feaae66c8182fe.png (152.77 KB, 下载次数: 0)
下载附件
2022-8-6 10:59 上传
然后通过访问m3u8分片的ts地址,获取ts视频流。当然,这个视频流仍然是加密的。
此时,就需要逆向客户端了。
首先查壳,
IMG_20220806_105141.jpg (28.8 KB, 下载次数: 0)
下载附件
2022-8-6 11:01 上传
未加壳。但是看源码可以发现有混淆。
我们可以hook一下代码,批量去混淆,也可以用arm直接去混淆。不过关键函数不在java层
2c8c56137b04e95875188f1085d1f1d5.png (115.96 KB, 下载次数: 0)
下载附件
2022-8-6 11:01 上传
通过阅读代码,可以发现如上图的关键代码,就是我们刚才分析的请求json文件的url
了。和下图是对应的
dea0443f00ef323b7d058be6af674890.png (42.12 KB, 下载次数: 0)
下载附件
2022-8-6 11:03 上传
继续跟踪下去,可以发现解密函数是在com.hujiang.ocs.decrypt.model这个包下
046ab2c633eed812dfdabba6661d1802.png (137.03 KB, 下载次数: 0)
下载附件
2022-8-6 11:04 上传
3457447fe8c5bc9da7ae9f1a9a785692.png (16.17 KB, 下载次数: 0)
下载附件
2022-8-6 11:04 上传
如上图,最终可以发现是通过JNI调用的so文件,所以接下来要对so进行分析。
打开ida,加载so
3eef5938794ddcc46c9ef3d15d677c59.png (172.49 KB, 下载次数: 0)
下载附件
2022-8-6 11:06 上传
配合伪代码和动态调试进行分析
8279b825171b35c7489072e948c11db5.png (131.92 KB, 下载次数: 0)
下载附件
2022-8-6 11:06 上传
经过耐心分析,最终可以把解密算法给分析出来,这里就不贴出代码了