python爬虫逆向,某高考志愿填报平台加密参数signsafe与返回结果解密

网站链接

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的吧,毕竟抄起来比较方便。(^▽^)

结语

有时候换一种思路,可能真的会事半功倍

猜你喜欢

转载自juejin.im/post/7033294496263569415