目标网址:
aHR0cHM6Ly91Y3AuaHJkanl1bi5jb206NjAzNTkvYXBpL2R5
首先打开 F12 看看请求信息
接下来搜索 sign 参数
有 2 个 js 文件中多次出现,不太好定位加密位置,再看看 token:
同样也出现在 2 个文件中,其实挨个文件的查看也能找到加密参数位置,不过就是稍微麻烦些,这里还有一种方法,就是搜索固定值的参数,比如这里的tenant。
这样就比较准确定位加密参数位置。
既然找到参数加密位置,打上断点,刷新验证猜想,果然,刷新后停在断点上
通过调试信息,我们看到:
t 是一个当前 13 位的时间戳 token 由 s["a"].globalData.token 得到 sign 由 A(e, t)
token 这个值经过多次搜索,没有找到相关函数,而且一直没有变化,估计是和账号+浏览器有关,当作固定值处理就好。
现在只剩下一个 sign 了,接下来单步调式进入 A(e, t) 这个函数
function A(e, t) {
return x("param=" + JSON.stringify(e) + "×tamp=" + t + "&tenant=1&salt=" + M)
}
M 参数的生成函数
M = z();
function z() {
for (var e = Object(c["a"])().concat(Object(w["a"])(), g(), Object(k["a"])(), Object(y["a"])(), Object(b["b"])()), t = "", n = 0; n < e.length; n++)
t += String.fromCharCode(parseInt(e[n], 16));
return t
}
A(e, t)返回的是一个 x() 函数的返回值,调式进入 x()函数
调式到这里就全明白了,传入一个参数 n,进行 sha256 加密并返回。参数 n 的组成为:
"param=" + JSON.stringify(e) + "×tamp=" + t + "&tenant=1&salt=" + M
"param={"no":"dy8002","data":{}}×tamp=1604031369486&tenant=1&salt=kbn%&)@<?FGkfs8sdf4Vg1*+;`kf5ndl$"
最后用 python 来验证结果:
import hashlib
sha256 = hashlib.sha256()
sha256.update(
'param={"no":"dy8002","data":{}}×tamp=1604031369486&tenant=1&salt=kbn%&)@<?FGkfs8sdf4Vg1*+;`kf5ndl$'.encode(
'utf-8'))
print(sha256.hexdigest())
结果为:
13f05f00629bb9be92208810d3a076dd4093845dd4a8af1beee42103375c5c3a

整个加密程序运行完的结果:
调试结束后查看 sign 值,和 Python 生成的一致,大功告成!
文章转载自零点小思随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




