1. 首先打开app , 然后使用代{过}{滤}理抓包,发现当选择一门学科的时候,app会下载一个zip文件, 里面有一个json文件, 推测这就是习题数据, 但是解压的时候发现需要密码
使用jadx 进行反编译源码, 发现apk里面自带了两个zip包, 推测是测试使用, 代码中应该有代码留存痕迹
根据zip的名称在代码中搜寻, 找到了变量, 然后查找调用本参数的方法, 找到了一个方法
MD5Util.m16624a() 应该就是解压密码, 然后点进去看一下
这里就是 把参数转成md5 32位小写, 最后查看一下参数的构造
开始写frIDA hook代码
[Python] 纯文本查看 复制代码 Java.perform(function () {
var currentApplication = Java.use("android.app.ActivityThread").currentApplication();
var dir = currentApplication.getApplicationContext().getFilesDir().getPath() + '/f5d2de26-f04a-11eb-8a4e-00163e02541d.zip';
var substring = dir.substring(dir.lastIndexOf("/") + 1)
send(substring.replace(".zip", ".json") + "zsalt");
var md5_data = substring.replace(".zip", ".json") + "zsalt";
var md5_util = Java.use('com.sprite.foreigners.util.r');
send(md5_util.a(md5_data));
});
返回的md5值就是解压文件的密码了, 然后我们换上下载的zip文件名, 测试可以正常解压, 最后解析json文件就可以了
注: 在解析json文件的时候遇到两个小问题 真是(城市套路深,我要回农村)
1. 解析json文件后与app数据进行对比, 发现有20%的数据是错误的, 抓取请求查看也没有正确的数据, 后来想到自带的zip里面的json文件, 通过两个json中的id进行关联, 发现正确的数据就在自带的zip文件中
2. 自带的zip中的json文件中, 所需要的数据的key 是会变动的, 比如说上个数据的key 是key1,下个就变成keyN了
|