逆向13-建设库


建设库

1. 接口和加密分析

image
image
image

2. sign加密逻辑

  1. 关键字搜索
    image
    image
  e.headers.sign = (param = e.data,
                time = f,
                t = Ou(param),
                ku("ghaepVf6IhcHmgnk4NCTXLApxQkBcvh1", ku("mwMlWOdyM7OXbjzQPulT1ndRZIAjShDB", ku("ZuSj0gwgsKXP4fTEz55oAG2q2p1SVGKK", t, time), time), time))
  1. 参数解析
    数据1: e.data是我们请求的荷载--明文
    image
    数据2: time是当前的时间
    数据3: t数据处理
    image
    数据3: ku("ghaepVf6IhcHmgnk4NCTXLApxQkBcvh1", ku("mwMlWOdyM7OXbjzQPulT1ndRZIAjShDB", ku("ZuSj0gwgsKXP4fTEz55oAG2q2p1SVGKK", t, time), time), time)) 加密数据
    image
    方法一:
    我们看到了这里是一个加载器,今天先不使用这个方法
    image

方法二:单步调试
image
根据上面的图片-就会看出是一个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)

posted @ 2024-08-05 16:49  流年中渲染了微笑  阅读(0)  评论(0)    收藏  举报