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

文章目录

  • 调试干扰
    • 第一个 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.mzph.cn/bicheng/52530.shtml

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

相关文章

半枚玄月照见人间空荡荡

半枚玄月照见人间空荡荡 昨夜玄月昨夜风&#xff0c;轻吹往事落心中。 众里寻他为何事&#xff1f;鸡鸣月落一场空。玄月 沙发上刷短视频笑得不经意抬头&#xff0c;忽而瞥见窗口防盗网挂着半枚月亮&#xff0c;玄黄色的&#xff0c;温润而冷冽&#xff0c;引人注目。 手机里…

国货之光|暴雨机推出面向大模型训练的AI服务器

当前&#xff0c;“百模大战”带来了算力需求的爆发&#xff0c;尤其是以ChatGPT为代表的多模态AI大模型&#xff0c;‌其参数规模和训练数据量均达到了前所未有的规模。‌GPT-3.5、‌GPT-4等模型的参数规模突破了万亿级别&#xff0c;‌训练数据量达到了TB级别&#xff0c;‌这…

zdppy+vue3+onlyoffice文档管理系统实战 20240823上课笔记 zdppy_cache框架的低代码实现

遗留问题 1、封装API2、有账号密码3、查询所有有效的具体数据&#xff0c;也就是缓存的所有字段 封装查询所有有效具体数据的方法 基本封装 def get_all(self, is_activeTrue, limit100000):"""遍历数据库中所有的key&#xff0c;默认查询所有没过期的:para…

51单片机——LED灯控制

1、LED介绍 中文名&#xff1a;发光二极管 外文名&#xff1a;Light Emitting Diode 简称&#xff1a;LED 用途&#xff1a;照明、广告灯、指引灯、屏幕 2、LED原理图 电阻在原理图上标注为1k&#xff0c;表示这是1千欧的电阻&#xff0c;实际在电路板上的表示是102 102解…

Godot《躲避小兵》实战之创建游戏主场景

游戏主场景 现在是时候将我们所做的一切整合到一个可玩的游戏场景中了。 创建新场景并添加一个 Node节点&#xff0c;命名为 Main。&#xff08;我们之所以使用 Node 而不是 Node2D&#xff0c;是因为这个节点会作为处理游戏逻辑的容器使用。本身是不需要 2D 功能的。&#x…

C\C++ Sqlite3使用详解

C\C++ Sqlite3使用详解 一、源码下载二、sqlite3接口说明C++2.1 项目创建以及sqlite3使用2.1 连接数据库2.2 sqlite创建表2.2.1 示例代码2.2.2 注意事项2.3 sqlite插入数据2.3.1 示例代码2.3.2 注意事项2.4 sqlite数据删除2.5 sqlite数据查询一、源码下载 下载地址: https://…

oneapi 获取通义千问模型密钥

1、打开 阿里云百炼大模型平台&#xff0c;点击开通&#xff0c;登录账号 2、获取密钥 3、查看模型名称&#xff0c;可以添加到 oneapi 的渠道中 别忘了添加向量模型

python库(21):

1 TextBlob简介 TextBlob 是一个基于 Python 的文本处理库&#xff0c;能够让基础的自然语言处理任务变得异常简单。 它提供了一个简单直观的 API&#xff0c;让你能够轻松执行词性标注、名词短语提取、情感分析、文本分类和关键词提取等功能。 值得一提的是&#xff0c;Tex…

[Linux]如何在虚拟机安装Ubuntu?(小白向)

一、我们为什么要在虚拟机中安装Ubuntu? 在虚拟机中安装系统主要是为了让一个系统与我们原本的系统隔离&#xff0c;不管是想运行一些不安全的软件&#xff0c;或者是想运行一些独特的操作系统&#xff0c;我们都可以选择使用虚拟机来安装和隔离这些操作系统。如果你是一位Lin…

跨越语言障碍:2024四款实用在线翻译工具评测!

随着技术的不断进步&#xff0c;各种在线翻译工具层出不穷&#xff0c;帮助我们轻松跨越语言的鸿沟。今天&#xff0c;让我们一起探索几款非常实用的在线翻译工具&#xff01; 福昕在线翻译 直达链接&#xff1a; https://fanyi.pdf365.cn/ 福昕在线翻译是一款专注于文档翻…

【C++】函数模板特化:深度解析与应用场景

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

dubbo:dubbo+nacos整合springcloud gateway实现网关(三)

文章目录 0. 引言1. 集成gateway网关1.1 实操步骤1.2 dubbo提供者注册到nacos出现两个实例的问题 2. 源码3. 总结 0. 引言 上次我们讲到使用zookeeper作为注册中心搭建dubbo微服务框架&#xff0c;但是我们还缺少一个服务总入口&#xff0c;也就是我们的网关服务。所以今天我们…

DataWhale AI夏令营-《李宏毅深度学习教程》笔记

DataWhale AI夏令营-《李宏毅深度学习教程》笔记 第三章 深度学习基础补充一些基础临界点及其种类逃离临界点方法批量动量自适应学习率学习率调度 之前一直接触的LLM大模型做一些应用&#xff0c;或者传统的自然语言处理&#xff0c;都是直接拿别人的模型用&#xff0c;要不就是…

k8s 部署Ruoyi-Vue-Plus之vue打包镜像

在这里插入图片描述 在这篇文章中&#xff0c;解释如何通过容器化&#xff08;Docker&#xff09;来打包和部署前端项目&#xff0c;替代之前手动维护版本的方式 1.nginx配置 在 ruoyi-ui 项目的根目录下创建一个 nginx.conf 文件, 我没有使用monitor-admin和xxljob-admin模块…

语言基础/单向链表的构建和使用(含Linux中SLIST的解析和使用)

文章目录 概述简单的链表描述链表的术语简单实现一个单链表 Linux之SLIST机理分析结构定义单链表初始化单链表插入元素单链表遍历元素单链表删除元素 Linux之SLIST使用实践纯C中typedef重命名带来的问题预留 概述 本文讲述了数据结构中单链表的基本概念&#xff0c;头指针、头…

CPP中lamada表达式作用一览[more cpp-6]

一般语法 CPP中的lambda 表达式的本质就是匿名函数&#xff0c;它可以在代码中定义一个临时的、局部的函数.为什么需要lamada表达式&#xff1f; 因为命名是个大问题 想名字以及避免命名冲突是很劳神费力的事&#xff0c;这就是lamada表达式的优点(lamada优点表现为简洁性)总…

如何在不格式化的情况下解锁 Android 智能手机密码

如果您忘记密码&#xff0c;您的 Android 移动设备将锁定您。发生这种情况时&#xff0c;通常可以通过恢复出厂设置来重新获得对设备的访问权限。可悲的是&#xff0c;这将导致所有数据丢失。下面列出的是解锁锁定的Android 手机而不会丢失任何个人数据的有效方法。 Android 手…

Ps:首选项 - 界面

Ps菜单&#xff1a;编辑/首选项 Edit/Preferences 快捷键&#xff1a;Ctrl K Photoshop 首选项中的“界面” Interface选项卡可以定制 Photoshop 的界面外观和行为&#xff0c;从而创建一个最适合自己工作习惯和需求的工作环境。这些设置有助于提高工作效率&#xff0c;减轻眼…

单片机外部中断+定时器实现红外遥控NEC协议解码

单片机外部中断定时器实现红外遥控NEC协议解码 概述解码过程参考代码 概述 红外(Infrared&#xff0c;IR)遥控&#xff0c;是一种通过调制红外光实现的无线遥控器&#xff0c;常用于家电设备&#xff1a;电视机、机顶盒等等。NEC协议采用PPM(Pulse Position Modulation&#x…

Vue的计算属性:methods方法、computed计算属性、watch监听属性

1、methods 方法 在创建的 Vue 应用程序实例中&#xff0c;可以通过 methods 选项定义方法。应用程序实例本身会代理 methods 选项中的所有方法&#xff0c;因此可以像访问 data 数据那样来调用方法。 【实例】在 Vue 应用程序中&#xff0c;使用 methods 选项定义获取用户信…