本篇博客旨在记录学习过程,不可用于商用等其它途径
入口
小组里面全部讨论数据列表

抓包
根据抓包结果,_sig参数是动态生成的,需要破解

查克
使用PKID查壳工具发现app并没有加固

参数源码定位
使用jadx打开apk,全局搜索_sig参数,下图是搜索结果

这个参数使用的地方不多,仔细观察找到具有赋值作用的代码行并逐个进去观察,根据Request、FormBody、_ts、_sig确定这是具体加密位置

源码分析
接下来找到a2.first怎么来的,看下图确定a2是通过ApiSignatureHelper.a(request)得到的,双击a进入它的具体实现代码

大家看下图,实际调用是第一个a,不过它重载了另一个a方法,这个才是具体的加密位置

第一个a传递的三个参数分别是:
request.url().toString():请求url
request.method():请求方式
header:请求头的Authorization参数,如果有则取前七个字符
其实在抓包时就能知道这三个的内容了,所以这点不难

第二个a直接看到最后一行,最后返回了new Pair<>(HMACHash1.a(str4, sb.toString())和String.valueOf(currentTimeMillis))两个值,其中第二个值是时间戳,对应上_ts,所以_sig是通过new Pair<>(HMACHash1.a(str4, sb.toString())得到的
把代码修整一下方便阅读,其中StringPool.AMPERSAND就是&,可以知道加密文本就是对url, methood, authorization三个参数与时间戳进行判断拼接处理,其中url截取的是路径,不包含后缀参数,按本案例来加密文本就是GET&%2Fapi%2Fv2%2Fgroup%2F721771%2Ftopics&1721737945
public static Pair<String, String> a(url, methood, authorization) {

最低0.47元/天 解锁文章
7658

被折叠的 条评论
为什么被折叠?



