逆向网站:
aHR0cHM6Ly9zb2xzY2FuLmlvL2xlYWRlcmJvYXJkL3Byb2dyYW0/cGFnZT0xJnJhbmdlPTMw
逆向接口:
aHR0cHM6Ly9hcGkuc29sc2Nhbi5pby92Mi9wdWJsaWNpemUvYWxs
欲行其事,必先利其器,本期逆向实战需要 3 个第三方库:
用于模拟接口请求的:
pip install requests
用于模拟执行JS的:
pip install PyExecJS
用于存储数据的:
pip install pandas
该接口为:
https://api.小鸿爱摸鱼.io/v2/publicize/all
Sol-Aut 加密的值为:
v257KTy4MWB9dls0fKZUyuXhZD8qMS0QdcGm9-b4
并且经过多次测试确认该请求头加密字段是动态变化的,意味着我们需要找出其中的加密逻辑
全局搜索
逆向分析中最简单直接的方式就是全局搜索,按快键键【Ctrl+Shift+f】搜索字符串 Sol-Aut:
由上图可知,this.randomString 就是加密位置,我们按快捷键【Ctrl+f】搜索该字符串,发现 this.randomString 是由 this.generateRandomString() 函数赋值的:
function generateRandomString() {
let e = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789==--"
, t = Array(16).join().split(",").map(function() {
return e.charAt(Math.floor(Math.random() * e.length))
}).join("")
, r = Array(16).join().split(",").map(function() {
return e.charAt(Math.floor(Math.random() * e.length))
}).join("")
, n = Math.floor(31 * Math.random())
, o = "".concat(t).concat(r)
, a = [o.slice(0, n), "B9dls02fK", o.slice(n)].join("");
return a;
};
console.log(generateRandomString());
成功构造出请求头加密字段 Sol-Aut,经测试,该加密字符串是有效的
接下来只需要使用 PyExecJS 库模拟执行 JS 调用函数 generateRandomString() 即可获取请求头加密字段,相关代码如下:
import execjs
def encrypt_params():
file = 'sol-aut.js'
node = execjs.get()
ctx = node.compile(open(file).read())
js = f'generateRandomString()'
sol_aut = ctx.eval(js)
# sol_aur = ctx.call('generateRandomString')
print(sol_aur)
return sol_aut
原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/90117.html