受害者:
6ZqG5LyX5pWw5o2u
通过 Charles 抓包发现关键信息请求均携带 sign
参数,且每次请求的值都不一样:
![](https://img.haomeiwen.com/i9189384/b613807e854c3f48.png)
使用 jadx 将对应的 apk 反编译并分析,全局搜素 "sign"
关键字没有相关结果。通过生成的代码文件结构大概可以判断该 apk 使用了 360 加固:
![](https://img.haomeiwen.com/i9189384/6312b309966a63fb.png)
通过 FDex2 获取响应的 dex 文件,再次使用 jadx 打开,搜索关键 "sign" 即可出现结果。
耐心分析即可将代码定位到实现加密的地方:
long a = DateUtils.m18817a();
request.headers("timestamp", String.valueOf(a));
request.headers("sign", Tools.m20203a(a, request.getBaseUrl()));
m20203a
方法定义如下:
public static String m20203a(long j, String str) {
HashMap hashMap = new HashMap();
hashMap.put("timestamp", String.valueOf(j));
hashMap.put("path", str.substring(27, str.length()));
hashMap.put("version", "1.0.0");
StringBuffer stringBuffer = new StringBuffer();
for (Map.Entry<String, String> entry : m20205a((Map<String, String>) hashMap).entrySet()) {
stringBuffer.append(entry.getKey());
stringBuffer.append(entry.getValue());
}
stringBuffer.append("FA0338436BFA405CAE9161748831F40B");
return MD5Util.m18744b(stringBuffer.toString().trim().getBytes()).toUpperCase(Locale.CHINA);
}
到此加密逻辑就显现了,即通过对请求的 URL 的一部分、当前时间戳和版本号加上指定字符做哈希处理。
对于 java
不太了解的情况下,也可以将相关代码抠出来,放到新的 java
文件中,编译后通过 python
执行终端命令运行对应的 java 类即可获取加密的结果。
网友评论