网站链接
aHR0cHM6Ly9na2N4LmVvbC5jbi9zY2hvb2wvMTQwL3Byb3ZpbmNlbGluZQ==
抓包分析
发现一个加密参数signsafe
并且返回数据也是加密的
加密参数以及返回内容分析
signsafe
关键词搜索,发现只有一处定位
点进去,再次搜索关键词signsafe,发现也基本定位到了加密位置,那就打上断点
第一个f值,也就是p值,就是请求的接口的url
欢迎关注我的微信公众号:
接着看v.default.enc.Utf8.parse(f),点进去看看,是个webpack,难道又要一步步导出再分析吗?
先看看有没有其他办法吧,因为看到了关键词HmacSHA1,Base64,那就看看这个v.default是什么,如图,这就让人联想到了js的加密库crypto-js
再看下最后一步的f是什么,发现就是个md5
试着用node+crypto-js重写下,发现与上图结果一致,撒花
返回内容
在抓包分析中的返回结果里,看到了一个关键词aes,那就先搜搜看。
把可疑的位置都打上断点,最终定位到了这里
打印下JSON.parse(B.toString(v.default.enc.Utf8)),发现就是我们想要的结果了
那就仿照着signsafe的思路,直接用node+crypto-js重写,最终重写逻辑如下
var CryptoJS = require("crypto-js");
function dataRes(u, N){
let w = u;
let P = CryptoJS.PBKDF2("D23ABC@#56", "secret", {
keySize: 8,
iterations: 1e3,
hasher: CryptoJS.algo.SHA256
}).toString();
let q = CryptoJS.PBKDF2(w, "secret", {
keySize: 4,
iterations: 1e3,
hasher: CryptoJS.algo.SHA256
}).toString();
let H = CryptoJS.lib.CipherParams.create({
ciphertext: CryptoJS.enc.Hex.parse(N)
});
let B = CryptoJS.AES.decrypt(H, CryptoJS.enc.Hex.parse(P), {
iv: CryptoJS.enc.Hex.parse(q)
});
let A = {
code: '0000',
data: JSON.parse(B.toString(CryptoJS.enc.Utf8)),
message: '0000',
}
return A;
}
复制代码
就得到了我们想要的结果了。
当然标准加密库的加密,我们也可以用python去重写,有需要可以自行去实现啦,这里暂时只写js的吧,毕竟抄起来比较方便。(^▽^)
结语
有时候换一种思路,可能真的会事半功倍