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

调试干扰

第一个 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
  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于您提到的错误TypeError: list indices must be integers or slices, not str,这是因为您在访问列表中的元素时使用了字符串作为索引,而列表的索引必须是整数或切片类型。解决这个错误的方法是使用整数或切片来访问列表中的元素。 关于您提到的猿人js逆向的问,我需要更多的信息才能为您提供具体的答案。对于爬虫编写,您可以使用Python的各种库(如Requests、BeautifulSoup、Scrapy等)来获取网页的内容,并进一步解析和处理。您可以使用这些库发送HTTP请求获取网页内容,然后使用解析库来提取您需要的数据。 爬虫编写的一般步骤如下: 1. 导入所需的库 2. 发送HTTP请求获取网页内容 3. 使用解析库解析网页内容 4. 提取所需的数据 5. 进行数据的进一步处理和存储 您可以根据具体的需求和网站的结构进行相应的编写和调试。如果您需要更具体的帮助,请提供更多的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python:TypeError: list indices must be integers or slices, not str报错解决及原理](https://blog.csdn.net/hhd1988/article/details/128031602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str](https://download.csdn.net/download/weixin_38590567/14871394)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值