逆向13-建设库
建设库
1. 接口和加密分析



2. sign加密逻辑
- 关键字搜索


e.headers.sign = (param = e.data,
time = f,
t = Ou(param),
ku("ghaepVf6IhcHmgnk4NCTXLApxQkBcvh1", ku("mwMlWOdyM7OXbjzQPulT1ndRZIAjShDB", ku("ZuSj0gwgsKXP4fTEz55oAG2q2p1SVGKK", t, time), time), time))
- 参数解析
数据1:e.data是我们请求的荷载--明文

数据2:time是当前的时间
数据3:t数据处理

数据3:ku("ghaepVf6IhcHmgnk4NCTXLApxQkBcvh1", ku("mwMlWOdyM7OXbjzQPulT1ndRZIAjShDB", ku("ZuSj0gwgsKXP4fTEz55oAG2q2p1SVGKK", t, time), time), time))加密数据

方法一:
我们看到了这里是一个加载器,今天先不使用这个方法

方法二:单步调试

根据上面的图片-就会看出是一个md5的值
3.代码
// 除了主函数+md5是自己写的,其余都是扣代码得来的
const CryptoJS = require("crypto-js")
Tu = function(e) {
var t = new Array
, n = 0;
for (var i in e)
t[n] = i,
n++;
return t.sort()
}
Lu = function e(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
}
Ou = function(e) {
var t = Tu(e)
, n = "";
for (var i in t) {
var r = Lu(e[t[i]]);
null != r && "" != r.toString() && (n += t[i] + "=" + r + "&")
}
return n
}
ku = function(e, t, time) {
var n = t + e + time;
// return n = Cu()(n)
// 经过分析是一个md5值
return n = CryptoJS.MD5(n).toString()
}
// 主函数
function get_sign(data){
param = data;
time = (new Date).getTime();
t = Ou(param);
return ku("ghaepVf6IhcHmgnk4NCTXLApxQkBcvh1", ku("mwMlWOdyM7OXbjzQPulT1ndRZIAjShDB", ku("ZuSj0gwgsKXP4fTEz55oAG2q2p1SVGKK", t, time), time), time)
}
import requests
import execjs
import time
cookies = {
'Hm_lvt_03b8714a30a2e110b8a13db120eb6774': '1722588375',
'HMACCOUNT': '73A91BDDAF908DF6',
'HWWAFSESTIME': '1722588374917',
'HWWAFSESID': '98d7688abffa2e9658',
'Hm_lpvt_03b8714a30a2e110b8a13db120eb6774': '1722843940',
}
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',
'cache-control': 'no-cache',
'content-type': 'application/json;charset=UTF-8',
# 'cookie': 'Hm_lvt_03b8714a30a2e110b8a13db120eb6774=1722588375; HMACCOUNT=73A91BDDAF908DF6; HWWAFSESTIME=1722588374917; HWWAFSESID=98d7688abffa2e9658; Hm_lpvt_03b8714a30a2e110b8a13db120eb6774=1722843940',
'devicetype': 'PC',
'origin': 'https://www.jiansheku.com',
'page': 'search-enterprise',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://www.jiansheku.com/',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
# 'sign': '10be9166dfa6473174845505b2607494',
# 'timestamp': '1722843979849',
'timestamp': str(time.time() * 1000),
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
}
json_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': '',
},
}
js_code = open("jiazhushe.js").read()
js_compile = execjs.compile(js_code)
# 获取js中的sign
sign = js_compile.call("get_sign", json_data)
headers['sign'] = sign
response = requests.post('https://capi.jiansheku.com/nationzj/enterprice/page', cookies=cookies, headers=headers, json=json_data)
print(response.text)

浙公网安备 33010602011771号