建某库sign字段加密js逆向

简要说明

网址添加链接描述
分析时间: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是否正确,可以参考这篇我写的文章

请多多点赞收藏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值