【非常困难】 猿人学web第一届 第10题 js 混淆 - 重放攻击对抗

news2024/11/14 22:23:54

文章目录

  • 调试干扰
    • 第一个 debugger
      • Hook 代码
    • 第二个 debugger
      • Hook 代码
    • 第三个 Function.constructor.prototype 检测
      • Hook 代码
    • 完整的 Hook 代码
  • 接口分析
  • 加密参数 m 生成位置
  • 加密参数还原
    • 加密点
    • 扣代码提示
    • _yrxyA\$()
    • var _yrxmEu = _yrxWKg(_yrxyHJ....
      • _yrxWKg()
    • let result = _yrxBXT(779, ....
  • 坑点
    • eval 函数内的代码
      • _yrxVhD() 方法
      • _yrxM3E() 方法
      • _yrxa$o() 方法
    • _yrxCxm['E' + 'c' + 'A' + 'b']
      • 初始值
      • 变化规律
    • 获取 eval() 函数内的代码

调试干扰

第一个 debugger

进入题目,打开开发者工具,就会有 debugger 在这里插入图片描述
查看上一层堆栈, 一个匿名函数执行的 Function(arguments[0] + “bugger”)()
在这里插入图片描述
继续查看上一层堆栈,就能看到生成 debugger 的代码段在这里插入图片描述

手动解混淆后可以看到生成的逻辑
(其实查看上第一层堆栈就能看得出是由 Function 生成的 debugger)

(function (yuanrenxue_222) {
    return function (yuanrenxue_222) {
        if (('i1iliI' !== 'I1iIii')) {
            // yuanrenxue_222 为传进来的参数 'bugger'
            return Function((('Function(arguments[0]+"' + yuanrenxue_222) + '")()'))
        } else {
           // else 块中的代码段是不需要的,因为 if 块条件永远成立
        }
    }(yuanrenxue_222)
}('bugger')('de'))

这是一段由 Function 生成的 debugger

对应的 Hook 代码

Hook 代码

_Function = Function;
Function = function(val){
    if(val.indexOf('debugger') !== -1){
        return _Function.call(this, '');
    }
    return _FUnction.call(this, val);
}

第二个 debugger

向上查看堆栈可以看到生成第二个 debugger 的代码段
在这里插入图片描述
手动解混淆后

(function () {
    // function 里的代码是不需要的,因为里面的代码不会执行
}['constructor'](('debu' + 'gger'))['call']('action'));

这是一段由 Function.prototype.constructor 生成的代码段

对应的 Hook 代码

Hook 代码

__Function = Function.prototype.constructor;
Function.prototype.constructor = function (val) {
    if (val.indexOf('debugger') !== -1) {
        return _Function.call(this, '');
    }
    return _FUnction.call(this, val);
}

第三个 Function.constructor.prototype 检测

上面的代码过掉以后,控制台会报错,点击对应的信息
在这里插入图片描述

对应代码段

const _0x33bb17 = _0x551a2a[_0x3ae18e('\x31\x5e\x7a\x30', 0x1ab, -0x27, 0x53f, -0x23e) + _0x15e3c1('\x76\x68\x35\x63', 0x471, 0x6ee, 0x44b, 0x886) + '\x72'][_0x15e3c1('\x50\x43\x79\x56', 0xc0, -0x12f, 0x1d3, -0x63) + _0x47a4a4('\x5b\x64\x71\x46', 0x22d, 0xb0, 0x457, 0x2d6)][_0x15e3c1('\x26\x24\x47\x49', 0x58, -0x7, 0xbe, -0x280)](_0x551a2a)

// 解混淆后
_0x551a2a['constructor']['prototype']['bind'](_0x551a2a)
// 等于
(function(){})['constructor']['prototype']['bind'](_0x551a2a)                     

检测了 Function.prototype.constructor.prototype
正常情况下 Function.prototype.constructor.prototype === Function.prototype
而 Function.prototype 是一个方法
但是经过上面的 Hook 重写之后 Function.prototype.constructor.prototype 就不是一个方法了,会变成一个对象

对应的 Hook 代码

Hook 代码

在报错的代码断打上断点,注入 Hook 代码后放开断点就正常了
3个 Hook 应该在第一个 Hook 注入时一起注入

_Function.prototype.constructor.prototype = __Function

完整的 Hook 代码

// 第一个 debugger
_Function = Function;
Function = function (val) {
    if (val.indexOf('debugger') !== -1) {
        return _Function.call(this, '');
    }
    return _FUnction.call(this, val);
}

// 第二个 debugger
__Function = _Function.prototype.constructor;
_Function.prototype.constructor = function (val) {
    if (val.indexOf('debugger') !== -1) {
        return __Function.call(this, '');
    }
    return __Function.call(this, val);
}


// 第三个 debugger
_Function.prototype.constructor.prototype = __Function

接口分析

数据接口 https://match.yuanrenxue.cn/api/match/10在这里插入图片描述

请求参数
page 对应页码
m 为加密参数
在这里插入图片描述

响应数据
data 为页面对应的数据
k字段为对象,猜想可能与加密请求参数 m 值有关系在这里插入图片描述

cookie 信息
cookie 只要携带 sessionId 即可
每次请求都会返回相同的 sessionId
在这里插入图片描述

加密参数 m 生成位置

查看请求接口对应的 requests 栈
在这里插入图片描述
下好断点,点击页码后在断点处断住, data对应的变量只包含了 page,m参数却没有
在这里插入图片描述

在这里插入图片描述单步调试可以看出,其实是改写了 XMLHttpRequest.prototype.open 方法

具体的位置 (在请求接口的第一个栈 send)
if (f.open(a.type, a.url, a.async, a.username, a.password),
在这里插入图片描述

在这里插入图片描述

加密参数还原

如果你扣代码没有障碍,可以在目录上查看并跳转到坑点目录即可

在扣代码前,先固定 10.html 和 rsnkw2ksph 文件(这两个文件是动态的)
10.html 应取消格式化再保存
在这里插入图片描述

在这里插入图片描述
遇到无限 debugger 将对应的 Hook 代码注入即可(目录 --> 完整的 Hook 代码)

加密点

单步调试,可以找到加密的关键的位置
function _yrxyA$(_yrx7jl, _yrxcze) {在这里插入图片描述

扣代码提示

扣代码时经常会碰到一个变量为系统内置的函数或方法 通过 [‘call’] 调用
在这里插入图片描述
在浏览器全局搜索该变量赋值的地方,在本地声明为全局变量即可(比较方便)
不嫌麻烦的话 自己替换为对应的内置方法即可(数组引用不多,自己还原就行)
在这里插入图片描述
在这里插入图片描述

进入某个函数中,如果跟到类似这样的代码段,不用扣
代码段的目的是控制 _yrxaij 的值,让程序走向正确的代码段执行在这里插入图片描述
判断 _yrxTY4 的值,确定是否给 _yrxnhf 变量自增
在这里插入图片描述
在 _yrxYfZ 数组取对应的索引并赋值给 _yrxaij
在这里插入图片描述

_yrxyA$()

原代码

function _yrxyA$(_yrx7jl, _yrxcze) {
    try {
        if (typeof _yrx7jl !== _yrxQ9C[6])
            _yrx7jl += ''
    } catch (_yrxrqQ) {
        return _yrx7jl
    }
    if (!(_yrxCJw & 1024)) {
        _yrx7jl = _yrxR2F(_yrx7jl)
    }
    var _yrx$Kn = _yrxtSa(_yrx7jl);
    if (_yrx$Kn === null) {
        return _yrx7jl
    }
    if (_yrx$Kn._yrxKni > 3) {
        return _yrxtY2(_yrx$Kn)
    }
    // ↑ 代码是不需要的

    // _yrx$Kn._yrx2ad + _yrx$Kn._yrxAmM 为对应的 路径 + 查询参数 例: /api/match/10?page=1
    // _yrx5XG 为 encodeURIComponent 系统内置函数
    var _yrxmEu = _yrxWKg(_yrxyHJ(_yrx5XG(_yrx$Kn._yrx2ad + _yrx$Kn._yrxAmM)));
    // _yrx7jl 用于拼接成一段完整的域名(不需要)
    var _yrx7jl = _yrx$Kn._yrxCiX + _yrx$Kn._yrxAmM;
    if (_yrx$Kn._yrxAmM === '')
        _yrx7jl = _yrx7jl + '?';
    else
        _yrx7jl = _yrx7jl + '&';
    var _yrx2LR = _yrx$Kn._yrxiv8 + _yrx7jl;
    // _yrx$Kn._yrxQZs 也是对应的 路径 + 查询参数 例: /api/match/10?page=1
    // _yrxcze 一直都为 undefined 因为调用这个函数的时候就没有给形参 _yrxcze 传值
    
    _yrx2LR += _yrxBXT(779, _yrx$Kn._yrxQZs, _yrxmEu, _yrxcze);
    _yrx2LR += _yrx$Kn._yrxcFt;  // 这一段也是不需要的
    return _yrx2LR
}

改写

function sdk(params){
    var _yrxmEu = _yrxWKg(_yrxyHJ(encodeURIComponent(params)));
    let result = _yrxBXT(779, params, _yrxmEu, undefined);
    return result
}
console.log(sdk("/api/match/10?page=1"));  // 调用

后续照样子缺啥补啥即可

var _yrxmEu = _yrxWKg(_yrxyHJ…

_yrxWKg()

var _yrxrqQ = new _yrx03s();
_yrx03s 函数有 prototype 原型 这里是需要补的
先将 _yrx03s() 方法扣好
再查找 prototype 赋值的地方
在这里插入图片描述
在这里插入图片描述

示例

 function _yrx03s() {
    this._yrx4r0 = this._yrxa9O['slice'](0);
    this._yrxNj0 = [];
    this._yrx2tg = 0
}
function _yrxs6z() {
	// 代码太长了 全局搜索 function _yrxs6z() {
}
_yrx03s['prototype'] = new _yrxs6z();

对应的函数补完之后 _yrxmEu 值就可以生成了,验证下结果
>

let result = _yrxBXT(779, …

_yrxBXT() 方法里面是控制流,跟着控制流扣对应的代码即可

_yrxBXT() 方法进入会声明变量,这里面也是需要声明的(涉及到闭包作用域的问题)

示例

 function _yrxBXT(_yrx4Aj, _yrx7jl, _yrxcze, _yrxyqC) {

    var _yrx4Sf, _yrxxIM, _yrxWxp, _yrxPhB, _yrxnZw, _yrxUSw, _yrxWfm, _yrxxy4, _yrxE8L, _yrx7ea, _yrxrqQ, _yrx$Kn, _yrxmEu, _yrx2LR, _yrx3il, _yrxTXe, _yrxxj7, _yrxDS9, _yrxI6a, _yrx2aP, _yrxG5u;
    var _yrxTY4, _yrxaij; // _yrxnhf = _yrx4Aj, _yrxYfZ = _yrxFzI[1];
    // _yrxnhf, _yrxYfZ 这两个变量的作用是接收对应的指令,执行对应的代码段,所以不需要扣
    if (_yrx4Aj === 779){
        // 在浏览器单步调试 边调试边将对应的代码段扣进来即可
        // 例如调试到的第一个代码段为 var _yrxrqQ = [] 
        // 将对应的代码段扣下来即可
        var _yrxrqQ = [];
    }
}

调试后会发现 _yrxBXT() 有重复调用的情况, 加多个 if 就行
在这里插入图片描述

function _yrxBXT(_yrx4Aj, _yrx7jl, _yrxcze, _yrxyqC) {
    var _yrx4Sf, _yrxxIM, _yrxWxp, _yrxPhB, _yrxnZw, _yrxUSw, _yrxWfm, _yrxxy4, _yrxE8L, _yrx7ea, _yrxrqQ, _yrx$Kn, _yrxmEu, _yrx2LR, _yrx3il, _yrxTXe, _yrxxj7, _yrxDS9, _yrxI6a, _yrx2aP, _yrxG5u;
    var _yrxTY4, _yrxaij; // _yrxnhf = _yrx4Aj, _yrxYfZ = _yrxFzI[1];
    // _yrxnhf, _yrxYfZ 这两个变量的作用是接收对应的指令,执行对应的代码段,所以不需要扣
    if (_yrx4Aj === 779){
        // 在浏览器单步调试边调试边将对应的代码段扣进来即可
        var _yrxrqQ = [];
        var _yrx$Kn = ''
        var _yrxmEu = _yrxBXT(746, 6)
    }
    if (_yrx4Aj === 746){
        // 在浏览器单步调试边调试边将对应的代码段扣进来即可
        // 例: var _yrxrqQ = _yrxlo_(_yrx1_p())
    }
}

可以按照这个模板扣代码

function _yrxBXT(_yrx4Aj, _yrx7jl, _yrxcze, _yrxyqC) {
    var _yrx4Sf, _yrxxIM, _yrxWxp, _yrxPhB, _yrxnZw, _yrxUSw, _yrxWfm, _yrxxy4, _yrxE8L, _yrx7ea, _yrxrqQ, _yrx$Kn, _yrxmEu, _yrx2LR, _yrx3il, _yrxTXe, _yrxxj7, _yrxDS9, _yrxI6a, _yrx2aP, _yrxG5u;
    var _yrxTY4, _yrxaij;
    if(_yrx4Aj === 779){
        var _yrxrqQ = [];
        var _yrx$Kn = '';
        var _yrxmEu = _yrxBXT(746, 6)
        _yrxays = '{qqqqqqqqq~F3F2Y0r8FDwZzST.0m833g1O8K3Lp5rUZVIEcS2.5cJl.aG4FKElt0sBukW2APm.aigTYNPnEiHGB.rsZldYKLmjhKMlS.a14qdQvjSF.ttGuXYj_J4ZD_ubMJXyYvnjaEiNKXmjLtEaVbP_1Wtzp_c8AcRE7CAtcJzEWjnB1kL9o9pK9mgzFLnu3cMGOX2DhxMZHnGFTt7Qhzft6EgVMbYj4hylyunHiJEAxbfUmkF7XpArhr2Jp8YRTsDll3TWSYsTW3SlSqsGkIpl0rKVKFpq9soVlwTW2Y1mWISlzhY70Un2nxPGKMAehKUfUxamAY0GuV1Y_YfGSAmzUhoVzVsxkclyRc80qKXecN.sWZDpUvSdYGoST5hq.nynMpWTcSGZ99KpMJ0B24Wpp33Bjo3ePE0_BzQLBpi9r0l4096hdtX.i.ivhmjqqqqqqqqqDdfe167kR2El3leHql3650hAuA1Wm3ZJmRr0qq!x7z,aac,amr,asm,avi,bak,bat,bmp,bin,c,cab,css,csv,com,cpp,dat,dll,doc,dot,docx,exe,eot,fla,flc,fon,fot,font,gdb,gif,gz,gho,hlp,hpp,htc,ico,ini,inf,ins,iso,js,jar,jpg,jpeg,json,java,lib,log,mid,mp4,mpa,m4a,mp3,mpg,mkv,mod,mov,mim,mpp,msi,mpeg,obj,ocx,ogg,olb,ole,otf,py,pyc,pas,pgm,ppm,pps,ppt,pdf,pptx,png,pic,pli,psd,qif,qtx,ra,rm,ram,rmvb,reg,res,rtf,rar,so,sbl,sfx,swa,swf,svg,sys,tar,taz,tif,tiff,torrent,txt,ttf,vsd,vss,vsw,vxd,woff,woff2,wmv,wma,wav,wps,xbm,xpm,xls,xlsx,xsl,xml,z,zip,apk,plist,ipaqqqqqM1L25X6idI4fnXojgI.z5XU_9I_Q{.DGZ.J1G9Eoe4RoJ08CrTRupbwbxeQUpjJoRdwUTLQv0.xcG7EmJyV6eowqTnAUJcQ2x_mPqFhfJ01CScIVTXAbGqF9JBY6JIFpSCYvpsM20HRSRYxYAGV1ephYWqr1r4k162hZrX5whI412tqq}!iAgmRTwdsDARRVrPUcgMImrSUUJUJp2SU1AMpKR0Y6rKImTrRO0Rs2fWUrZMsUrUwCpWwYwb8m2dlmRiUDmg3K26KbYQAUmEwKRFq9mPAo2zp2zIk6rbQArOsKLhwKSNQKS3UomQsvR.w2ArwOJno9N.1qeNQlWG1GwOo9WFFop4xUy7Ds23Hla0roqUoAl93qr6lC98ksp6FVq5UGpnDlq7DCqqqqqqXAOo30eljTuAgmeehhIUrtA;4kUyzUi8kgD7ll6J2MqFBA;k136EQOTwklqJ|gc10eslSeWlfIq0ms3Vz7rVrl3TRSDkNJ10rt3KSGM6wLpKwWUVpc8la.Wkfjrm9WpnJtw0EfFSfGhmZ9FrJEkYZQIqecmo9mYG9ZH0EP31xQiUSOFueM3s0IM1JQMuafKny3oC3z3sS.kC3OMap4EYrsAn2Lh27nApZZKbgf82NrEbZNpqezJuzcAnRkxYgZVSSJplV5UuxHlkG0Y922mTg5Qczkh6rxs7J2SvHMA7rEasuQMWztyDIIHZwhybsyK8yD4mvm1.ymC2kE8XrenTOGKWxvZ2uXKeYlVMqTwimVCKszMxYZ9Knp3r0t1074790432Y3HGMHwnXHqzPTCrao7BEU';
        _yrxVMl = {
            "scj": [],
            "_yrxdD_": ["_yrxvn$", "_yrxnIK", "_yrxw3G", "_yrx4Sh", "_yrx8LV", "_yrx1e8", "_yrxc$E", "_yrxIEc", "_yrx9zH", "_yrxYeM", "_yrxlCm", "_yrxUlA", "_yrx6L9", "_yrxCZ3", "_yrxC72", "_yrxEvO", "_yrxksc", "_yrxbDF", "_yrxVrt", "_yrxlQ1", "_yrxYZC", "_yrxdDm", "_yrxFpw", "_yrxJPo", "_yrxfMk", "_yrxpnH", "_yrxyLY", "_yrxEH7", "_yrxwaS", "_yrxXGq", "_yrxdJ4", "_yrxANR", "_yrx9K2", "_yrxCIU", "_yrx_yd", "_yrx5El", "_yrxGxQ", "_yrxDnL", "_yrxgie", "_yrxBoU", "_yrxAv3", "_yrx9XC", "_yrxqy0", "_yrxIvz", "_yrxHpk", "_yrxQsc", "_yrxZXD", "_yrxEM9", "_yrx1x3", "_yrxyum", "_yrxa$M", "_yrxbFy", "_yrxUQ9", "_yrx0N3", "_yrx_Mu", "_yrx4vh", "_yrxphR", "_yrxuIo", "_yrxuHi", "_yrxh5_", "_yrx$re", "_yrxA_W", "_yrxtCE", "_yrxEIH", "_yrxOWU", "_yrxgbu", "_yrxrIo", "_yrxrp_", "_yrxQfa", "_yrxzw0", "_yrxzO0", "_yrxCwK", "_yrxxoO", "_yrxEvl", "_yrx148", "_yrx6sx", "_yrxgJ7", "_yrxzWA", "_yrxbvq", "_yrxMXv", "_yrxEG0", "_yrx1Gh", "_yrxDvn", "_yrxbUG", "_yrx6Ot", "_yrxuxO", "_yrx5T2", "_yrxDH0", "_yrx78n", "_yrxl1W", "_yrxRph", "_yrxhP3", "_yrxYTK", "_yrxB2k", "_yrx8IE", "_yrxiSq", "_yrxRVO", "_yrxkm0", "_yrx3xY", "_yrxFfV", "_yrxL82", "_yrxo5n", "_yrxIE7", "_yrxIN8", "_yrxvah", "_yrxCkZ", "_yrx5Tr", "_yrxKQ7", "_yrxs3J", "_yrx3Zy", "_yrxbVe", "_yrxvpX", "_yrxNy7", "_yrxX7$", "_yrxguY", "_yrxsCY", "_yrx$Rr", "_yrxCKr", "_yrxLm1", "_yrxf$v", "_yrx38N", "_yrxesH", "_yrxBFw", "_yrxaXm", "_yrxKtx", "_yrx62w", "_yrxbzo", "_yrxd$z", "_yrxRNY", "_yrxa01", "_yrxzX3", "_yrxPh$", "_yrxo3Y", "_yrxueR", "_yrxesu", "_yrxZxk", "_yrxFhg", "_yrx1DZ", "_yrxlgb", "_yrx1Dk", "_yrxjRT", "_yrxXZS", "_yrxIZD", "_yrxxLm", "_yrxReq", "_yrxSGY", "_yrxobT", "_yrxLxA", "_yrxljD", "_yrx7Ua", "_yrxIAZ", "_yrxB7N", "_yrxY3F", "_yrxNar", "_yrxeDY", "_yrxxFM", "_yrxYdQ", "_yrxoIx", "_yrxXLs", "_yrxskY", "_yrxOzH", "_yrxRHC", "_yrxdD_", "_yrxF9v", "_yrxSQs", "_yrxXKo", "_yrxe_I", "_yrxkdW", "_yrxjQZ", "_yrxrl5", "_yrx9Cs", "_yrxwrM", "_yrxxuf", "_yrxG1y", "_yrxBeS", "_yrxIR_", "_yrxa05", "_yrxJzA", "_yrxpzH", "_yrx2Qi", "_yrxlS3", "_yrxh$_", "_yrxcUJ", "_yrxHzD", "_yrxkbM", "_yrxtjm", "_yrxujQ", "_yrxQ2N", "_yrxyHY", "_yrx8_W", "_yrx5cB", "_yrxcKn", "_yrxewE", "_yrx3l5", "_yrx9ma", "_yrxwmT", "_yrxPpH", "_yrxPTc", "_yrxHIr", "_yrxJPm", "_yrx5TB", "_yrxNhj", "_yrxzgw", "_yrxwNp", "_yrx384", "_yrxGMB", "_yrxOlf", "_yrxlLZ", "_yrxbmY", "_yrx7fF", "_yrxByv", "_yrxMcz", "_yrx5DU", "_yrxI_A", "_yrxwHl", "_yrxCqV", "_yrxGUo", "_yrx8Bu", "_yrxsA9", "_yrx2vL", "_yrxrmP", "_yrxkcn", "_yrxnbH", "_yrxeCo", "_yrxJTd", "_yrxGr9", "_yrxRFl", "_yrxuZX", "_yrxLB$", "_yrxzfU", "_yrxb8Z", "_yrxoVn", "_yrxs4W", "_yrx7Ly", "_yrx6MZ", "_yrxxzB", "_yrxxJf", "_yrxfLH", "_yrxnaE", "_yrxGLk", "_yrxsfq", "_yrxq1J", "_yrx7MS", "_yrx_CY", "_yrxxs7", "_yrxAUK", "_yrxysL", "_yrxvt0", "_yrxvGj", "_yrxVZ5", "_yrxd6Y", "_yrxGFx", "_yrxwoX", "_yrxMty", "_yrxLAe", "_yrxVH8", "_yrxgny", "_yrxGOA", "_yrxxZ1", "_yrxMtN", "_yrxqc0", "_yrxryX", "_yrxYNU", "_yrxCxm", "_yrx6eT", "_yrxipW", "_yrxxh$", "_yrx$VN", "_yrxAbr", "_yrxYXt", "_yrxn5J", "_yrxyUW", "_yrxWNu", "_yrxCPn", "_yrxrxt", "_yrxMqa", "_yrxwl9", "_yrxpTj", "_yrx5ZS", "_yrxdUL", "_yrxT24", "_yrxj6t", "_yrxqy3", "_yrxeKO", "_yrxJtv", "_yrxYT$", "_yrxQHJ", "_yrxkGQ", "_yrxH$W", "_yrxtlb", "_yrxC6E", "_yrx6Co", "_yrxPoS", "_yrxz5E", "_yrx_MJ", "_yrxCis", "_yrxiJr", "_yrxbW$", "_yrxUCq", "_yrx4L6", "_yrxrNH", "_yrxsbl", "_yrxbGf", "_yrxUtc", "_yrxkAl", "_yrxGx4", "_yrxKHt", "_yrxfzV", "_yrxPjI", "_yrx9$i", "_yrxf8y", "_yrxC8m", "_yrxpvu", "_yrxMYv", "_yrxoBI", "_yrxXNY", "_yrxfop", "_yrxlai", "_yrxhs4", "_yrxt8s", "_yrx3vn", "_yrxiJ_", "_yrxrsz", "_yrxy3U", "_yrxiyJ", "_yrxe95", "_yrx1c3", "_yrxv6V", "_yrxMIW", "_yrx3Zr", "_yrxXaH", "_yrxc9Z", "_yrxvnj", "_yrxITk", "_yrx3gL", "_yrxQjp", "_yrxF7S", "_yrx4nv", "_yrxOti", "_yrxUew", "_yrxZa$", "_yrxs1t", "_yrxACY", "_yrxi0j", "_yrxhKn", "_yrxBR$", "_yrxq1j", "_yrxWFn", "_yrxAsZ", "_yrxIJz", "_yrxcGo", "_yrxkEO", "_yrxBrv", "_yrxQlP", "_yrxk5W", "_yrxQea", "_yrx6Tl", "_yrxspT", "_yrxMdm", "_yrxXjK", "_yrxSXA", "_yrxbhG", "_yrxmQM", "_yrxHMV", "_yrxWfK", "_yrxT30", "_yrxO$q", "_yrxgeN", "_yrxfsZ", "_yrxRkB", "_yrx1oK", "_yrx5eX", "_yrxBOd", "_yrx_FJ", "_yrxCKS", "_yrx0pK", "_yrx8PQ", "_yrxVYs", "_yrxtID", "_yrxQop", "_yrxrti", "_yrxhpM", "_yrxR4J", "_yrxSIs", "_yrxYue", "_yrxaMJ", "_yrxm4r", "_yrxW9G", "_yrxmEn", "_yrxp8I", "_yrx8Mg", "_yrxVCk", "_yrx4yh", "_yrxu$6", "_yrxsKT", "_yrxg_C", "_yrxTek", "_yrx2ls", "_yrxJlC", "_yrxxlW", "_yrxYCT", "_yrxYwL", "_yrxFMr", "_yrx_HZ", "_yrxdP_", "_yrxib_", "_yrxZzn", "_yrxoWN", "_yrxCr8", "_yrxW2V", "_yrxq0O", "_yrxZDq", "_yrxJt6", "_yrx4ZB", "_yrxDtu", "_yrxvws", "_yrxFvG", "_yrxsXn", "_yrxLUO", "_yrxmLF", "_yrx0aH", "_yrxgrL", "_yrx$vi", "_yrxMjU", "_yrxgnz", "_yrxH4g", "_yrxlAD", "_yrxZbF", "_yrxZ9O", "_yrxyDh", "_yrxGQI", "_yrxIXE", "_yrxlKt", "_yrxaMH", "_yrxbwQ", "_yrx7vl", "_yrxcs_", "_yrxnQG", "_yrxLGi", "_yrxqmY", "_yrx3$u", "_yrxsFd", "_yrxsiZ", "_yrxRcF", "_yrxnm6", "_yrxJZB", "_yrxSA8", "_yrxsmv", "_yrx$IW", "_yrx6iQ", "_yrxCSB", "_yrxCSj", "_yrxyol", "_yrxxb7", "_yrx$GK", "_yrxtMv", "_yrxKyq", "_yrxtmC", "_yrxRXY", "_yrx0bX", "_yrxktO", "_yrx0Yy", "_yrxqmN", "_yrxKob", "_yrxDyf", "_yrxWyR", "_yrx0uk", "_yrx35v", "_yrx_c3", "_yrxBhN", "_yrxjFS", "_yrxZBz", "_yrxqir", "_yrx1Zm", "_yrxWXt", "_yrxSiZ", "_yrx1pR", "_yrxnI6", "_yrxgPc", "_yrxHzZ", "_yrx0AE", "_yrxlBA", "_yrxZL7", "_yrxKTc", "_yrxhu3", "_yrxKrv", "_yrxGEI", "_yrxhIk", "_yrxVo3", "_yrxE8B", "_yrx0u2", "_yrxoiI", "_yrx5Nx", "_yrxkbn", "_yrxbc_", "_yrxnWX", "_yrxti2", "_yrxYCx", "_yrxQ5b", "_yrxhqz", "_yrxslt", "_yrxuQs", "_yrx1oc", "_yrxgJq", "_yrxsXq", "_yrxuDZ", "_yrxJvd", "_yrxARP", "_yrxGN1", "_yrxIAU", "_yrxkzY", "_yrxBRE", "_yrx6$W", "_yrxcCO", "_yrxwRb", "_yrxKBC", "_yrxyRP", "_yrxN9H", "_yrxiZr", "_yrxmOc", "_yrxNP$", "_yrxFvM", "_yrxXFt", "_yrxwcB", "_yrxDHA", "_yrxaTZ", "_yrx4nd", "_yrxbSu", "_yrx8fG", "_yrxanS", "_yrx4sc", "_yrx65U", "_yrxWp0", "_yrxeCH", "_yrx6cf", "_yrxRUs", "_yrx5Ez", "_yrxrpn", "_yrxIUj", "_yrxmrS", "_yrxh4U", "_yrx8v4", "_yrxJwg", "_yrxMAX", "_yrxLQa", "_yrxCwd", "_yrxgUq", "_yrxZsd", "_yrxwgT", "_yrx2CI", "_yrxdDM", "_yrxq3B", "_yrx0$G", "_yrxs3D", "_yrxYXC", "_yrxqXj", "_yrxg6c", "_yrxzKr", "_yrxHqj", "_yrxpze", "_yrxavz", "_yrx0UI", "_yrxR9p", "_yrxv1m", "_yrxo$_", "_yrxfZ5", "_yrxR$I", "_yrxoRY", "_yrxXdI", "_yrxZaO", "_yrxvNs", "_yrx94Y", "_yrxpwF", "_yrxhSJ", "_yrx1e0", "_yrxBHc", "_yrxHWO", "_yrxG$u", "_yrx_IP", "_yrxvgx", "_yrx6V8", "_yrxJoN", "_yrx_sb", "_yrxCnA", "_yrxxQ3", "_yrxIz2", "_yrxqe1", "_yrxseo", "_yrxWvn", "_yrxjzR", "_yrxSpt", "_yrxC3u", "_yrxWhC", "_yrxL$E", "_yrxsNG", "_yrxr4R", "_yrxP9n", "_yrxs_S", "_yrxyvu", "_yrxp2H", "_yrxCc5", "_yrxiaz", "_yrxbp3", "_yrxXDC", "_yrxc1W", "_yrxqwf", "_yrx_Md", "_yrxmVv", "_yrxAOV", "_yrxOFw", "_yrx_Jy", "_yrx46_", "_yrxU$j", "_yrxB6t", "_yrxgG$", "_yrx0kE", "_yrxnmu", "_yrxXa9", "_yrxTS1", "_yrxWYB", "_yrxydX", "_yrxs0x", "_yrxVaz", "_yrxemL", "_yrx8OV", "_yrxf6A", "_yrxHqN", "_yrxHnX", "_yrxa0E", "_yrxE1m", "_yrxcSp", "_yrxBsz", "_yrxKrH", "_yrxuPJ", "_yrxx0N", "_yrxSRQ", "_yrxfEV", "_yrxPtQ", "_yrxfaI", "_yrxuNA", "_yrx2jW", "_yrxP9Z", "_yrxNs6", "_yrxRaI", "_yrxBUi", "_yrxoLR", "_yrxcMm", "_yrxLWC", "_yrxjMy", "_yrxyZo", "_yrxFX2", "_yrxMW1", "_yrx5nY", "_yrxgcF", "_yrxB27", "_yrx_t3", "_yrxxFN", "_yrx5C4", "_yrx8O6", "_yrxiC8", "_yrxUzY", "_yrxsf2", "_yrxlRr", "_yrxmtc", "_yrxrFm", "_yrxka3", "_yrxv8F", "_yrxoYx", "_yrxtsH", "_yrxHDC", "_yrxhOy", "_yrxEo1", "_yrxMmL", "_yrxwjf", "_yrxLtD", "_yrxlWr", "_yrxsRq", "_yrxk2P", "_yrxYUF", "_yrx38b", "_yrxeDI", "_yrxD6s", "_yrxlGM", "_yrxM7l", "_yrxdxm", "_yrxZP0", "_yrxuKx", "_yrxqge", "_yrxC2_", "_yrxCLW", "_yrxe9l", "_yrx0SW", "_yrx_DI", "_yrxAGq", "_yrxFBS", "_yrxZ5Q", "_yrxydK", "_yrxcDL", "_yrxEvY", "_yrxT3X", "_yrxwt4", "_yrxWFi", "_yrxcWt", "_yrxX9a", "_yrx6$O", "_yrxioC", "_yrx97k", "_yrx5zl", "_yrxdFJ", "_yrxE78", "_yrxmsT", "_yrxAMx", "_yrx_jm", "_yrxtFh", "_yrxQpl", "_yrxCwc", "_yrxWTD", "_yrxJo8", "_yrx1CB", "_yrxE5Q", "_yrxK$s", "_yrxheq", "_yrxxaO", "_yrxl9I", "_yrxP4e", "_yrxOdV", "_yrxo91", "_yrxsXv", "_yrxBIv", "_yrxgrQ", "_yrxQp3", "_yrx_o4", "_yrx1ZQ", "_yrxTca", "_yrx$ik", "_yrxW4m", "_yrxYfv", "_yrxGTH", "_yrx3Xx", "_yrxvBq", "_yrxOkz", "_yrxbY0", "_yrxvlu", "_yrx6kn", "_yrxOXt", "_yrxDaw", "_yrxPkV", "_yrx9er", "_yrxjGP", "_yrxkr0", "_yrxIYv", "_yrxV9K", "_yrxuXS", "_yrxrsp", "_yrxvAM", "_yrxXZW", "_yrxixH", "_yrx_9X", "_yrxW$P", "_yrxE$A", "_yrxF6D", "_yrxQPF", "_yrxgnE", "_yrxUk5", "_yrxgOw", "_yrx0kY", "_yrx5es", "_yrxHi2", "_yrxaOF", "_yrx5ih", "_yrx60p", "_yrxJe2", "_yrxlXc", "_yrxjCx", "_yrx5ST", "_yrxao0", "_yrxNvQ", "_yrx58d", "_yrxZHQ", "_yrxAib", "_yrxTDa", "_yrxxoi", "_yrxoJG", "_yrxzyD", "_yrxcpE", "_yrx6bH", "_yrxoHC", "_yrxsHn", "_yrxSTy", "_yrxzYG", "_yrxK_u", "_yrxBbS", "_yrxJy8", "_yrxCnq", "_yrxlBI", "_yrxC_3", "_yrxk$S", "_yrxXte", "_yrxg7A", "_yrxwHO", "_yrxDJL", "_yrxMfm", "_yrxt$d", "_yrx0Su", "_yrx7KW", "_yrxVua", "_yrx0jZ", "_yrx2Wn", "_yrx$EP", "_yrxCl6", "_yrxPEb", "_yrx2iR", "_yrxqXd", "_yrxsCu", "_yrxT8A", "_yrx6St", "_yrxfNC", "_yrx0vn", "_yrx_rq", "_yrxRHu", "_yrx70z", "_yrxlJu", "_yrxFyi", "_yrx47w", "_yrxhXn", "_yrxcd6", "_yrxviG", "_yrxhu$", "_yrxWMk", "_yrxCEV", "_yrxrv4", "_yrxa$v", "_yrxE6t", "_yrxGbF", "_yrxQ19", "_yrxOFZ", "_yrxOSA", "_yrxDSX", "_yrxFlt", "_yrxXrx", "_yrxsCI", "_yrxRwv", "_yrx9WZ", "_yrxAiy", "_yrxzXv", "_yrx2IV", "_yrx58j", "_yrxcgQ", "_yrxH3P", "_yrxPVu", "_yrx6LX", "_yrxIar", "_yrxVYQ", "_yrxVSH", "_yrxOr6", "_yrxR$e", "_yrxCxh", "_yrxw8g", "_yrxrjd", "_yrx4G7", "_yrxG$g", "_yrxDL5", "_yrxy6K", "_yrxB7w", "_yrx0UT", "_yrxxEX", "_yrxPFL", "_yrxUDM", "_yrxBqk", "_yrxcOX", "_yrxVw5", "_yrxJLb", "_yrx1j0", "_yrxV6u", "_yrxTcE", "_yrx1rx", "_yrxVZb", "_yrxKDI", "_yrxdCW", "_yrxoGE", "_yrxWMU", "_yrxU0T", "_yrx6TG", "_yrxj$b", "_yrxMBG", "_yrxM8R", "_yrxjHs", "_yrxwsM", "_yrxKmt", "_yrxGhr", "_yrxK1p", "_yrx2Cy", "_yrxKqP", "_yrxpnC", "_yrxgDT", "_yrxpi6", "_yrxjYX", "_yrxac4", "_yrxUva", "_yrxkFO", "_yrxOz6", "_yrx4Lq", "_yrxE5J", "_yrxRGz", "_yrxHaQ", "_yrxVCU", "_yrxaPy", "_yrxzxI", "_yrxxyQ", "_yrxdGe", "_yrxqhC", "_yrxcJC", "_yrxI9o", "_yrxaPr", "_yrxf$e", "_yrx$ki", "_yrxT4k", "_yrx4RC", "_yrxzO3", "_yrxrAG", "_yrxR$H"],
            "_yrxJPo": 42,
            "_yrxw3G": 25,
            "_yrxfMk": 2,
            "_yrxueR": "_yrxh5_",
            "_yrxRNY": "_yrx0N3",
            "_yrxa01": "_yrx_Mu",
            "_yrxesu": "_yrx4vh",
            "_yrxzX3": "_yrxphR",
            "_yrxPh$": "_yrxuIo",
            "_yrxo3Y": "_yrxuHi",
            "_yrxZxk": "_yrxA_W",
            "_yrxyum": "_yrx$re",
            "_yrx1x3": "_yrxBoU",
            "_yrx8LV": "SKqUSREnLma",
            "_yrxpnH": "6IlAN8vwS8G",
            "_yrxc$E": "SDYIJJvVXUgSzuW0plhENg",
            "_yrxOzH": "JXvH5PnmBoa",
            "_yrxAv3": "9cYSTvrLw95znNK8s5SwUa",
            "_yrxJPm": "_yrxrGA",
            "_yrx9XC": 103,
            "_yrx5TB": "_yrx$IW",
            "_yrxqy0": 203,
            "_yrxNhj": "_yrx71e",
            "_yrxgie": 203,
            "_yrxzgw": "_yrxb2c",
            "_yrxIvz": 180,
            "_yrx5El": -15,
            "aebi": [[], [510, 72, 82, 242, 535, 334, 168, 129, 535, 519, 468, 338, 468, 519, 502, 70, 242, 298, 244, 519, 398, 242, 497, 261, 519, 523, 401, 468, 314, 219, 266, 519, 347, 519, 468, 332, 124, 115, 162, 425, 195, 242, 319, 205, 245, 316, 242, 47, 18, 217, 417, 227, 531, 212, 374, 464, 204, 242, 431, 415, 204, 242, 431, 31, 204, 242, 431, 468, 250, 347, 519, 10, 519, 173, 140, 209, 305, 306, 489, 33, 519, 268, 448, 242, 254, 28, 519, 468, 518, 215, 60, 519, 165, 208, 242, 214, 519, 102, 385, 96, 428, 330, 17, 223, 481, 348, 267, 524, 471, 455, 4, 528, 29, 428, 283, 288, 285, 17, 184, 418, 513, 517, 251, 195, 242, 519, 318, 414, 519, 173, 379, 242, 137, 303, 189, 519, 325, 457, 519, 451, 242, 405, 48, 519, 469, 519, 299, 50, 411, 209, 519, 306, 182, 519, 502, 333, 199, 209, 232, 512, 519, 282, 30, 448, 209, 232, 512, 519, 360, 395, 519, 529, 365, 372, 519, 49, 350, 209, 5, 86, 136, 209, 143, 0, 161, 209, 36, 54, 141, 209, 79, 134, 64, 209, 159, 149, 198, 333, 390, 242, 306, 138, 421, 80, 209, 512, 247, 151, 209, 38, 238, 384, 209, 538, 443, 200, 209, 228, 122, 27, 209, 132, 222, 172, 242, 521, 109, 519, 94, 530, 519, 173, 409, 21, 77, 519, 492, 494, 291, 412, 130, 209, 452, 306, 440, 257, 242, 197, 28, 519, 492, 249, 519, 321, 242, 527, 14, 519, 442, 302, 242, 327, 230, 519, 468, 468, 346, 519, 280, 533, 355, 152, 435, 381, 394, 294, 466, 516, 183, 145, 468, 410, 185, 470, 144, 257, 209, 135, 226, 387, 257, 209, 312, 506, 1, 100, 337, 118, 486, 445, 399, 196, 361, 408, 87, 157, 526, 139, 194, 257, 209, 312, 484, 322, 257, 209, 312, 233, 39, 348, 206, 65, 370, 534, 503, 20, 148, 59, 242, 142, 476, 252, 375, 209, 125, 25, 511, 348, 505, 121, 520, 123, 316, 209, 187, 253, 293, 348, 525, 155, 265, 150, 237, 242, 434, 335, 474, 242, 51, 478, 348, 424, 40, 169, 127, 209, 388, 154, 235, 128, 209, 515, 34, 81, 176, 209, 111, 119, 62, 176, 209, 111, 433, 446, 304, 459, 242, 326, 468, 43, 519, 112, 242, 3, 313, 310, 519, 104, 333, 284, 368, 436, 307, 468, 519, 173, 404, 351, 503, 391, 290, 348, 367, 69, 468, 103, 112, 242, 352, 292, 56, 324, 242, 315, 519, 323, 242, 495, 396, 519, 112, 242, 482, 89, 519, 101, 259, 203, 519, 229, 203, 519, 201, 348, 63, 263, 271, 519, 236, 358, 532, 209, 389, 306, 218, 519, 7, 345, 449, 75, 406, 519, 344, 240, 258, 67, 458, 193, 153, 514, 274, 120, 181, 450, 447, 19, 348, 256, 147, 460, 488, 58, 301, 180, 272, 331, 116, 88, 243, 146, 44, 281, 202, 73, 519, 210, 113, 519, 262, 519, 461, 473, 456, 519, 507, 209, 329, 6, 519, 507, 209, 504, 373, 519, 507, 242, 178, 519, 280, 211, 499, 295, 432, 213, 348, 220, 170, 105, 264, 37, 519, 52, 248, 519, 507, 100, 188, 221, 45, 209, 287, 179, 311, 383, 348, 463, 242, 328, 519, 468, 126, 422, 519, 68, 519, 507, 242, 23, 519, 468, 369, 242, 465, 296, 231, 519, 156, 242, 477, 519, 41, 359, 158, 131, 537, 225, 423, 519, 277, 158, 341, 133, 380, 420, 519, 173, 32, 340, 204, 90, 107, 209, 234, 491, 241, 209, 84, 207, 536, 209, 462, 191, 437, 209, 397, 517, 166, 209, 356, 306, 106, 33, 519, 354, 74, 519, 279, 519, 419, 76, 519, 273, 519, 362, 209, 468, 519, 66, 224, 439, 519, 413, 382, 519, 403, 490, 257, 348, 522, 487, 349, 255, 239, 257, 29, 55, 441, 91, 209, 500, 222, 467, 242, 480, 530, 519, 173, 496, 286, 348, 386, 15, 24, 519, 171, 519, 8, 519, 110, 468, 177, 519, 363, 22, 498, 377, 289, 348, 427, 453, 117, 300, 163, 393, 519, 275, 444, 426, 454, 24, 519, 485, 2, 242, 483, 366, 519, 61, 472, 108, 376, 92, 209, 175, 306, 297, 519, 475, 519, 378, 501, 438, 97, 209, 468, 167, 364, 503, 11, 357, 509, 336, 493, 85, 93, 242, 53, 402, 519, 371, 407, 57, 216, 16, 13, 71, 242, 270, 353, 186, 429, 342, 9, 242, 270, 339, 519, 371, 407, 26, 192, 242, 519, 276, 343, 209, 278, 468, 246, 508, 416, 309, 190, 392, 83, 42, 320, 519, 269, 260, 209, 400, 98, 519, 99, 519, 173, 479, 33, 519, 78, 501, 430, 204, 348, 164, 174, 12, 35, 519, 371, 114, 519, 317, 95, 308, 160, 242, 46, 519], [28, 39, 33, 39, 77, 108, 45, 100, 17, 83, 56, 26, 56, 80, 18, 56, 32, 56, 30, 66, 51, 62, 56, 96, 56, 68, 64, 56, 56, 7, 56, 35, 17, 2, 56, 119, 56, 61, 56, 57, 56, 22, 109, 76, 58, 17, 36, 118, 56, 46, 56, 87, 89, 56, 85, 104, 56, 111, 93, 110, 113, 91, 84, 56, 6, 59, 40, 110, 5, 69, 102, 56, 60, 56, 73, 56, 73, 56, 63, 56, 55, 35, 108, 20, 107, 17, 94, 82, 88, 98, 17, 15, 42, 34, 13, 97, 79, 33, 37, 1, 123, 74, 3, 25, 116, 108, 75, 13, 106, 69, 75, 56, 8, 56, 86, 65, 19, 65, 17, 78, 126, 17, 56, 95, 11, 92, 27, 23, 120, 125, 110, 114, 90, 47, 34, 14, 17, 114, 112, 44, 29, 81, 115, 121, 120, 70, 110, 41, 90, 101, 34, 50, 17, 41, 56, 67, 17, 16, 56, 54, 56, 56, 12, 24, 17, 56, 9, 31, 34, 75, 109, 124, 75, 38, 56, 72, 48, 99, 21, 56, 117, 110, 49, 69, 122, 56, 117, 17, 56, 0, 71, 10, 4, 105, 53, 52, 103, 43, 56], [27, 22, 28, 1, 10, 1, 36, 1, 25, 16, 8, 14, 1, 9, 1, 37, 41, 35, 4, 13, 44, 39, 12, 46, 44, 26, 31, 1, 1, 1, 18, 44, 32, 33, 1, 20, 15, 7, 11, 0, 6, 24, 21, 29, 30, 38, 44, 5, 40, 23, 34, 1, 2, 19, 3, 1, 43, 42, 44, 45, 17, 1], [3, 0, 1, 2]]
        };
        _yrxR7k = '_yrxdD_';
        _yrxJ_8 = [203, 103, 203, 618];
        _yrxmEu = aiding_5702(_yrxays, _yrxVMl, _yrxR7k, _yrxJ_8);
        _yrxTY4 = _yrxmEu
        // _yrxrqQ = _yrxrqQ['concat'](_yrxcze, _yrxBXT(775, _yrx7jl) ? 1 : 0, _yrxyqC || 0, _yrxBXT(789))
        // _yrxBXT(775, _yrx7jl) 并不影响什么
        // _yrxyqC 值是 undefined
        _yrxrqQ = _yrxrqQ['concat'](_yrxcze, 0, 0, _yrxBXT(789))
        // _yrxK$4 检测了document["characterSet"]
        // _yrx2LR = _yrxK$4 + _yrxmEu + _yrxwbi(_yrxrqQ)
        _yrx2LR = '' + _yrxmEu + _yrxwbi(_yrxrqQ)
        _yrxs7K = 'm';
        return _yrx2LR
    }
    if(_yrx4Aj === 746){
        var _yrxrqQ = _yrxlo_(_yrx1_p());
        var _yrx$Kn = _yrxBXT(708, _yrxrqQ)
        var _yrxmEu = _yrx$Kn[1]
        return
    }
    if(_yrx4Aj === 708){
        _yrxY1C = function() {
            return '23fnaorei32nfahiof2nfiahra2fniawni2Nhifdqnari2FWN2N'
        };
        var _yrxrqQ = _yrxY1C;
        var _yrx$Kn = ''
        // var _yrxmEu = _yrxu8d(_yrxMKL(_yrxQXy))
        // _yrxQXy 为字符串 "T"
        // _yrxMKL(_yrxQXy)  返回字符串 "SE00aFVCVDBkRE9uMTYyVD0="
        // _yrxu8d(...)  匹配 cookie 中是否包含 "SE00aFVCVDBkRE9uMTYyVD0=" 字段
        // 可能是检测环境有问题 cookie 中才会包含这个字段
        var _yrxmEu = undefined;
        // _yrxmEu = '学爬虫就选_yrx';
        return [_yrxrqQ, '', '', '']
    }
    if(_yrx4Aj === 775){
        // 这个指令并没有什么卵用
        _yrx$Kn = _yrxQXc["createElement"]("a");
        _yrx$Kn["href"] = _yrxCcG["href"];
        _yrxmEu = _yrxQXc["createElement"]("a");
        _yrxmEu["href"] = _yrx7jl;
        _yrxmEu["href"] = _yrxmEu['href'];
        _yrxrqQ = _yrx$Kn["protocol"] + "//" + _yrx$Kn["host"] !== _yrxmEu['protocol'] + "//" + _yrxmEu['host']
        return _yrxrqQ
    }
    if(_yrx4Aj === 789){
        var _yrxrqQ = _yrxlo_(_yrx1_p())
        return _yrxWKg(_yrxrqQ)["slice"](0, 8)
    }
}

坑点

eval 函数内的代码

_yrxVhD() 方法

方法中对应的时间戳是动态变化的,包括后面的全局变量 _yrxCxm 的值也是动态变化的
在这里插入图片描述

function _yrxVhD(_yrxtJ1) {
    return 拿到动态的变化的时间戳 + 拿到动态的值
}

_yrxM3E() 方法

方法中 var yrxC2 = 195 + _yrxCxm[‘f’ + ‘g’ + ‘a’ + ‘E’];
+左边的数值是动态变化的
_yrxCxm[‘f’ + ‘g’ + ‘a’ + ‘E’] 的值和 _yrxVhD() 方法中的值一致
在这里插入图片描述

function _yrxM3E(_yrxvAM) {
    var _yrxC2_ = 要匹配的动态的数值 + _yrxCxm['f' + 'g' + 'a' + 'E'];
    // ......
}

_yrxa$o() 方法

与 _yrxM3E() 方法一致, + 左边的数值是动态变化的
_yrxCxm[‘f’ + ‘g’ + ‘a’ + ‘E’] 的值和 _yrxVhD() 方法中的值一致
在这里插入图片描述

function _yrxa$o(_yrxtJ1) {
     var _yrxmbl = 要匹配的动态的数值 + _yrxCxm['f' + 'g' + 'a' + 'E'];
     // ......
 }

_yrxCxm[‘E’ + ‘c’ + ‘A’ + ‘b’]

这个变量对应初始的值在请求主页的时候能查看到,具体的匹配规则为

初始值

yuanrenxue_59 = re.findall('var yuanrenxue_59=(\d+);', response.text)[0]

在这里插入图片描述

变化规律

每次请求完数据接口后回返回一个 k 字段,后续会随着这个 k 字段中的数值改变在这里插入图片描述

获取 eval() 函数内的代码

js 模板代码

window = global;
setInterval = function(){};  // 代码不会阻塞
var text;
_log = console.log;  // console.log 被置空了

eval = function(val){
    text = val;
    return undefined
};
// toString 格式化检测
eval.toString = function (){return 'function eval() { [native code] }'};

// rs.js 代码(rs.js代码不是动态的,我是直接copy进模板文件的,代码太长所以并没有复制进来)
// 如果调用的时候总报错,就是 rs.js 代码的问题,还是比较建议直接复制进来的

// rsnkw2ksph

// 主页自执行

function sdk(){
    return text
}
_log(sdk())

对应 python 代码

def send_index():
    # 主页
    url = "https://match.yuanrenxue.cn/match/10"
    response = requests.get(url, headers=headers, cookies=cookies)
    # 主页自执行函数匹配
    execution_func = re.findall('<script type="text/javascript"r="m">(.*?)</script>', response.text)[0]

    # rsnkw2ksph 文件(动态的必须请求拿到)
    url = "https://match.yuanrenxue.cn/stati/mu/rsnkw2ksph"
    rsnkw2ksph = requests.get(url, headers=headers, cookies=cookies).content.decode()


    with open('js模板代码路径', mode='r', encoding='utf-8')as f:
        js_code = f.read()
    # 替换
    js_code = js_code.replace('// rsnkw2ksph', rsnkw2ksph + ';')
    js_code = js_code.replace('// 主页自执行', execution_func + ';')
	
	# 新建文件
    with open('new_file.js', mode='w', encoding='utf-8')as f:
        f.write(js_code)
    # 获取 主页 中的值
    meta = re.findall('<meta content="(.*?)"', response.text)[0]  # 主页 meta 标签的值
    yuanrenxue_59 = re.findall('var yuanrenxue_59=(\d+);', response.text)[0]  # _yrxCxm['E' + 'c' + 'A' + 'b'] 变量首次的值
    
    # 获取 eval 中的值
    output = subprocess.check_output("node new_file.js")
    time_strap = re.findall("function _yrxVhD\(.*?\)\{return (\d+) \+", output)[0]  # 匹配 _yrxVhD() 函数需要用到的时间戳 
    _yrxao = re.findall("function _yrxa\$o\(_yrxtJ1\)\{var _yrxmbl=(\d+) \+", output)[0]  # _yrxa$o 函数中需要用到的数值
    _yrxM3E = re.findall("function _yrxM3E\(_yrxvAM\)\{var _yrxC2_=(\d+) +", output)[0]  # _yrxM3E 函数中需要用到的数值
    os.remove('new_file.js')  # 删除对应的文件
    return meta, yuanrenxue_59, time_strap, _yrxao, _yrxM3E

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

命令执行漏洞-rce

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 1.1 命令执行漏…

47.x86游戏实战-VEHHOOK封包函数

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

Aiseesoft Mac Video Converter Ultimate:高效多能的视频转换与编辑工具

Aiseesoft Mac Video Converter Ultimate是一款视频转换与编辑软件&#xff0c;以其强大的功能和简单易用的操作界面赢得了广泛好评。该软件不仅支持多种视频格式的转换&#xff0c;还集成了丰富的视频编辑功能&#xff0c;满足了用户多样化的视频处理需求。 核心功能概述 视频…

mysqlcheck

mysql bin中的其他工具包 对于mysql的其他工具, 有很多选项是公共的, 例如你在对数据库进行检查的时候, 需要指定host和user以及其password来连接上mysqlserver来进行相关操作, 这个时候其实用到的host等东西跟我们之前的mysql-client其实是类似的 也就是说他们是作为mysql众…

顺序表的顺序表示—动态分配

顺序表的顺序表示—动态分配 代码实现 #include <stdio.h> #include <stdlib.h> #define InitSize 15 // 初始化扩容长度typedef struct{int *data; // 动态分配数组的指针int MaxSize;int length; // 当前长度 }SeqList;void InitList(SeqList &L){// 申请一…

C++不同数据类型连接成一个字符串

在C中数据连接的方式使用号进行连接。 1.都是字符型时直接使用连接几个字符串&#xff1b; 2.不是字符类型时&#xff0c;要用to_string函数转换后再连接。

做空股指期货一手多少钱?

股指期货的保证金比例是12%-15%不等&#xff0c;所以做空一手股指期货的保证金最少是要十几万元&#xff0c;部分平台两万。关于做空一手股指期货的具体金额&#xff0c;这并非固定不变&#xff0c;而是会根据市场的实时价格、合约的乘数以及交易所的规定等因素而有所变动。 股…

Verilog刷题笔记59

题目: Exams/m2014 q6c 解题&#xff1a; module top_module (input [6:1] y,input w,output Y2,output Y4);assign Y2y[1]&w0;assign Y4(y[2]&w1)|(y[3]&w1)|(y[5]&w1)|(y[6]&w1);endmodule结果正确: 注意点: 起初&#xff0c;我的代码有错误,代码如下…

快速判断一个项目是Spring MVC框架还是Spring Boot框架

1. 查看项目的启动类 Spring Boot: 通常有一个主类&#xff0c;包含 SpringBootApplication 注解&#xff0c;并且有一个 main 方法来启动应用程序。 SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(Appli…

探索数据结构:图(三)之最短路径算法

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 最短路径算法 最短路径问题可分为单源最短路径和多源最短路径。其指…

如何使用ssm实现珠宝首饰交易平台开发

TOC ssm101珠宝首饰交易平台开发jsp 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于珠宝首饰交易平台所牵扯的管理及数据保存都是非常多的&#xff0c;例如管理员&#xff1b;主页、个人中心、用户管理、商品分类管理、商品信息管…

【Material-UI】Radio Group中的 Label Placement 属性详解

文章目录 一、Radio Group 组件概述1. 组件介绍2. Label Placement 属性的作用 二、Label Placement 属性的基本用法三、Label Placement 属性详解1. 标签位置的选择2. 如何在实际项目中选择标签位置 四、Label Placement 属性的实际应用场景1. 表单布局中的应用2. 符合用户习惯…

多进程多线程及之间通信机制

目录 前言 一、多进程与多线程 1. 多进程 多进程的特点 多进程的应用场景 2. 多线程 多线程的特点 多线程的应用场景 3. 多进程与多线程的对比 二、进程与线程之间的通信机制 1. 进程间通信&#xff08;IPC, Inter-Process Communication&#xff09; 2. 线程间通信…

Golang | Leetcode Golang题解之第365题水壶问题

题目&#xff1a; 题解&#xff1a; type pair struct {x, y int }func canMeasureWater(jug1Capacity int, jug2Capacity int, targetCapacity int) bool {//剪枝if jug1Capacityjug2Capacity < targetCapacity {return false}var (dfs func(x, y int) bool // jug1有x水…

NC包含min函数的栈

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 定义栈的数据…

基于STM32开发的智能水箱液位控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化液位监测与控制水泵控制与状态显示Wi-Fi通信与远程监控应用场景 家庭用水系统的液位控制工业水箱的液位管理常见问题及解决方案 常见问题解决方案结论 1. 引言 智能水箱液位控制系…

线程池详解(建议收藏)

概念 线程池&#xff08;Thread Pool&#xff09;是一种基于池化技术的多线程处理形式&#xff0c;用于管理线程的创建和生命周期&#xff0c;以及提供一个用于并行执行任务的线程队列。线程池的主要目的是减少在创建和销毁线程时所花费的开销和资源&#xff0c;提高程序性能&…

C# messagePack对类(class)序列化简单示例

c# messagepack对类&#xff08;class&#xff09;序列化的简单示例 0 引言1 示例2 纠错3 结语 0 引言 MessagePack是一种高效的二进制序列化格式&#xff0c;它可以在C#中用于序列化和反序列化对象。与其他序列化格式相比&#xff0c;如JSON和XML&#xff0c;MessagePack的编…

西安电子高速PCB学习(五)

感抗&#xff08;Inductive Reactance&#xff09;和容抗&#xff08;Capacitive Reactance&#xff09;是电感和电容在交流电路中对电流产生阻碍的特性。这两个概念源于交流电路中&#xff0c;电感和电容对交流电流的相应反应。 感抗&#xff08;Inductive Reactance&#xf…

如何使用ssm实现电脑配件销售系统的设计与实现

TOC ssm128电脑配件销售系统的设计与实现jsp 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于电脑配件销售系统所牵扯的管理及数据保存都是非常多的&#xff0c;例如管理员&#xff1b;主页、个人中心、用户管理、商品分类管理、商…