进入目标站点
步骤一:识别加密
找接口

找参数

重点:signature 参数同样表现为十六进制字符串,但长度为 64 字符,符合 SHA-256 哈希算法的输出特征:
只包含 0-9 和 a-f,十六进制格式。
长度为 64,符合 SHA-256 输出长度。
因此,我们初步假设 signature 是通过 SHA-256 算法生成的。
步骤二:参数定位
找位置
利用全局搜索找到signature生成的位置

步骤三:参数解析
找逻辑

通过控制台和源代码分析,发现 signature 是通过拼接多个参数(如时间戳、随机字符串等)进行 SHA-256 运算生成的。具体的拼接逻辑如下:
var t = c([d, h, u, e, l, p["type" + e]].sort().join(""));在这里,c() 函数执行了 SHA-256 哈希运算。

进一步分析参数来源,根据源代码,拼接 signature 的六个参数分别为:
d:时间戳 new Date().getTime()
h:随机字符串,通过函数生成
u:常量字符串 $d6eb7ff91ee257475%
e:固定值 1
l:固定值 10
page:当前页码
通过在控制台打印这些参数并分析源码,我们确认它们的来源和生成方式,并依次写入到本地函数里。
步骤四:参数调用
const CryptoJS = require("crypto-js");
function get_signature(page){
h = (new Date).getTime()
m = function(e, t, n) {
var o = ""
, i = t
, r = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
e && (i = Math.round(Math.random() * (n - t)) + t);
for (var a = 0; a < i; a++) {
o += r[Math.round(Math.random() * (r.length - 1))]
}
return o
}(!1, 16)
_ = "$d6eb7ff91ee257475%"
e = 1
d = 10
data = [h, m, _, e, d, 0, page].sort().join("")
signature = CryptoJS.SHA256(data).toString()
return [h,signature]
}