题目链接:https://match.yuanrenxue.cn/match/5

第一步:常规操作,翻页看看请求⬇️

image

image

同样还是从Initiator入手,点req的js进去,往上翻翻找到script标签565行打上断点⬇️

image

076d5752989e86f5474e3e980264a7b4

 

image

 这里写明了指纹,说明后面会用到这个$_zw

 第二步:hook脚本获取下cookie中m⬇️

 

 

e596c39f0ab084258f65ffc311cb68ea

定位到_$Wa = _0x12eaf3();

image

定位到function _0x474032

image

 hook脚本获取下cookie中RM4hZBv0dDon443M⬇️

5207ca395a74f02b91e2de3b40700c81

 定位到_0x4e96b4['_$ss']

9a6b18735c9f3cdb867d04a1828c9e41

 

 

第三步:找到关键代码,复制关键代码,开始缺什么function粘贴到本地,将缺的function补充完执行解决报错

先看cookie中m值的实现,实际hook完发现生成了5个m值放到了_$pr🀄,先跑通一个看看

image

e4cb898cfa4c5945c6a98fd22a801887

 

第一个报错history is not defined⬇️

image

 浏览器同样位置断点try里面,看看op = _0x4e96b4['$_zw'][_$UH[0x6c]];这里会不会报错,不会的话补充$_zw这个数组⬇️

image

 补充完测试,与浏览器一致⬇️

image

image

 若不一致检测这些地方值有没有补充到:

image

image

增加了两处日志断点,可以观察下执行次数,以及几个盐值⬇️

image

 现在使用页面正常响应的请求参数m时间戳,验证下cookie中m生成值对不对⬇️

image

 

image

image

 至此cookie中m值可以复现出来。

同样的方式开始操作RM4hZBv0dDon443M

 定位到生成位置_$ss📍

image

 定位到_$ss的生成位置📍

这里_0x4e96b4['_$pr']是5次生成完的数组,观察日志断点输出:

  • 第一次初始值:_$tT =  -172015004; _$Jy = 461512024; _$6_ =  8821003647;_$Wa = window.$_zw[23]
  • 第二、三、四次:盐值不变,_$Wa不变
  • 第五次最终值:_$tT = -660478335; _$Jy =-405537848; _$6_ =  -389564586;_$Wa=_0x2d5f5b()['toString']();

image

image

定位到 _$qF的生成📍

image

AI补一下btoa⬇️

// 模拟浏览器环境,将btoa()和atob()挂载到global对象上
global.btoa = function(str) {
  return Buffer.from(str, 'utf8').toString('base64');
};

global.atob = function(base64Str) {
  return Buffer.from(base64Str, 'base64').toString('utf8');
};

_0x4e96b4['_$is']或_$yw也就是上面请求体中参数m,可执行的在控制台执行,还原代码⬇️

 

 _$Ww = CryptoJS['enc']['Utf8']['parse'](_0x4e96b4['_$pr']['toString']()),
_0x29dd83 = CryptoJS['AES']['encrypt'](_$Ww, CryptoJS['enc']['Utf8']['parse'](btoa(_$yw)['slice'](0x0, 0x10)), {
    'mode': CryptoJS['mode']['ECB'],
    'padding': CryptoJS['pad']['Pkcs7']
}),
_0x4e96b4['_$ss'] = _0x29dd83['toString']();

 

现在使用页面正常响应的请求参数m时间戳,验证下cookie中RM4hZBv0dDon443M生成值对不对⬇️

因为_$pr中间三个是拿两个时间戳更新了盐值没法固定传m和f生成pr进行测试,这里将pr和_$yw(也就是请求参数m值)写死测试下📌

image

image

image

测试完,两个值可以复现出现,现在编写完整代码测试下⬇️

 image

 附上代码:

js分段

const CryptoJS = require('crypto-js');
var window=global;
var document={};

// 模拟浏览器环境,将btoa()和atob()挂载到global对象上
global.btoa = function(str) {
  return Buffer.from(str, 'utf8').toString('base64');
};

global.atob = function(base64Str) {
  return Buffer.from(base64Str, 'base64').toString('utf8');
};


_$UH = [
    "name",
    "setAttribute",
    "type",
    "href",
   //省略
];

_0x4e96b4 = window;

d_script = {
   //省略
}

_0x4e96b4['$_zw'] = [
    24504,
    //省略
    2548,
    2548,
    true,
    "明说了,这个数组是指纹",
    Date,
    String,
    eval,
    window,
    document,
    setInterval,
    d_script,
    Error,
    Array,
    Object,
    unescape,
    parseInt,
    encodeURIComponent,
    Function,
    [],
    [],
    1779329776000,
    true,
    1779329778000,
    _$UH

]


function _0x12eaf3() {
    return Date['parse'](new Date());
}

function _0x2d5f5b() {
    return new Date()["valueOf"]();
}

function _0x12b47d(v0_) {
    var v1_, v2_ = "", v3_ = 32 * v0_[_$UH[108]];
    for (v1_ = 0; v1_ < v3_; v1_ += 8) v2_ += String[_$UH[276]](v0_[v1_ >> 5] >>> v1_ % 32 & 255);
    return v2_;
}

function _0x12e4a8(v0_, v1_) {
    var v2_ = (65535 & v0_) + (65535 & v1_);
    return (v0_ >> 16) + (v1_ >> 16) + (v2_ >> 16) << 16 | 65535 & v2_;
}

function _0x3634fc(v0_, v1_) {
    return v0_ << v1_ | v0_ >>> 32 - v1_;
}

function _0xaaef84(v0_, v1_, v2_, v3_, v4_, v5_) {
    return _0x12e4a8(_0x3634fc(_0x12e4a8(_0x12e4a8(v1_, v0_), _0x12e4a8(v3_, v5_)), v4_), v2_);
}

function _0x48d200(v0_, v1_, v2_, v3_, v4_, v5_, v6_) {
    return _0xaaef84(v1_ & v2_ | ~v1_ & v3_, v0_, v1_, v4_, v5_, v6_);
}

function _0x3180ec(v0_, v1_, v2_, v3_, v4_, v5_, v6_) {
    return _0xaaef84(v1_ & v3_ | v2_ & ~v3_, v0_, v1_, v4_, v5_, v6_);
}

function _0x32032f(v0_, v1_, v2_, v3_, v4_, v5_, v6_) {
    return _0xaaef84(v1_ ^ v2_ ^ v3_, v0_, v1_, v4_, v5_, v6_);
}

function _0x4b459d(v0_, v1_, v2_, v3_, v4_, v5_, v6_) {
    return _0xaaef84(v2_ ^ (v1_ | ~v3_), v0_, v1_, v4_, v5_, v6_);
}

var _0x1171c8 = 0x67452301;
var _0x4dae05 = -0x10325477;
var _0x183a1d = -0x67452302;
var _0xcfa373 = 0x10325476;
// _0x4e96b4["_$tT"] = -172015004;
// _0x4e96b4["_$Jy"] = 461512024;
_0x4e96b4["_$tT"] = -660478335;
_0x4e96b4["_$Jy"] = -405537848;
_0x4e96b4["_$6_"] = -389564586;


function _0x11a7a2(_0x193f00, _0x1cfe89) {
    _0x193f00[_0x1cfe89 >> 5] |= 128 << _0x1cfe89 % 32, _0x193f00[14 + (_0x1cfe89 + 64 >>> 9 << 4)] = _0x1cfe89;
    try {
        var _0x42fb36 = _0x4e96b4[_$UH[608]][_$UH[8]]["DONE"] * 4;
    } catch (v0_) {
        var _0x42fb36 = 16;
    }
    try {
        _0x4e96b4["$_z2"][0] = "Q";
    } catch (_0x4c574d) {
        try {
            op = _0x4e96b4["$_zw"][_$UH[108]];
        } catch (v0_) {
            var _0x3b7935 = 0;
            for (var _0x1badc3 = 0; _0x1badc3 < 1e6; _0x1badc3++) {
                _0x3b7935 = _0x3b7935 + _0x1badc3[_$UH[31]]();
                history["pushState"](0, 0, _0x3b7935);
            }
        }
        if (op > 20) {
            eval("b64pad = _0x4e96b4['$_zw'][9]['length'];");
        } else if (op < 10) {
            _0x4e96b4["$_zw"] = [ 1, 8, 2, 4, 23, 45, 8, 15, 81, 68, 13, 72, 70 ];
        }
    }

    var _0x1badc3, _0x38ca59, _0x431764, _0x43f1b4, _0x5722c0, _0x3e0c38 = _0x1171c8, _0xdb4d2c = _0x4dae05, _0x1724c5 = _0x183a1d, _0x257ec6 = _0xcfa373;
    try {
        if (_0x4e96b4["_$6_"]) {} else {
            _0x4e96b4["_$6_"] = 8821003647;
        }
    } catch (v0_) {
        _0x4e96b4["_$6_"] = 37885443;
    }


    for (_0x1badc3 = 0; _0x1badc3 < _0x193f00[_$UH[108]]; _0x1badc3 += _0x42fb36) _0x38ca59 = _0x3e0c38, 
    _0x431764 = _0xdb4d2c, _0x43f1b4 = _0x1724c5, _0x5722c0 = _0x257ec6, _0x3e0c38 = _0x48d200(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3], 7, 513548), 
    _0x257ec6 = _0x48d200(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 1], 12, _0x4e96b4["_$6_"]), 
    _0x1724c5 = _0x48d200(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 2], 17, 606105819), 
    _0xdb4d2c = _0x48d200(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 3], 22, -1044525330), 
    _0x3e0c38 = _0x48d200(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 4], 7, -176418897), 
    _0x257ec6 = _0x48d200(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 5], 12, 1200080426), 
    _0x1724c5 = _0x48d200(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 6], 17, -1473231341), 
    _0xdb4d2c = _0x48d200(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 7], 22, -45705983), 
    _0x3e0c38 = _0x48d200(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 8], 7, 1770035416), 
    _0x257ec6 = _0x48d200(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 9], 12, -1958414417), 
    _0x1724c5 = _0x48d200(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 10], 17, -42063), 
    _0xdb4d2c = _0x48d200(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 11], 22, -1990404162), 
    _0x3e0c38 = _0x48d200(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 12], 7, 1804603682), 
    _0x257ec6 = _0x48d200(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 13], 12, -40341101), 
    _0x1724c5 = _0x48d200(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 14], 17, -1502002290), 
    _0xdb4d2c = _0x48d200(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 15], 22, 1236535329), 
    _0x3e0c38 = _0x3180ec(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 1], 5, -165796510), 
    _0x257ec6 = _0x3180ec(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 6], 9, -1069501632), 
    _0x1724c5 = _0x3180ec(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 11], 14, 643717713), 
    _0xdb4d2c = _0x3180ec(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3], 20, -373897302), 
    _0x3e0c38 = _0x3180ec(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 5], 5, -701558691), 
    _0x257ec6 = _0x3180ec(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 10], 9, 38016083), 
    _0x1724c5 = _0x3180ec(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 15], 14, _0x4e96b4["_$tT"]), 
    _0xdb4d2c = _0x3180ec(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 4], 20, _0x4e96b4["_$Jy"]), 
    _0x3e0c38 = _0x3180ec(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 9], 5, 568446438), 
    _0x257ec6 = _0x3180ec(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 14], 9, -1019783690), 
    _0x1724c5 = _0x3180ec(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 3], 14, -187363961), 
    _0xdb4d2c = _0x3180ec(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 8], 20, 1163531501), 
    _0x3e0c38 = _0x3180ec(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 13], 5, -1554681467), 
    _0x257ec6 = _0x3180ec(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 2], 9, -51403784), 
    _0x1724c5 = _0x3180ec(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 7], 14, 1735328473), 
    _0xdb4d2c = _0x3180ec(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 12], 20, -1926607734), 
    _0x3e0c38 = _0x32032f(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 5], 4, -37824558), 
    _0x257ec6 = _0x32032f(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 8], 11, -2022574463), 
    _0x1724c5 = _0x32032f(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 11], 16, 1839030562), 
    _0xdb4d2c = _0x32032f(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 14], 23, -35309556), 
    _0x3e0c38 = _0x32032f(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 1], 4, -1530992060 * b64pad), 
    _0x257ec6 = _0x32032f(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 4], 11, 1272893353), 
    _0x1724c5 = _0x32032f(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 7], 16, -155497632), 
    _0xdb4d2c = _0x32032f(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 10], 23, -1094730640), 
    _0x3e0c38 = _0x32032f(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 13], 4, 681279174), 
    _0x257ec6 = _0x32032f(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3], 11, -358537222), 
    _0x1724c5 = _0x32032f(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 3], 16, -722521979), 
    _0xdb4d2c = _0x32032f(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 6], 23, 760291289), 
    _0x3e0c38 = _0x32032f(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 9], 4, -64036887), 
    _0x257ec6 = _0x32032f(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 12], 11, -421815835), 
    _0x1724c5 = _0x32032f(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 15], 16, 530742520), 
    _0xdb4d2c = _0x32032f(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 2], 23, -995338651), 
    _0x3e0c38 = _0x4b459d(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3], 6, -198630844), 
    _0x257ec6 = _0x4b459d(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 7], 10, 1126891415), 
    _0x1724c5 = _0x4b459d(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 14], 15, -1416354905), 
    _0xdb4d2c = _0x4b459d(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 5], 21, -57434055), 
    _0x3e0c38 = _0x4b459d(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 12], 6, 1700485571), 
    _0x257ec6 = _0x4b459d(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 3], 10, -1894746606), 
    _0x1724c5 = _0x4b459d(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 10], 15, -105181523), 
    _0xdb4d2c = _0x4b459d(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 1], 21, -2054922799), 
    _0x3e0c38 = _0x4b459d(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 8], 6, 1873313359), 
    _0x257ec6 = _0x4b459d(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 15], 10, -30611744), 
    _0x1724c5 = _0x4b459d(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 6], 15, -1560198380), 
    _0xdb4d2c = _0x4b459d(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 13], 21, 1309151649), 
    _0x3e0c38 = _0x4b459d(_0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6, _0x193f00[_0x1badc3 + 4], 6, -145523070), 
    _0x257ec6 = _0x4b459d(_0x257ec6, _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x193f00[_0x1badc3 + 11], 10, -1120211379), 
    _0x1724c5 = _0x4b459d(_0x1724c5, _0x257ec6, _0x3e0c38, _0xdb4d2c, _0x193f00[_0x1badc3 + 2], 15, 718787259), 
    _0xdb4d2c = _0x4b459d(_0xdb4d2c, _0x1724c5, _0x257ec6, _0x3e0c38, _0x193f00[_0x1badc3 + 9], 21, -343485441), 
    _0x3e0c38 = _0x12e4a8(_0x3e0c38, _0x38ca59), _0xdb4d2c = _0x12e4a8(_0xdb4d2c, _0x431764), 
    _0x1724c5 = _0x12e4a8(_0x1724c5, _0x43f1b4), _0x257ec6 = _0x12e4a8(_0x257ec6, _0x5722c0);
    return [ _0x3e0c38, _0xdb4d2c, _0x1724c5, _0x257ec6 ];
}



function _0x35f5f2(v0_) {
    var v1_, v2_ = [];
    for (v2_[(v0_[_$UH[108]] >> 2) - 1] = void 0, v1_ = 0; v1_ < v2_[_$UH[108]]; v1_ += 1) v2_[v1_] = 0;
    var v3_ = 8 * v0_[_$UH[108]];
    for (v1_ = 0; v1_ < v3_; v1_ += 8) v2_[v1_ >> 5] |= (255 & v0_[_$UH[15]](v1_ / 8)) << v1_ % 32;
    return v2_;
}

function _0x1ee7ec(v0_) {
    return _0x12b47d(_0x11a7a2(_0x35f5f2(v0_), 8 * v0_[_$UH[108]]));
}

function _0x2b8a17(v0_) {
    return unescape(encodeURIComponent(v0_));
}

function _0x41873d(v0_) {
    return _0x1ee7ec(_0x2b8a17(v0_));
}

function _0x499969(v0_) {
    var v1_, v2_, v3_ = "0123456789abcdef", v4_ = "";
    for (v2_ = 0; v2_ < v0_[_$UH[108]]; v2_ += 1) v1_ = v0_[_$UH[15]](v2_), v4_ += v3_["charAt"](v1_ >>> 4 & 15) + v3_["charAt"](15 & v1_);
    return v4_;
}

function _0x37614a(v0_) {
    return _0x499969(_0x41873d(v0_));
}

function _0x474032(v0_, v1_, v2_) {
    return v1_ ? v2_ ? v(v1_, v0_) : y(v1_, v0_) : v2_ ? _0x41873d(v0_) : _0x37614a(v0_);
}
var cookie_m;

_0x4e96b4['_$pr'] = new Array();

_0x4e96b4["_$tT"] = -172015004;
_0x4e96b4["_$Jy"] = 461512024;
_0x4e96b4["_$6_"] = 8821003647
var xx = _0x12eaf3();
// test
// xx = 1779437437000;
for (var i = 0x1; i < 5; i++) {
    xx_ = xx['toString']();
    _0x4e96b4['_$pr'].push(_0x474032(xx_))
    console.log(i,'------_$pr------xx-----_0x4e96b4["_$tT"]------_0x4e96b4["_$Jy"]-------_0x4e96b4["_$6_"]',_0x4e96b4['_$pr'],xx_,_0x4e96b4["_$tT"],_0x4e96b4["_$Jy"],_0x4e96b4["_$6_"])
}
_0x4e96b4["_$tT"] = -660478335;
_0x4e96b4["_$Jy"] = -405537848;
_0x4e96b4["_$6_"] = -389564586;
var _$Wa = _0x2d5f5b()['toString']();
// test
// _$Wa = '1779437441047';

_0x4e96b4['_$pr'].push(_0x474032(_$Wa))
console.log(i,'------_$pr------_$Wa-----_0x4e96b4["_$tT"]------_0x4e96b4["_$Jy"]-------_0x4e96b4["_$6_"]',_0x4e96b4['_$pr'],_$Wa,_0x4e96b4["_$tT"],_0x4e96b4["_$Jy"],_0x4e96b4["_$6_"])
cookie_m = 'm=' + _0x474032(_$Wa) + ';\x20path=/';

// console.log(_$Wa)
// console.log(_0x4e96b4['_$pr'])

//--------------------------------------------

// test 因为_$pr中间三个是拿两个时间戳更新了盐值没法固定传m和f生成pr进行测试 这里将pr和_$yw(也就是请求参数m值)写死测试下
// _0x4e96b4['_$pr'] = ['b0f213ec43b41cc4da3d90792adc2293', '2d43fccdea15f326e2727ac0ff9dc7a7', 'd647483704b7d66fde74179bd1c69429', 'd3324a9e97a363d1f6c376aa29363dcd', '7c2487365648ae3f2100d2bdb8cf2744']
// _$Wa = '1779437441047';

 _$Ww = CryptoJS['enc']['Utf8']['parse'](_0x4e96b4['_$pr']['toString']()),
_0x29dd83 = CryptoJS['AES']['encrypt'](_$Ww, CryptoJS['enc']['Utf8']['parse'](btoa(_$Wa)['slice'](0x0, 0x10)), {
    'mode': CryptoJS['mode']['ECB'],
    'padding': CryptoJS['pad']['Pkcs7']
}),
_0x4e96b4['_$ss'] = _0x29dd83['toString']();
var cookie_RM4hZBv0dDon443M;

 cookie_RM4hZBv0dDon443M = 'R' + 'M' + '4' + 'h' + 'Z' + 'B' + 'v' + '0' + 'd' + 'D' + 'o' + 'n' + '4' + '4' + '3' + 'M=' + _0x4e96b4['_$ss'] + ';\x20path=/';
 console.log(cookie_RM4hZBv0dDon443M)

 function get_target(){
    var xxx = {
        'cookie_m': cookie_m,
        'cookie_r': cookie_RM4hZBv0dDon443M,
        'req_m': _$Wa,
        'req_f': xx
    }
    return xxx
}
console.log('--------------------------------------------------------')
console.log(get_target())
import json
import time

import requests


def get_mrmf_5():
    # hook到关键代码 cookie中的m值需要补环境  其他值关键代码还原
    #  _$Ww = _$Tk[_$UH[0x2db]][_$UH[0x2dc]][_$UH[0xff]](_0x4e96b4['_$pr'][_$UH[0x1f]]()),
    # _0x29dd83 = _$Tk['A' + _$UH[0x32d]][_$UH[0x337] + _$UH[0x336]](_$Ww, _0x4e96b4[_0xc77418('0x6', 'OCbs')], {
    #     'mode': _$Tk[_$UH[0x339] + _$UH[0x33a]][_$UH[0x2e5]],
    #     'padding': _$Tk[_$UH[0x33b]][_$UH[0x33c] + _$UH[0x33d]]
    # }),
    # _0x4e96b4['_$' + _$UH[0x348][0x1] + _$UH[0x353][0x1]] = _0x29dd83[_$UH[0x1f]]();
    #
    # 时间戳:new Date()['valueOf']()
    # m生成5个  _0x474032(new Date()['valueOf']()) 执行5次放到列表
    # _0x4e96b4['_$pr'] --> ['fa0f42e2c98bf698fb988fc4bdf309a7', '2669b19a95cfc591bd432f16fe1d2728', '9f5958b0ab0542e38c692ce310208038', 'a5288c8f8981ee845fc8b75ad1df97d3', '2cf69e0e6e8997b7d940a9b84ddf5916']
    #
    # _0x4e96b4['_$is'] --> new Date()['valueOf']()['toString']()
    # _0x4e96b4['_$qF'] = CryptoJS['enc']['Utf8']['parse'](_0x4e96b4['btoa'](_0x4e96b4['_$is'])['slice'](0x0, 0x10));
    #
    # _0x4e96b4['_$qF'] --> {
    #     "words": [
    #         1297376051,
    #         1315597175,
    #         1330924851,
    #         1313100152
    #     ],
    #     "sigBytes": 16
    # }
    #
    #  _$Ww = _CryptoJS['enc']['Utf8']['parse'](_0x4e96b4['_$pr']['toString']()),
    # _0x29dd83 = CryptoJS['AES']['encrypt'](_$Ww, CryptoJS['enc']['Utf8']['parse'](_0x4e96b4['btoa'](new Date()['valueOf']()['toString']())['slice'](0x0, 0x10)), {
    #     'mode': CryptoJS['mode']['ECB'],
    #     'padding': CryptoJS['pad']['Pkcs7']
    # }),
    # _0x4e96b4['_$ss'] = _0x29dd83['toString']();

    with open('3333.js', 'r', encoding='utf-8', errors='ignore') as f:
        js_content = f.read()
    v = execjs.compile(js_content).call('get_target')
    return v

def get_question_5_result():
    """js混淆 乱码增强"""
    url = "https://match.yuanrenxue.cn/api/question/5"
    headers = {
        "accept": "application/json, text/javascript, */*; q=0.01",
        # "accept-encoding": "gzip, deflate, br, zstd",
        "accept-language": "zh-CN,zh;q=0.9",
        "cache-control": "no-cache",
        # "cookie": "Hm_lvt_f80b2b389f44bbfb3bfe1704817d44e0=1776316664; HMACCOUNT=3ADBE34EA00D9961; sessionid=qarkeoj53qh9hd1t0fj0vwgdvxkkki9b; Hm_lpvt_f80b2b389f44bbfb3bfe1704817d44e0=1776908557; m=ffe4a1009f9259442572fac584405992; RM4hZBv0dDon443M=vQIpkWJskOG8Ysll82quRF+fsQUZtvr6Vbl9iYoptGOh4Hcq+Tm5LzTkvetTwgAEdrrPKt8xy4H0RTjKobUP5C0mvhB+gh6FiFI91Al9uLWlcwr4NooVzwUcqck+IoRXMEC5HklZ3nVsiqtpHdGyXoHTqhGGiiNkTK+YG05Hqfpb3MofFgv7DvlNz7DgAx9ciVvqvMTwQjPHXwYXjGsDTlwlxjjX2Sf0dPbKZBNtFww=",
        "pragma": "no-cache",
        "priority": "u=1, i",
        "referer": "https://match.yuanrenxue.cn/match/5",
        "sec-ch-ua": "\"Chromium\";v=\"146\", \"Not-A.Brand\";v=\"24\", \"Google Chrome\";v=\"146\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\"",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
        "x-requested-with": "XMLHttpRequest"
    }
    sum_data = 0
    s = requests.Session()
    s.headers.clear()
    s.headers.update(headers)
    for page in range(1, 6):
        v = get_mrmf_5()
        cookie = {
            'sessionid': 'qarkeoj53qh9hd1t0fj0vwgdvxkkki9b',
            'm': v['cookie_m'],
            'RM4hZBv0dDon443M': v['cookie_r'].replace('RM4hZBv0dDon443M=', '')
        }
        s.cookies.update(cookie)
        if page == 5:
            headers['user-agent'] = 'yuanrenxue'
            s.headers.update(headers)
        params = {
            "page": page,
            # "pageSize": "10",
            "m": v['req_m'],
            "f": v['req_f'],
        }
        print(f'v={v}')
        print(f'cookie={cookie}')
        print(f'param={params}')
        try:
            r = s.get(url=url, params=params, verify=False)
            if r.status_code == 200:
                data = r.json()['data']
                print(data)
                sum_data += sum(data)
                print(f"翻第{str(page)}页,累计求和:{sum_data}")
                time.sleep(5)
            else:
                print(f'error:{r.status_code}-----{r.text}')
        except Exception as e:
            raise ValueError(e)

def get_9m():
    url = f"https://match.yuanrenxue.cn/api/question/9"
    headers = {
        "accept": "*/*",
        # "accept-encoding": "gzip, deflate, br, zstd",
        "accept-language": "zh-CN,zh;q=0.9",
        "cookie": "sessionid=ov42dmmjf4zxah9ng631184pwiouzlmw; Hm_lvt_f80b2b389f44bbfb3bfe1704817d44e0=1776316664,1777258117,1778142192; HMACCOUNT=3ADBE34EA00D9961; Hm_lpvt_f80b2b389f44bbfb3bfe1704817d44e0=1778229890; ",
        "cache-control": "no-cache",
        "pragma": "no-cache",
        "priority": "u=1, i",
        "referer": "https://match.yuanrenxue.cn/match/9",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
        "x-requested-with": "XMLHttpRequest"
    }
    r = requests.get(url=url, headers=headers, verify=False)
    if r.status_code == 200:
        data = r.json()['data']
        if isinstance(data, str):
            # ss = execjs.eval(data)
            m_num = re.findall(r';m<=(\d+);', data) or re.findall(r'\(m,(\d+)\);m\+\+', data)
            m_num = m_num[0]
            decry = re.findall("decrypt\('([0-9]{10})'\)", data) or re.findall("decrypt,'([0-9]{10})'", data)
            decry = decry[0]
            with open('9_decr_res.js', 'r', encoding='utf-8') as f:
                obj = f.read()
            # test
            # decry = '1778649927'
            # m_num = 5
            m = execjs.compile(obj).call('get_m', decry, m_num)
            # m = subprocess.run(
            #     ['node', '-e', f"const obj = require('./9_decr_res.js'); console.log(obj.get_m('{decry}', {m_num}))"],
            #     capture_output=True,
            #     encoding='utf-8',
            #     text=True,
            #     cwd='./'  # 指定工作目录
            # )

            print(decry, m_num, m)
            return m
    else:
        raise ValueError(r.status_code, r.text)

def get_question_9_result():
    """js混淆 动态cookie2"""
    url = "https://match.yuanrenxue.cn/api/question/9"
    headers = {
        "accept": "*/*",
        # "accept-encoding": "gzip, deflate, br, zstd",
        "accept-language": "zh-CN,zh;q=0.9",
        "cache-control": "no-cache",
        "pragma": "no-cache",
        "priority": "u=1, i",
        "referer": "https://match.yuanrenxue.cn/match/9",
        "sec-ch-ua": "\"Google Chrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\"",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
        "x-requested-with": "XMLHttpRequest"
    }
    sum_data = 0
    s = requests.Session()
    s.headers.clear()
    s.headers.update(headers)
    m = get_9m()
    for page in range(1, 6):
        params = {
            "page": page,
            "pageSize": "10",
            "kw": "",
        }
        if page == 5:
            headers['user-agent'] = 'yuanrenxue'
        try:
            headers['cookie'] = "sessionid=ov42dmmjf4zxah9ng631184pwiouzlmw;" + m
            s.headers.update(headers)
            r = s.get(url=url, params=params, verify=False)
            if r.status_code == 200:
                data = r.json()['data']
                if isinstance(data, list):
                    sum_data += sum(data)
                    print(f"翻第{str(page)}页,累计求和:{sum_data}")
                else:
                    raise ValueError(f'error:{r.status_code}-----{r.text}')
            else:
                print(f'error:{r.status_code}-----{r.text}')

        except Exception as e:
            raise ValueError(e)

if __name__ == '__main__':
    get_question_5_result()

完结~✿✿ヽ(°▽°)ノ✿

 

 

 

posted on 2026-05-22 18:09  落叶虽美只活一世  阅读(50)  评论(0)    收藏  举报
Live2D