简要说明
网址添加链接描述
分析时间:20241127
其他:这个网站我在分析的时候踩了一些坑
- 关键字sign:搜索不到
- 对应方法找不到
对应的解决办法给大家分享一下
进入网址,打开开发者工具,点击屏幕下方分页确定请求位置:
发现了两个请求,这个时候要留个心眼,粗略看一下两个请求有没有什么关系,比如page请求需要access请求的某个参数,如果没有就直接看标头,发现有sign字段,ok,那继续
此时定位sign位置就有两个办法:
-
关键字搜索
你会发现搜索sign:找不到对应的数据,根据经验,其实还可以搜索一下headers.sign或者headers.
一下子就定位到了 -
请求堆栈跟踪
如果是js混淆那么就用这个,具体方法:
点击红色的
打断点,然后点击第二页,进入断点,这个代码其实已经很熟悉了,直接查看v对象的函数中去找发请求的函数,然后进入就能找到o = Promise.resolve(t); v.length; ) o = o.then(v.shift(), v.shift()); return o
v对象的第一个方法是onRequestError,一看就不对。第二个方法是onRequest,发送请求的函数,然后打断点,把刚刚那个断点取消掉 继续追踪,注意别点错了
进入这里,和刚刚headers.位置一样,就是这里了
然后开始分析sign,把对应的参数在控制台打印出来
依次将对应的变量和函数扣出来就可以了,这里我说一下我的坑,我在扣Qc函数的时候,扣到了别的函数里面,浪费了一些时间,具体应该点击断点在qc函数位置然后点击这个一点点进入,就会发现他用的是md5加密方式,就很容易了。
贴上js代码:
const crypto = require('crypto');
data = {
"eid": "",
"achievementQueryType": "and",
"achievementQueryDto": [],
"personnelQueryDto": {
"queryType": "and"
},
"aptitudeQueryDto": {
"queryType": "and",
"nameStr": "",
"aptitudeQueryType": "and",
"businessScopeQueryType": "or",
"filePlaceType": "1",
"aptitudeDtoList": [
{
"codeStr": "",
"queryType": "and",
"aptitudeType": "qualification"
}
],
"aptitudeSource": "new"
},
"page": {
"page": 2,
"limit": 20,
"field": "",
"order": ""
}
}
function Bc(e) {
var t = new Array
, n = 0;
for (var i in e)
t[n] = i,
n++;
return t.sort()
}
function zc(t) {
var n;
if (Array.isArray(t)) {
for (var r in n = new Array,
t) {
var o = t[r];
for (var i in o)
null == o[i] ? delete t[r][i] : Array.isArray(t[r][i]) && e(t[r][i])
}
return n = t,
JSON.stringify(n).replace(/^(\s|")+|(\s|")+$/g, "")
}
return n = t && t.constructor === Object ? JSON.stringify(t) : t
}
function ccc(e) {
var t = Bc(e)
, n = "";
for (var i in t) {
var r = zc(e[t[i]]);
null != r && "" != r.toString() && (n += t[i] + "=" + r + "&")
}
return n
}
function cc3(t) {
return new Md5(!0).update(t)["hex"]()
}
function cc(t) {
// 创建一个 MD5 哈希对象
const hash = crypto.createHash('md5');
// 更新哈希对象的内容
hash.update(t);
// 获取哈希值的十六进制字符串
return hash.digest('hex');
}
function Nc() {
return cc
}
function Qc(e, t, time) {
var n = t + e + time;
return n = Nc()(n)
}
param = data
time = (new Date).getTime()
t = ccc(param)
signsign =
Qc("ghaepVf6IhcHmgnk4NCTXLApxQkBcvh1",
Qc("mwMlWOdyM7OXbjzQPulT1ndRZIAjShDB",
Qc("ZuSj0gwgsKXP4fTEz55oAG2q2p1SVGKK", t, time), time), time)
console.log(signsign)
至于如何核对sign是否正确,可以参考这篇我写的文章
请多多点赞收藏