美文网首页Python集中营Python
澎湃新闻:python js逆向

澎湃新闻:python js逆向

作者: format_b1d8 | 来源:发表于2021-03-03 08:29 被阅读0次

目标url:https://www.thepaper.cn/

进入首页后,根据搜索按钮进行搜索,url为:https://www.thepaper.cn/searchResult.jsp
这是一个POST请求,参数为:
inpsearch: 红旗h5
codeData: LsF0e2W1esW8kI0H
seeda: gzA1%2BNaOjkJv1TEQV8BlnrOqr2Zg9vWXwjsZTtzbeyA%3D
suuid: e20225ee-f703-43a9-a8b1-c399b3c05712
sckval: 48da52276a132e1f1811b2838ab8b913
上述参数中,codeData和suuid可以直接获取,url为:https://www.thepaper.cn/getCheckCodeData.jsp
发送post请求就可以拿到(见下图)
suuid和codeData获取

接下来就是seeda和sckval的获取

利用浏览器调试工具搜索功能,直接搜索seeda,可以看到是在login.js里面生成的。
然后我们会发现,seeda和sckval都是在里面生成的,这里还是比较简单的
参数生成逻辑

打上断点,然后我们发现,codeData和suuid就是我们之前获取的,o.seeda和n的值就是seeda和sckval。

suuid
codeData
sckval
seeda

ok,接下来我们看下参数是否是一致的

需要的参数

经比对,发现确实是seeda和sckval的生成逻辑

看生成逻辑可以得出:sckval是对codeData和uuid的组合进行CryptoJS.MD5处理得到的,
seeda是encodeURIComponent 处理s得到的,而s是对codeData进行
CryptoJS.AES.encrypt加密生成的。
幸运的是CryptoJS是node.js的一个包,encodeURIComponent是js自带的方法,都可以直接找到。

分析出方法之后,怎么使用python执行呢

我试过使用AES包去解决,AES.new(key,model,iv) 当model为ECB模式的时候会报错,
就很懵逼,干脆就直接使用pycharm安装node.js环境算了。
教程链接参考:https://blog.csdn.net/weixin_45081575/article/details/105223948

安装完了node.js环境之后,就可以在pycharm的Terminal中执行命令,安装这个包了

 npm install crypto-js  
这个命令是为了给node.js环境安装crypto-js,这里面有CryptoJS

接下来是改装的js代码


const CryptoJS = require("crypto-js"); //引入crypto-js
function bs(codeData,suuid) {
    var t = {};
    var e = CryptoJS.lib.WordArray.random(16).toString(CryptoJS.enc.Hex)
      , i = CryptoJS.enc.Utf8.parse(codeData);
    md = CryptoJS.mode.ECB;
    var s = CryptoJS.AES.encrypt(codeData, i, {
        iv: CryptoJS.enc.Hex.parse(e),
        mode: md,
        padding: CryptoJS.pad.Pkcs7
    });
    seeda = encodeURIComponent(s);

    var n = CryptoJS.MD5(codeData + suuid).toString();
    return [n,seeda]  // 返回列表中n就是sckval,seeda就是seeda
}

然后使用python来执行这段代码:

import execjs
# execjs是python执行js的一个包,使用pip install pyexecjs即可安装
with open('1.js','r',encoding='utf-8') as r:
    js = r.read()
jsdm = execjs.compile(js)  
result = jsdm.call('bs','AKaqtzq2BMBN3ywv','c6163de3-5af1-492f-bd49-80de9cd65628')
print("seeda:{}".format(result[1]))
print("sckval:{}".format(result[0]))

测试结果:

执行结果

经对比,结果一致。请求列表页需要把response-cookie更新进cookie中即可。

相关文章

网友评论

    本文标题:澎湃新闻:python js逆向

    本文链接:https://www.haomeiwen.com/subject/xuztqltx.html