🌈据说,看我文章时 关注、点赞、收藏 的 帅哥美女们 心情都会不自觉的好起来。
前言:
🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
👍专栏介绍:猿人学WEB题目专解 ,提供猿人学WEB题目总计20题的解题思路与方法,如有讲述错误,请不吝赐教。
想看往期历史文章,可以浏览此博文: 历史文章目录
,后续所有文章发布都会同步更新此博文~
猿人学第18题
- 题目网址
- 题目详情
- 题目思路
- 解题源码
题目网址
猿人学第18题
题目详情
让我们计算 加和。
题目思路
我们像往常一样找入口函数,在这题面前却显得不一样:
这题用了原始的 XMLHttpRequest
请求方式,没用 ajax
请求方式,但是我们却看不到哪里有加密的东西,我们只看到了 location.href + 'data?page=' + page
,我们再观察一下前三页的请求,发现只有第一页没有其他两个参数:
那么还有两个参数哪里来的呢?
我们新建一个 XHR
断点:
鼠标不经意间滑动到 xml.open
方法上:
很明显这个函数被动过手脚了,不再是原来的函数了,我们继续往下。
重新打断点,打在 open
上:
发现跳转到了这个鬼都看不懂的代码堆里:
放上这段令人头皮发麻的代码段:(不想看?我经历的痛苦你也要跟着经历😏😏😏)
!function(_, __) {
var ___ = "undefined" == typeof global ? window : global
, v__ = [[___, null, null, this, arguments]]
, V__ = String.fromCharCode
, y__ = decodeURIComponent
, u__ = ReferenceError
, U__ = Object.keys
, _v_ = parseFloat
, _V_ = parseInt
, _y_ = Math.pow
, _u_ = RegExp
, _U_ = ___.BigInt
, __v = 1
, __V = []
, __y = []
, __u = Vu_(48, 58) + Vu_(97, 123)
, __U = Vu_(65, 91)
, v_ = "[" + __U + "]*[" + __u + "]"
, V_ = __u + __U
, y_ = /[0-9a-f]{2}/g
, u_ = "%$&"
, U_ = "$"
, _v = " is not defined"
, _V = "null"
, _y = "number"
, _u = "object"
, _U = "0"
, vv_ = "g"
, vV_ = ""
, vy_ = "arguments";
function vu_(_, __) {
return _.push(__)
}
function vU_(_) {
return _.pop()
}
function v_v(_) {
return _.length
}
function v_V(_, __) {
return _.indexOf(__)
}
function v_y(_, __) {
return _.lastIndexOf(__)
}
function v_u(_, __) {
return _.toString(__)
}
function v_U(_) {
return y__(_.replace(y_, u_))
}
function Vv_(_, __) {
return _.hasOwnProperty(__)
}
function VV_(_) {
return _V_(_, 16)
}
function Vy_(_, __) {
if (3 == __ || 6 == __ || 28 == __ || 15 == __ || 11 == __ || 13 == __ || 30 == __ || 41 == __) {
(u__ = {})._ = __;
var ___ = function(_, __) {
var ___, v__ = V_V(__), y__ = v__[0], u__ = v__[1], U__ = __V[y__];
function _y_(_, __) {
return V_y(v_U(_))[0] ^ 127 & __
}
function __v(_, __) {
return V_u(V_y(v_U(_)), 127 & __)
}
if (3 == _ && (___ = _y_(U__, y__)),
6 == _ && (___ = v_U(U__)),
28 == _ && (___ = null),
15 == _ && (___ = v_U(U__)),
11 == _ && (___ = _v_(__v(U__, y__))),
13 == _ && (___ = !!_V_(V__(_y_(U__, y__)))),
30 == _ && (___ = _U_(__v(U__, y__))),
41 == _) {
var __y = __v(U__, y__)
, __u = __y.slice(0, v_y(__y, U_))
, __U = __y.slice(v_y(__y, U_) + 1);
___ = _u_(__u, __U)
}
return [___, y__, u__]
}(__, _.slice(__v, 10));
return u__[__] = ___[0],
[function(_, __, ___) {
var v__ = v_V(__y, _[__]);
return -1 == v__ ? (vu_(__y, _[__]),
_[__] = v_v(__y) - 1) : _[__] = v__,
_.__ = ___,
_
}(u__, __, ___[1]), ___[2]]
}
for (var v__ = V_U(_, __v)[0], y__ = [], u__ = {}; v_v(v__); ) {
var U__ = VU_(v__.slice(0, __v));
if (3 != U__ && 6 != U__ && 28 != U__ && 15 != U__ && 11 != U__ && 13 != U__ && 30 != U__ && 41 != U__) {
var _y_ = V_U(v__, __v, 1);
vu_(y__, V_v(v__)),
v__ = v__.slice(_y_[1])
} else {
var __u = V_v(v__);
vu_(y__, __u[0]),
v__ = v__.slice(__v + __u[1])
}
}
return u__[__] = y__,
u__._ = __,
u__
}
function Vu_(_, __) {
for (var ___ = "", v__ = _; v__ < __; v__++)
___ += V__(v__);
return ___
}
function VU_(_) {
return v_V(V_, _)
}
function V_v(_) {
var __ = VU_(_.slice(0, __v));
return Vy_(_, __)
}
function V_V(_) {
var __ = 0
, ___ = _.match(v_)[0]
, v__ = ___.slice(0, -1)
, V__ = ___[v_v(___) - 1];
__ += v_V(__u, V__);
for (var y__ = 0, u__ = v_v(v__) - 1; u__ >= 0; u__--)
__ += v_V(__U, v__[u__]) * _y_(v_v(__U), y__) * v_v(__u),
y__ += 1;
return [__, v_v(___)]
}
function V_y(_) {
for (var __, ___ = [], v__ = 0; v__ < v_v(_); v__++)
___[v__] = (__ = v__,
_.charCodeAt(__));
return ___
}
function V_u(_, __) {
for (var ___ = [], v__ = 0; v__ < v_v(_); v__++)
___[v__] = V__(_[v__] ^ __);
return ___.join(vV_)
}
function V_U(_, __, ___) {
var v__ = V_V(__ ? _.slice(__) : _);
return [___ ? null : _.slice(__ + v__[1], __ + v__[0] + v__[1]), __ + v__[0] + v__[1]]
}
!function(_) {
function __(_, __) {
var ___ = __y[_[__]];
return !___ || 15 != __ && 6 != __ ? ___ : V_u(V_y(___), 127 & _.__)
}
function ___(_) {
return _[v_v(_) - 1]
}
function V__(_, __) {
return _[v_v(_) - 1] = __
}
function y__(_) {
if (Array.isArray(_)) {
for (var __ = 0, ___ = Array(v_v(_)); __ < v_v(_); __++)
___[__] = _[__];
return ___
}
return Array.from(_)
}
function _v_(_, __, v__) {
if (__ == _V)
return null;
if (__ == vy_)
return ___(_)[4];
for (var V__ = v_v(_) - 1; V__ >= 0; V__--) {
if (Vv_(_[V__][0], __))
return _[V__][0][__];
if (0 == V__ && _[V__][0][__])
return _[V__][0][__]
}
if (!v__)
throw u__(__ + _v)
}
function _V_(_, __, ___) {
for (var v__ = v_v(_) - 1; v__ >= 0; v__--)
if (-1 != v_V(U__(_[v__][0]), __))
return _[v__][0][__] = ___;
return _[0][0][__] = ___
}
function _u_(_) {
return ___(_)
}
function _U_(_, ___, v__, V__, y__) {
var u__;
if (Vv_(v__, 32)) {
var U__ = __V(_, (_u_ = v__[32])[0]);
if (29 == __V(_, _u_[2]))
var _u_ = __(_u_[1], 15) || __(_u_[1], 11) || __V(_, _u_[1]);
else
_u_ = __(_u_[1], 15) || __(_u_[1], 11) || __(_u_[1], 6);
u__ = !0
} else
v__ = __(v__, 6);
return y__ && (V__ = __V(_, V__)),
15 == ___ ? u__ ? U__[_u_] = V__ : _V_(_, v__, V__) : 11 == ___ ? u__ ? U__[_u_] += V__ : _V_(_, v__, _v_(_, v__) + V__) : 30 == ___ ? u__ ? U__[_u_] -= V__ : _V_(_, v__, _v_(_, v__) - V__) : 28 == ___ ? u__ ? U__[_u_] *= V__ : _V_(_, v__, _v_(_, v__) * V__) : 41 == ___ ? u__ ? U__[_u_] /= V__ : _V_(_, v__, _v_(_, v__) / V__) : 13 == ___ ? u__ ? U__[_u_] %= V__ : _V_(_, v__, _v_(_, v__) % V__) : 22 == ___ ? u__ ? U__[_u_] <<= V__ : _V_(_, v__, _v_(_, v__) << V__) : 3 == ___ ? u__ ? U__[_u_] >>= V__ : _V_(_, v__, _v_(_, v__) >> V__) : 48 == ___ ? u__ ? U__[_u_] >>>= V__ : _V_(_, v__, _v_(_, v__) >>> V__) : 43 == ___ ? u__ ? U__[_u_] &= V__ : _V_(_, v__, _v_(_, v__) & V__) : 36 == ___ ? u__ ? U__[_u_] |= V__ : _V_(_, v__, _v_(_, v__) | V__) : 7 == ___ ? u__ ? U__[_u_] ^= V__ : _V_(_, v__, _v_(_, v__) ^ V__) : 6 == ___ ? u__ ? U__[_u_] = _y_(U__[_u_], V__) : _V_(_, v__, _y_(_v_(_, v__), V__)) : void 0
}
function __v(_, ___, v__) {
if (v__)
var V__ = __(___, 15) || __(___, 11) || __V(_, ___);
else
V__ = __(___, 15) || __(___, 11) || __(___, 6);
return V__
}
function __V(_, v__, u__, __y, __u) {
var __U = v__._;
if (3 == __U || 15 == __U || 11 == __U || 13 == __U || 28 == __U || 30 == __U || 41 == __U)
return __(v__, __U);
if (6 == __U)
return _v_(_, __(v__, __U));
var v_, V_, y_, u_ = v__[__U];
if (43 == __U)
u_.map(function(__) {
__V(_, __)
});
else {
if (22 == __U)
return u_.map(function(__) {
return v_u(__V(_, __))
}).join(vV_);
if (35 == __U)
return __V(_, u_[0]);
if (36 == __U)
if (Vv_(u_[0], 29))
_v = __V(_, u_[1]),
u_[0][29].map(function(___, v__) {
_u_(_)[0][__(___, 6)] = _v[v__]
});
else {
var U_ = __(u_[0], 6)
, _v = __V(_, u_[1]);
Vv_(u_[1], 3) && 49 == __(u_[1], 3) ? _u_(_)[0][U_] = _u_(_)[0][U_] : _u_(_)[0][U_] = _v
}
else if (7 == __U) {
var _U = u__;
u_.map(function(__) {
__V(_, __, _U)
})
} else {
if (33 == __U) {
var vv_ = __(u_[0], 3)
, vy_ = u_[1];
if (Vv_(vy_, 29)) {
var v_V = __V(_, u_[2]);
return vy_[29].map(function(__, ___) {
return _U_(_, vv_, __, v_V[___])
})
}
return _U_(_, vv_, vy_, u_[2], 1)
}
if (45 == __U)
return __V(_, u_[0]);
if (8 == __U)
return u_.map(function(__) {
return __V(_, __)
});
if (27 == __U) {
vv_ = __(u_[0], 3);
var v_y = __V(_, u_[1])
, v_U = __V(_, u_[2]);
return V_ = v_y,
y_ = v_U,
33 == (v_ = vv_) ? V_ instanceof y_ : 23 == v_ ? V_ in y_ : 19 == v_ ? V_ + y_ : 46 == v_ ? V_ - y_ : 14 == v_ ? V_ / y_ : 31 == v_ ? V_ * y_ : 32 == v_ ? _y_(V_, y_) : 27 == v_ ? V_ % y_ : 25 == v_ ? V_ < y_ : 2 == v_ ? V_ <= y_ : 16 == v_ ? V_ > y_ : 42 == v_ ? V_ >= y_ : 40 == v_ ? V_ & y_ : 39 == v_ ? V_ != y_ : 21 == v_ ? V_ !== y_ : 47 == v_ ? V_ | y_ : 50 == v_ ? V_ ^ y_ : 26 == v_ ? V_ == y_ : 37 == v_ ? V_ === y_ : 8 == v_ ? V_ << y_ : 18 == v_ ? V_ >> y_ : 1 == v_ ? V_ >>> y_ : void 0
}
if (46 == __U) {
_U = u__;
for (var VV_ = u_.filter(function(___) {
return ___[19] ? __V(_, ___) && null : !___[43] || (___[43].map(function(___) {
var v__ = __(v__ = ___[36][0], 6);
Vv_(_u_(_)[0], v__) || (_u_(_)[0][v__] = void 0)
}),
!0)
}), Vy_ = 0; Vy_ < v_v(VV_); Vy_++) {
if (___(_U[35])) {
V__(_U[35], 0);
break
}
if (Vu_ = __V(_, VV_[Vy_], _U),
___(_U[9]))
break;
if (_U[0])
return Vu_
}
} else {
if (14 == __U)
return (_U = u__) && (_U[0] = 1),
___(Vu_ = u_.map(function(__) {
return __V(_, __)
}));
if (4 == __U)
(_U = u__) && V__(_U[9], 1);
else if (24 == __U)
(_U = u__) && V__(_U[35], 1);
else {
if (18 == __U) {
var Vu_ = {};
return u_.map(function(__) {
var ___ = __V(_, __)
, v__ = ___[0]
, V__ = ___[1];
Vu_[v__] = V__
}),
Vu_
}
if (1 == __U)
return [U_ = __v(_, u_[0], 0), _v = __V(_, u_[1])];
if (23 == __U)
return ___(Vu_ = u_.map(function(__) {
return __V(_, __)
}));
if (31 == __U) {
_U = u__;
var VU_ = __V(_, u_[0]);
if (Vu_ = __V(_, VU_ ? u_[1] : u_[2], _U),
_U[0])
return Vu_
} else if (25 == __U) {
for (vu_((_U = u__)[9], 0),
vu_(_U[35], 0),
__V(_, u_[0]); __V(_, u_[1]); __V(_, u_[2]))
if (___(_U[35]))
V__(_U[35], 0);
else {
if (Vu_ = __V(_, u_[3], _U),
___(_U[9]))
break;
if (_U[0])
return Vu_
}
vU_(_U[9]),
vU_(_U[35])
} else if (17 == __U || 9 == __U) {
vu_((_U = u__)[9], 0),
vu_(_U[35], 0);
var V_v = !0;
function V_V(_, ___, v__, V__, y__) {
___[v__].map(function(___) {
Vv_(___, v__) ? V_V(_, ___, v__, V__, y__) : Vv_(___, 6) && (V_v ? (V_v = !1,
y__ ? _u_(_)[0][__(___, 6)] = V__ : _V_(_, __(___, 6), V__)) : y__ ? _u_(_)[0][__(___, 6)] = void 0 : _V_(_, __(___, 6), void 0))
})
}
function V_y(_, ___, v__, V__) {
___[v__].map(function(___) {
var v__ = ___[36][0];
Vv_(v__, 6) ? _u_(_)[0][__(v__, 6)] = V__ : Vv_(v__, 29) && V_V(_, v__, 29, V__, 1)
})
}
var V_u = __V(_, u_[1]);
for (var _v in V_u)
if (9 == __U && (_v = V_u[_v]),
___(_U[35]))
V__(_U[35], 0);
else {
if (Vv_(u_[0], 6) ? _V_(_, __(u_[0], 6), _v) : Vv_(u_[0], 29) ? (V_V(_, u_[0], 29, _v),
V_v = !0) : Vv_(u_[0], 43) && (V_y(_, u_[0], 43, _v),
V_v = !0),
Vu_ = __V(_, u_[2], _U),
___(_U[9]))
break;
if (_U[0])
return Vu_
}
vU_(_U[9]),
vU_(_U[35])
} else {
if (2 == __U) {
var V_U = __V(_, u_[0])
, yv_ = __V(_, u_[1])
, yV_ = u_[2];
return function(_, ___, v__, V__) {
if (10 == ___) {
if (Vv_(V__, 32)) {
var y__ = __V(_, (u__ = V__[32])[0]);
return u__ = __v(_, u__[1], 29 == __V(_, u__[2])),
29 == v__ ? ++y__[u__] : y__[u__]++
}
return u__ = __V(_, V__),
Vv_(V__, 6) && _V_(_, __(V__, 6), u__ + 1),
29 == v__ ? u__ + 1 : u__
}
var u__;
if (44 == ___)
return Vv_(V__, 32) ? (y__ = __V(_, (u__ = V__[32])[0]),
u__ = __v(_, u__[1], 29 == __V(_, u__[2])),
29 == v__ ? --y__[u__] : y__[u__]--) : (u__ = __V(_, V__),
Vv_(V__, 6) && _V_(_, __(V__, 6), u__ - 1),
29 == v__ ? u__ - 1 : u__)
}(_, V_U, yv_, yV_)
}
if (0 == __U) {
vu_((_U = u__)[9], 0),
vu_(_U[35], 0);
do {
if (___(_U[35]))
V__(_U[35], 0);
else {
if (Vu_ = __V(_, u_[1], _U),
___(_U[9]))
break;
if (_U[0])
return Vu_
}
} while (__V(_, u_[0], _U));
vU_(_U[9]),
vU_(_U[35])
} else if (50 == __U) {
for (vu_((_U = u__)[9], 0),
vu_(_U[35], 0); __V(_, u_[0], _U); )
if (___(_U[35]))
V__(_U[35], 0);
else {
if (Vu_ = __V(_, u_[1], _U),
___(_U[9]))
break;
if (_U[0])
return Vu_
}
vU_(_U[9]),
vU_(_U[35])
} else if (21 == __U) {
_U = u__;
try {
if (Vu_ = __V(_, u_[0], _U),
_U[0])
return Vu_
} catch (__) {
if (Vu_ = __V(_, u_[1], _U, __),
_U[0])
return Vu_
}
} else {
if (5 == __U)
throw __V(_, u_[0]);
if (39 == __U) {
_U = u__;
var yy_ = {};
if (yy_[__(u_[0], 6)] = __y,
vu_(_, [yy_, null]),
Vu_ = __V(_, u_[1], _U),
vU_(_),
_U[0])
return Vu_
} else {
if (16 == __U)
return __V(_, u_[0]) ? __V(_, u_[1]) : __V(_, u_[2]);
if (26 == __U)
return function(_, ___, v__) {
if (19 == ___)
return +__V(_, v__);
if (46 == ___)
return -__V(_, v__);
if (12 == ___)
return !__V(_, v__);
if (45 == ___)
return ~__V(_, v__);
if (4 == ___)
return Vv_(v__, 6) ? typeof _v_(_, __(v__, 6), 1) : typeof __V(_, v__);
if (5 != ___) {
if (38 == ___) {
if (Vv_(v__, 6))
return !Vv_(_u_(_)[0], __(v__, 6)) || delete _u_(_)[0][__(v__, 6)];
if (Vv_(v__, 32)) {
var V__ = __V(_, (y__ = v__[32])[0]);
if (29 == __V(_, y__[2]))
var y__ = __(y__[1], 15) || __(y__[1], 11) || __V(_, y__[1]);
else
y__ = __(y__[1], 15) || __(y__[1], 11) || __(y__[1], 6);
return delete V__[y__]
}
return __V(_, v__),
!0
}
} else
__V(_, v__)
}(_, __V(_, u_[0]), u_[1]);
if (20 == __U)
return function(_, __, ___, v__) {
return 20 == __ ? ___ || __V(_, v__) : 34 == __ ? ___ && __V(_, v__) : void 0
}(_, __V(_, u_[0]), __V(_, u_[1]), u_[2]);
if (19 == __U) {
U_ = __(___(u_), 6),
_v = u_[v_v(u_) - 2];
var yu_ = u_.slice(0, v_v(u_) - 2)
, yU_ = _U__(_, U_, _v, yu_);
_u_(_)[0][U_] = yU_
} else {
if (42 == __U)
return U_ = __(___(u_), 6),
_v = u_[v_v(u_) - 2],
yu_ = u_.slice(0, v_v(u_) - 2),
yU_ = _U__(_, U_, _v, yu_);
if (34 == __U)
return _v = ___(u_),
yu_ = u_.slice(0, v_v(u_) - 1),
yU_ = _U__(_, _V, _v, yu_);
if (37 == __U) {
var y_v = __V(_, ___(u_))
, ____ = u_.slice(0, v_v(u_) - 1).map(function(__) {
return __V(_, __)
});
return new (Function.prototype.bind.apply(y_v, [null].concat(y__(____))))
}
if (38 == __U)
return _u_(_)[3];
if (40 == __U) {
_U = u__,
VU_ = __V(_, u_[0]);
var v___ = u_.slice(1)
, V___ = !1;
for (vu_(_U[9], 0),
vu_(_U[35], 0),
Vy_ = 0; Vy_ < v_v(v___); Vy_++)
if (___(_U[35]))
V__(_U[35], 0);
else {
var y___ = __V(_, v___[Vy_], VU_)
, u___ = y___[0]
, U___ = y___[1];
if (VU_ === u___ && (V___ = !0),
V___ && (Vu_ = __V(_, U___, _U)),
___(_U[9]))
break;
if (_U[0])
return Vu_
}
vU_(_U[9]),
vU_(_U[35])
} else {
if (47 == __U)
return [u___ = Vv_(u_[0], 6) && __(u_[0], 6) == _V ? u__ : __V(_, u_[0]), u_[1]];
if (44 == __U)
debugger ;
else if (49 == __U) {
for (VV_ = u_.filter(function(___) {
return ___[19] ? __V(_, ___) && null : !___[43] || (___[43].map(function(___) {
var v__ = __(v__ = ___[36][0], 6);
_u_(_)[0][v__] = void 0
}),
!0)
}),
_U = {
9: [],
35: [],
0: 0
},
Vy_ = 0; Vy_ < v_v(VV_); Vy_++)
if (Vu_ = __V(_, VV_[Vy_], _U),
_U[0])
return Vu_
} else {
if (32 == __U) {
_v = __v(_, u_[1], 29 == __V(_, u_[2]));
var _v__ = __y || [];
return yU_ = __V(_, u_[0], typeof u__ != _y ? 1 : u__ + 1, _v__, __u),
u__ ? (vu_(_v__, _v),
[yU_, yU_[_v]]) : (_v__.map(function(_) {
return yU_ = yU_[0],
_
}).map(function(_) {
yU_ = yU_[_]
}),
__u && __u[24] ? function() {
for (var _ = v_v(arguments), __ = Array(_), ___ = 0; ___ < _; ___++)
__[___] = arguments[___];
return yU_[_v].apply(yU_, __)
}
: yU_[_v])
}
if (48 == __U) {
var _V__, _y__ = !1, _u__ = (____ = u_.slice(0, -1).map(function(__) {
if (!Vv_(__, 45))
return __V(_, __);
_V__ = __V(_, __),
_y__ = !0
}),
typeof u__ == _u ? u__ : {});
return _u__[24] = 1,
____ = _y__ ? ____.slice(0, v_v(____) - 1).concat(_V__) : ____,
__V(_, ___(u_), 0, 0, _u__).apply(void 0, y__(____))
}
}
}
}
}
}
}
}
}
}
}
function _U__(_, ___, v__, V__) {
return function y__() {
var u__ = [].concat(_, [[{}, V__, v__, this, arguments]]);
___ !== _V && (_u_(u__)[0][___] = y__);
var _v_ = _u_(u__)
, _V_ = (_u_(_),
{
9: [],
35: [],
0: 0
});
return _v_[1].map(function(_, ___) {
if (Vv_(_, 6)) {
var v__ = __(_, 6);
_v_[0][v__] = _v_[4][___]
} else
Vv_(_, [12]) && (v__ = __(__(_[12], 6), 6),
_v_[0][v__] = U__(_v_[4]).map(function(_) {
return _v_[4][_]
}).slice(___))
}),
__V(u__, _v_[2], _V_)
}
}
}
__V(v__, _)
}(V_v(__ = function(_) {
var __, ___, v__, V__ = V_U(_, 0), y__ = V__[0], u__ = V__[1];
for (y__ = function(_) {
var __ = V_V((_ = _.match(_u_(v_, vv_))).slice(0, 1)[0])[0]
, ___ = _.slice(1, -1)
, v__ = [];
___.map(function(_) {
for (var __ = v_u(V_V(_)[0], 16), ___ = 8 - v_v(__), V__ = 0; V__ < ___; V__++)
__ = _U + __;
vu_(v__, __)
});
for (var V__ = v_u(V_V(_.slice(-1)[0])[0], 16), y__ = __ - 8 * v_v(___) - v_v(V__), u__ = 0; u__ < y__; u__++)
V__ = _U + V__;
return vu_(v__, V__),
v__.join(vV_)
}(y__); v_v(y__); ) {
var U__ = (___ = VV_((__ = y__).slice(0, 1)),
v__ = VV_(__.slice(1, 1 + ___)),
[__.slice(1 + ___, 1 + ___ + v__), 1 + ___ + v__])
, _v_ = U__[1];
vu_(__V, U__[0]),
y__ = y__.slice(_v_)
}
return _.slice(u__)
}(__)))
}("jsvmpzl:ver.1.1.3", "GHoHJySLBEAcSKQLRrEFOEISgEEOJSJ4SUMFPgSJXPA3EIQFCNaEANJCKiSPKGT7SVSNThSMHNJ1CHJXNTwSMSGHuBDBIIU5DUJTEI2LHTQJfUOBHLuCFFEVAlDVBLIQnGSTHIuHEMDSHqIGFYACbEXVOXSeEZYISF4DNCPLGsEZZPXL0ETVTSJfBDBFMQqEVXAZOkEQTSDJfDHCPYWfSPCHMdCYUOIT1DITRVNlBLCZBO4EPHKRUtIYPIEJ0HCJENTiGYREREeHFCJDL0GIIPWM6COPSOQ9CWSMSH2DTEGGOpBMNKIHoJRNYCGcGMKNCWcIJTNRT0JANIWPpFVLTIY9CORBMJrDQEZHWnBEWNWU6EWTEXE2SPNCVgDJPQRVoCCPEXI9BGSHYL9BMSKBApDVMAMWcDZAEJN5BLYEUU1HUJVKJhHTJTCRhSGLJAtFFNRFYdJMOQTS4IZBJONdBKZIDMsDFSEFFgDNBRJObDDWYALlHXZWBwJPOMWWeHPMGVG2JNSEBBoGIIUGD7BZDKKPmDVLNIVeCCUYIxCQRPBHfCUURGWvGILZLO1DUMLLSxFEIDSOaBYMVFBmCBFWP6FENCZEaGJSWKMxIYMDRN6GZXXDRlBKZICWbFCQRNZxBYDIGJzCJIWOIwMLUWEgBARJFWnBYCPCEjGXVILYrUEBPM9ENAWDK2DVLGYJvHALROjDWDWZYaBSATCM1CDIJSW6BHTYDYzBGVEPGqBJLORXfHRQUMZvJOSPHEbDHGAEOrDXUXPKjBZXHQJuUOPBFxCLKFPAmWRJLBlBHPKQAwBYBBERcCDVYEOmIHISCoUKVMH0BHUKOAxHNWSYAgDTZVPOiMHGAQ0SLONBkEGHBZIoIVWEOTnBHPMZDhBLYFKUwIVDRNTdDUVBQVtDUMKYUiSKACA6IQJQeRLEAMlPKAJW3UNWGMwBHZJZDsGYKCJAoDEHMGM0IVXQYFdDFJSTDdGHMUVKiBAOTNI3DFPVhCGEFOZ4EETZA9JLAKMWoHNZYOUgIWOIYShEFHDE7SMCBChCPBPBBlHOKBMJcDEEIYP4FATASRfQYXUVsJMWKELjBDOYSF6BCRIYEhIXQMMZdBYRNBDtDERNUKqQKQPA7QLGTCbUNFXLpTMXPL9BCTNIHkWSNIXlDUEGFJlBWFYAzEMAGRU9HPPJPQpHOTXQVtBYMQUP4JLDQRG8RLWVTyBBRYWFkUMEMY4SLGXQ3YOLTAsBIBIMFdELYPHR5QVPUSoGIVUNXtDVTSPDcKHYUS1NIWVM6SUJNPlSRBJNqCZPMKJpCUMXGY5DGTHUV4EPSRIZiEAWTGLaJRJCBBoERGRSVyERDMAPwEFNIUQcEOTCSI1EGPPWPlERVZGZ4EHOTMN2EENTNS4ELJSKAmJBODWBiJQYWUNzBMZIDMuGMVCPTxEQYNEAmIKQYDI4EFNQTZeDWHWMU3EGLMGR9EGQHZVqCTFTTO6JCENWImHENTGCiEAMAFEwEENWHXaEVWYDHbEIIDWByIMGIVLfFFPNXFrJCODFInEGQTNH7CGNEEH3COSIBKqETUVQImGOHFEI5HFOFEKvGNZZIOeGOCGKTbJSPTEC5EZZNHVnDWKRJWkEZXPYPpBOHZRKnCTPMFNaCEDDWZuYYDESaEUXGEGaENRGQMfDVBNAFzGNNIHNqWXSIKeEOPFPAfEQIZWOfHEWASYnRIWVM9BJXDHV5BKPJHIpCQDWKKeFDJAJMqHPCUGHlCUCPIGtEEEDT1VVFOBeCZUDQUbCSQNWS5DDSSEVgDZMHMGdEPKLHFpDZMCSPrHFJDRIcHSPREGtIKXHOWcHCOGBB8FCFNFBpEPAQCO8COOUKQcCWSXLGdBIEVXQcDZPLYP9IJGLKBwCSDDVOeCPPVHYhCQQOFB7DSERFBwDNBONRzCRQHXKhDAXOIAsDTELUTsCOQSYZwDYSIKVgDYYZTXdHUDNMEkDYBKBT0DGZXYYiENRDPYdELNHOUmIZWXSWtFGPXXUtFFIUUStGMMLCWdEOHZZYoCOQLKKvDKEPBWwCOPEYCvDQCECZiHESTTAeHEKKYSeEBQRZNbHERBBXaDJZSJNoCOPVOUwDJZSIKtCOQWBL6EAKGBH1BDYRC5FEYXIIkCBGHWKaSSTCOgDDYXEB7DSGHSB0FWHQTWlEPDXYX8IFOEQI5HPYSQSdEHOOXGuETUTVPuDXJJXZlGORCIWeCEBJQBiCEETURiBXUMYWsENSKBZyECOUOFcEOSHIEfBIIJDVaFGTKZMvHUALOAmEACIAB1XHKLEtWDODZ6HATITSjENMLGEyCLFKUjDGVWMU1BKZIDEvBHOCO9EBILWZtDUWOKBtFEJRYMjHPXWOH0BSAVZCwCMLBGPqVNAGToCKHNKUaTLWSBuBHRHLN7GJYCTB6JMYGIO8CGHTMXhBMYBKP0BHUOLLvFTCGTLeBJYXFZmBLYZUBhGJNSYlBIUGCS6CAGVJPdCTWHYNyERABAV2XCORMaDXKZCAjHQYHHHuELTWYFvJOIRLErBJQKOZuDFSTWLhBGRQWHuUQQVKfBTBREMzDHEILDvEQWGFErFDHMYGqCDHYXYrCBLWZXaBOYDFV7GKERKTaGHSAMT5EOEVCAyJOAJZO2FDMOBN7GZPQCXgBQBJBG2BWEDTGxFEGMUKrJLPPFM9HQHWDRmIGHDFN6CDGXVD6CGJHWIdMLUPQ2BIBBBXdFSDKBVnBGYUJW1FSAWLKgCKGBQQwHFJQWeBIHZDShQSFGUwDWQUCJtBXIUOMwDECNDPdFEGDNC1DFJRFWgELNDAOqYOTPBnDCZZVkBUYQQH6BFSXGMeYQAHSeBHXZQCoJLDUWD6CNRAGUxFDXUXGxBZDSXPmYOWNCkZOLUWyYNVLKoCDVOBaZQLXNkFQWGZUpFDNXBJ4CNWCKX5FCLTXQoFROOZN4GXONKA0DFTJZK2BBWMAdHGSQUrBCSBLKqLIURUkGGHYSiBDRGIE9GGOPW0BYWOVJkBGUDOGpIVPLJN4KIECI0BESMGLtBHXXYCoRSTETlJMOEYIxGIPBVRlEMFIBF9UMBYMsBBPUPUiHFJQPlBHWDMQ0COFWWM1FRDAOM0ELQFMC9BIOKHDtIFWAOS9IGFXKLbBWCENWrCDFGTXeDEWQKYwJMBAPEaBCQHWPhBXBVZE0YOJBPbOJPVXdGJKPZCjJLQXWEgFEMVFLdJMFZEP5BHDWRUqULRHE5MIZPTdVNQEHyBCQKOXeRJXVHaDXKGLXhEIQTFSqEMRRJFrEPLVIHaEAKZGRyERDMBJqHESTBG6HUKJMYlHUSRMTaIFHEHSxBEBMKfDETWOJfFEJOBUbJOQYFRaGOVZANxBYGKTTtDZCGCCpEBQNKQxDYJZUI1EAOIPFlEAMRIO9DYJZHDdDYSKKTlDYQOCUxDYPELBlDYNLDWxDYLQNS1DYJYHM9DYIHAFtDYGPUE1CTSURG6FETNHYfJROEEH5EBBXFTdHOCCZZ9EKWWFwCSIIPVoDHYLWM0DKAAIAmDUGYHGnBHXUKLlGIQTGPlCOJIKWpFFCBHIcFCFEORdBKOQKpDUKWGA0DLADDGkCPTLITnBEZDKD2QVAPJuBIYQTRoGLQYZP3HVRKPTwDYGTHJoEPCDJF6WXMOZqCYWKWLcDHAOCNlBEXRLJ1CUUJKLnBIOYUSsCEWVWM4JPLHFP2IYNYIHoEMJRWX3CPQDDYmDSDYERmCPRWYNaBCYCPXeCUSPMOkEBJFDHzCXVUGQ2CWSSDWhBAWAQZ1DHRPWVsCYTYJF5BEWVWJmCQSKMKvBIBQTMtUODVT0EPKTFG4CPJXOCcCURWRXlDODTAHeDIBEBItHGISL2CQPOXTtJBAYJEvHECAMQ7ERADSWvDLFGHKiSQBFYuCYVKJLyDRFMFXxHTDBCBhEARPTQdFWYDCVxJQUHGXoJAGLZVsDCWICTuDKEUIXfDHAOAV8EZXTDS3DMCPDRrFFWDFO4CSFBPZoJMWQIUbDRDVNU6CXUOMAxFGHQQUkIIPSMJjIJLGUP9CPJXJK8BQAKSX0BWBWMBtFCXNKJvCANWIS8BZVPWGaGIVOIE3BIWTGM6CADVIM7BRAIIL8BTBTYC2BYDQFKlBGTXZUpGJPULUqCQKLYFeQIUCZcBQANWCvBZDHNNnEMKIPEpCNZFSDnDGHCAT7BZDLBUoENUVFA9GZFMHQsESWNPZ5ELRWZXrELTFBT3HFMQUJjGPEKSYnFYSGVIsCIJEVD4YNCRU7CGGBYA3BNYGSWpCNKSAGaBYWQVOgDWNSEBcEZZYCFmEXZNNTiYPJUUwBEAHSjHAWUUCqBKHJJXcBKAOIPmCPJSBAcBOVGUDnCCEWBRkIHUAHG0TLVMEjDWKNFAqBEQSXKtBLVOZDmEZXAeCEGHYQ6BATIJCxCHJPPZkIFRDIRuSLENC3CHWOSaDWAIHDeDXEJFL2ELKDLFbBENYFyBHYIYIxCUEREOuJRQURFaHPCQBOxCSPCHLxEPSJQQ5BHTMAxDZMGQIxDZFPGYxFGBBHWlELUCEL9JANAUAgFCKCREqCBHWTZdOIEJZ5LNATU3CUPPOFjDGWMKXcDLVTQBqNKHDJnCPBMJDsJMJDIIwIWBFIWpIETVCCoGJDXYN2CAFPAO1YGSdZNAFJtBAOTKApNJEXUrDXCRDAoFBMWYE0COZUGZvBIOHUAwCPDFIGoGZAMWD5FRCWEBeBVCUVOpLGXVCsHGCOC4BYCGUN8HGSWI1IGXXMlBJIKOK9FBEQDYpIENHTLdIHEXYC9IENITZnOXZL2BWDCON4UKNQKeVLBGV1GEWMFhRJEUGaCQFNII0BYMOLPcBZWZWRcDUCOGYwRPNRZeBUBWFC7QKNQKzEELNYlHGNGMgTJZZTjWOWSJeHPHBVI8DEZSBG1DUFWUU0DVBJCAyBOZCFO7RLGPMiBDPBNUzBDFLQuVLGFC1QLVIIiGIKASO8EMADREoEMXIKBsBHCFTOgDEPWFKwBPVTVTjYMPFY3BIBFLU9FSUAUXkBYPZDNlBITKLU3BDRATFaRKDAK9DVOSQPlDGFHKCpELBKOHmYOZEWeWPPNMeBFSBLFjXPLUJeFCLVPN5DETDWQyCQMGOMyCPXDEZdCNWCOS8FSZJBJbBDXITZ5YPPLFsBCROGT2VNIJQpBJNGGTkGZFOHTsGYSKLV0BAPJVG1WMJXKcDYLKAKeDZLWPS2DUIUZX0DYBWDLyDZDFHNaENSUWBcEADHHJaCDIEJWyBNTFKTaFIARTS3JSCXBW2HAVEBMaHAYJSTaCUEPSOvBHUPUBuBYEGMO6CKLROEaCGGCJV3BXFHIHeCIJPUZ6CHHIJZnCAUOSM3JONWBYpHVYFEInJSLJMYlJCEUKV2CDSQBTkEWVZTLpEAMCYGlDVJAHP8EEPNJQmEZYLMYnCUTQFMvCUTILDxFWEPETqIDHKDbJAVJYR8EKSSOYeDXLXRF9BYGIKOfCJJEWUlEKQFWN6DLCVGThDUAXGKvILRJONjBMZIHWnFYIUXDzFIMGQUmCDMNIWeBNZHOXcEOSHMR2DXKWNHmEQUWMM2EVWCRHxYURXT5DOXKJXjBVCHHAtHDDCZItJQQTNUtCCBVVWlEPPMKIkHCCMWRgJPQDLDgCBBPNWnFYXVYN3ILKWKOvXWOVAvDKJPHCmFXXFVVqIKKGHXeGJXZJRmIXLPYKqBIWVCYiEMEDKJjCUYRIBiFCQXRN4EVXIYL9ECNRCAuEYYUMC5ECMNNTtDADWOaGKBIOOqELXBXJmGJZQLV6DAVXJQrCSROSZ2CSLLVC1BLRXSCdUWJLC5DILJRMsHTHZRAdDZFFREsDISGPZ5GXMXWIlCRPXOG0NTGSTiMGHSQ8CWUAMKbBAPRUC6CETJpNRBlvRBhMXvGXsKXnHD8A56HgbhA56Hhb6A66HibBeA56HjbgA66HkbDgA66HlbDhA66HmbJmA56HnbiA66HobJnA66HpbJoA66HqbJpA66HrbJqA66HsbJrA66HtbJsA66HubHdvlrd3BifCyq53E66ye2ba64vlqc3Bcw76y6Ei30e36Hh64vlqc3Bcw76y6Ca30e36Hi64vsqj3Bcwew76y6Ca306Dm30e36Hj64vzqq3Bcwlwew76y6Ca306Dm306Ej30e36Hk64vnwew76y6Ei306Fl30e36Hl64vBekB43Bgwew76y6Ei306Dn30MjfFlwew76y6Ei306Dn30e36Hm64HaA86Ek83FK2hC9H7A56Hv3a6yhBvH7A56Fm3a6EkvBgkB63Bgwfw86Ek6Fm316Fk30Mk6Hvwfw86Ek6Fm316Fk30e36Hn64HBuAB26Fn8xfK3fK4fK5fK6fK7fK8fK9fKafKbfKcfKdAn6Fo8ifKefKffKgfKhfKifKjhB1H7A56Hw3a6Fovnwe6yw86Fo6Hw3131e36Ho64hB8H7A56Hx3a6Fnvuwlw76y6Ca30w86Fn6Hx3131e36Hp64hC0H7A56Fp3aw76y6Ca30vBfkB53BgMdFKkw86Fp6Hy30wlwew76y6Ca306Fp316Kl30e36Hq64eF8gF5kC33Bgks3Bgw76y6Fq30wew76y6Fq306Bd30rB33E9q43tbaMsfKmwnMgwew76y6Fq306Bd306El306HrgCtMqfKnwlwew76y6Ca306Dm306Ej306HsgBvMqfFlwlwew76y6Ca306Dm306Ej306HtgyMqfKowlwew76y6Ca306Dm306Ej306Hu6Hg64K0KQDd79x7326Bki07xxv32w86BkbBe31Mhwfw86Bq6Kp306Bd307mxk32w76Bkb631w76Bqbh317uxs32w76Bkba31wfw86BkbBe316Bl307BoxBl32w76Bkbh31rB73tw76Bkba31wuMnFKqfE5wfw86BkbBe316Kr306Bl30vPYmqC93BckC33BgkB13Bgrf3Biw76Bkbh31bK0rf3Biw76Bkba31bKsru3H9MjfKtwew76Bkb6316El30q43tbaKa78q63E86BkKPVu7PVgMPVcGPV8KPV2HEJ2AEIy6BrkEIr3C86BrMEIh6CfGEIa6Cf6CyKEHyHDdADa6B9kD43C8w86Ku6B930MCoGClKCgj5K06Eaa0eC4GC16HzKBtH7A56Bm3a7hxf32w86Ea6Cz306Hz7cxa326BmB36Ea7gxe32w86Ea6Cz30s4e36Bm6464H7A56B3i0HlAj6B4xe32w86B36Do30i0HOhAOe6BhxO832w86B46Bh30MNtGNqKNleNiiNf1Ga6uGG56FrKFxHeAc6BmM7C2636B9vo6FrKh7fMd6Frw86Bm6Em3064vD9kBd3C8qi3BcMdfB1w86Bm6Dn30ro3Haw9C2636B130w86Bm6B130KBo7BlxBi32w86Bm6B130GB3Kz7xMvC2636Bqwmwfw86Bm6I0306B1306En3064647oxm32wfw86Bm6B1306Cz306Bm7ixg32w86Bm6I030C263e36Bm641Bq6B9GBkKBfHhAf6EoMaw8C2636u307pMn6Eo6Bqwfw86Eo6B1306En30e36Eo64196B1G4K0641Dm6EmGDg6D0KD8hBsH7A56Ep3a6D0KBdvBaMd6Epw86D06Dn30Kr7pxn32w9C2636Ep31w86D06Ep3164vBaMdfBdw86D06Dn30Kr7pxn32w9C2636Bd30w86D06Bd3064641B66BsGB0KweuMsC263wmwgw9C2636B1306Cz306u306464HBHxABHt6BaxBHm32w86B46Ba30MBH6iBGt1D46B1GCy696qKCp7txr3269xl32w8C2636930k73C86980vBrr83E96q6CyKi7gxe32w8C2636q306qKv7txr32w8C2636q30rd3kw7696Bl30bg641B26BdGx6I1KqeoMmC263wgk93C86I16Fj6Cg30641Kb6DpGK56B7KJxHfAd6Fsw8C2636930HeAc6Ftw76B76930HfAd6Dqw8C2636q30HeAc6Eqw76B76q307dMbw9C2636Fu30vGvr83B56DqbgKEapE7H6A465bhr73x656Eq263z3065KDfHBiABf6I2rB93brB237wd6Ftr63765b631rj3tbmrd3kr73B565bgbibf7BrxBo3E7wk6Fsrd37r73e6Dq65b631rx3d6I2rq3tbmrk3kre3B5r73e6Dq65bgbiKC5pC2H6A465bhr73x656Eqx73Bt65bgKB97B6xB332wk6Fsrd37r73e6Dq65b631wd6Ftr63765b6317ixg3Btw8C2636q306Eqe4C263641Dn6FuGDhKDcHeAc69w8C2636930HeAc6qw8C2636q307BdxBa3Kvwc69r6376qb631rr3dbI3rk3tbCprd3kr73B56qbgbi7yxw32w7696Bl30Mjr73Bu6qbgw86Cf6I430641Ca6BsGC4KBzHsAq6BsMlC263wfw86Bh6Bs306C4307yxw32w76Bs6930Mjbhwfw8C26369306Cq30e36Bs641Lx6ErGLr6ChKLjH6A46980HH2AGz6HbGGt6CrKGlH8A66Cr6CrH8A66DrbKwH8A66EsbI3eFoGFlKFg7BbxB8326DrrB03brt3erf3kbKxr83b6DrbI5r83H86Drbl6Es7BbxB8326CrrB03brt3erf3kbKyr83b6CrbI5r83H86Crbl6EsHsAq6Etrl3bre3er73d6Drbl6Cr6Es7bx93Jl6EtbFv7bx93Bt6EtbI6eB1rz3k6Etgsri3DfMaw86Cf6Er30bI6baq43tba6464pDkHdA465bhA56Fw3ar73x656Chx73Bt65bgKCkHB1Az6FxMurp3kki3C86FwMaw86Cf6Er30bFv6Hb7jxh326Fwra3kM36FxbKz7tMrrg3nra3kM36FxbFvbhw7696C330ehBf696Chw86Ba6B13064w76Bh6u30HlAj6Cbxe32w86B36D130i0HLtALq6FjxLk32w86Cb6Fj30iL51G96CgGG36B7KFvHdAb69w76B76930HdAb6qw76B76q30H7A56Eu80pE8H6A465bhr63x656q263z3065KDhHBhABe6DlrB83brB137wc69r63765b631rj3tbmrd3kr73B565bgbibf7wMuMiblwer7376Dlbg6Bd30w86Eu6C3307xMvMjblwfr83b6DlbHd6Bd30w86Eu6C330efMdfE5w86Eu6Fy30641Eq6BvGEk6FzKEcHfAd6G0w86Fz6Bl30H6A46980pCuH6A465bhr73x656G0x73Bt65b6KC17ByxBv3E7wd69r73765bBe31rBa3dMlMe65b6w86Fz6L030bl6I7rj3tbmrd3kr73B565bibgeoBm69r83Bu6G0b6w86Ba6B13064HKdAKa6EvxK432w86Cb6Ev30iJp1F56CgGEz6B7KErHdAb69w76B76930HdAb6qw76B76q30H7A56G180pD4H6A465bhr63x656q263z3065KCdHBhABe6DlrB83brB137wc69r63765b631rj3tbmrd3kr73B565bgbibf7rMpMd6Dlw86L16L230w86G16C330efMdfE5w86G16Fy30641Ee6BvGE86G2KE0HfAd6G3w86G26Bl30H6A46980pCpH6A465bhr73x656G3263z3065KBx7BuxBr3E7wc69r63765b631rB73dri3bMc65w86G26Ew30bfrj3tbmrd3kr73B565bgbiehBf696G3w86Ba6B13064HDoADl6CexDf32w86Cb6Ce30iD01Br6CgGBl6B7KBdlBaKrepMnMiMd6B7w86Ev6Cg306L36L4Df6BxKa58B6fL56L6641B36BvGy6I8KrepMnMbM66I86I96L7w86Ev6Bv3064HT0ASx6CixSr32w86B46Ci30MSciS01Bn6CcGBhKBc7rxp32w9C2636D230Baw86Ba6B1307hxf32w9C2636Ia30bh641D56DsGCz6B8KCrvB8re3Biq63E66B8fG4Ko7mxk326B8Md6B8w86Ce6Bv30647nMl6B8wgw9C2636D2306Dp307pxn3Btw9C2636Ia30w76B86q30641Kf6D3GK96IbKK1HgAe6B8w9C2636D230HeAc6G5w76B86930HeAc6G6w76B86q30HgAe6B0w9C2636B030HeAc6Dtr73k6B0bgHgAe6D4r93Bu6G66DtvCa6IbKo7mxk326D4Md6D4w86Cf6I430KBe7BbxB8326D4MB0rm3tr73n6D4bhw9C2636G730bhw86Cf6L830HfAd6Dur83k6D46B0HtAr6G8Mmr73k6Dubg6G6w86Cf6L930vCv6DuKCnpBdH6A46jbhr73x6j6Dux83Bt6j6B0Kk7iMg6G56jw9C2636Ic30HmAk6IdMfbh6Duw86G56Ie307hxf3G9w76B86q306G864eiBg6Id6G8w86Ba6B130641Ca6BsGC4KBzHsAq6BsMlC263wfw86Bh6Bs306C4307yxw32w86Bs6D230Miwgw9C2636D2306Bs30e36Bs64156G7bhw76Bh6u30HMdAMa6IfxM432w86B46If30MLpiLd1d68M9w76Bh6u301Bs6B1GBm68KBf7yxw32w8C2636830Mi68wew8C26368306u307dMbw9C2636Cc30641Bf6CcGB9KB47nMlC263wfw86Ci6Cc306C4307dMbw9C2636Ga30641Bh6LaGBb6DvKB37gMe6Dvw9C2636Ds307dMbw9C2636D330e4C263641Bu6D5GBo6DvKBgvp6DvKi7gMe6Dvw9C2636Ds3064HiAg6HfMbw9C2636Ex30e36Hf641e6B0r93BubJybCp1Bl6GbGBf6EyKB7eB4GB16C568KseqMo6C5wjBc68w86Ey6B1306D53064641Bx6LbGBr6EyKBjeBgGBd6C56oKB3eB0My6C5wtBm6Ey6owfw86D66Lc306B1306D5306464w76Ci6u30HlAj6D6xe32w86B36Gc30i0e36B3647BIfMBIbGBI7KBI1H8A66B36BrHfAd6B4w86B36Do30HfAd6Baw86B46Ba30HfAd6Cbw86B36D130HYbAY86D7xY232w86Cb6D730iXn1Pe6CgGP86B7KP0HdAb69w76B76930HdAb6qw76B76q30HgAe6Csw9C2636Gd307cMaw86B76Fu30H7A56Dw80pKhH6A465bhr63x656qx83Bt65bBeKJoHBhABe6IgrB83brB137wc69r63765b631rj3tbmrd3kr73B565bgbibfHBtABq6IhrBk3brBd37wi69rc37r63e65bab631rp3tbmrj3krd3B5r63e65babgbibfHBtABq6IirBk3brBd37wi69rc37r63e65b6b631rp3tbmrj3krd3B5r63e65b6bgbibfHyAw6Ijrr3nrk3nr73d6Igblr73d6Ihbi6IipD9H7A56C6bhky3Bgr73x6C6bgrk3xre3e65r83k6C6bLd6q273z306C6KBo7BlMBiMB5rt3brm376Ijrf3kbDhr83tbBe6C6bJvw86Cs6Ge30w86Dw6C330HkAi6D8MdbEbw86Cs6Ge30vBb6D8KB3OB0rf3B5w86Dw6Bl30bgKh7fMd6D8w86Dw6C33064efMdfE5w86Dw6Fy30641Hv6BvGHp6CtKHhHfAd6Dxw86Ct6Bl30HgAe6Csw9C2636Gd30HgAe6Cjw9C2636Ik30vD2q63Bc6CjKCp7oxm326Cjxf32w9C2636Ik3080pBwH7A56C6bhrf3x6C6w86Cs6Bl30273z306C6Kv7txr32wk6CjMd6C6w86Cs6Ew30316C664HkAi6D8MdbEbw86Cs6Ge30vBq6D8KBiHkAi6GfMd6D8w86Ct6El30vurc3H96Gfq43tbaKc7ax8326Dx6Gf6464eeMc6Ct6Dx6Cj6Il64166GdfLejHv6Ct6Dx6CjKHgH6A46980H7A56ChbhpGdH6A465bhr73x656Dx263z3065KFlvFir73B565bgKF4HBhABe6ImrB83dwp6CjMir63t65baw86Ct6Ew3031rd3kr73B565bgb6HBiABf6InrB937wj6CjMc65w86Ct6Ew3031rk3tbDhrd3kr73B565bgb67BlxBi3E7wd69r7376Chb631ry3dr83n6Im6Inrk3tbmre3kr83B56Chbgbi79273z306Ch64ehMf696Chw86Ba6B9306Il647EUvkEUr3C8wfw86Br6Do306Cu30MEU3GETz6CyKETqH8A66B36BrHfAd6B4w86B36Do30HfAd6Bhw86B46Bh30HfAd6Baw86B46Ba30HfAd6Ciw86B46Ci30HfAd6Cbw86B36D130HfAd6Cew86Cb6Ce30HfAd6D7w86Cb6D730HfAd6D6w86B36Gc30HfAd6Ggw86D66Gg30HRvARs6CuxRm32w86B46Cu30MR7iQv1d68M9w76Bh6u301B86EzGB26o68KuesMqw9C2636F0306o68w9C2636B930641B86F1GB26o68KuesMqw9C2636Io306o68w9C2636B930641D06B1GCu6Ip6o68KCi7yxw32w8C2636830Mi68wew8C26368306u307ixg32w9C2636Gh306Ip7hxf32w9C2636Gi306o7dMbw9C2636Cc30641Bf6CcGB9KB47nMlC263wfw86Ci6Cc306C4307dMbw9C2636Ga30641Ba6LfGB46DyKx7gMe6Dyw9C2636Ds30edMbw9C2636D330641Bu6D5GBo6DyKBgvp6DyKi7gMe6Dyw9C2636Ds3064HiAg6IqMbw9C2636Ex30e36Iq641e6Bbr93BubDjbCp1e6D9r93BubDjbCp156F0ba156Iob61Em6GbMEgGEdKE8jB26oKvvtrd3Biq53E66ofG4K5e36GjK5e36Cv6GkeD0GCx6sKCqeCniCk1B86DaGB26C56o68KrepMn6s6C56o68wcM56o6Gk6Da30641B66DzGB06p6o68KqeoMm6s6p6o68wcM56o6Gk6Dz30646464w76Ci6u30HCnACk6IrxCe32w86B46Ir30MBziBn1Bd6ExGB7KB2HvAt6DbMoqb3Bcq63BcfGlw9C2636D330e36Db64156B0baw76Cu6u30HlAj6Isxe32w86B36Bw30i0HEwAEt6GmxEn32w86B46Gm30ME8iDw1B36EzGy6s6vKqeoMm6s6vwgw9C2636It306B930641B36F1Gy6s6vKqeoMm6s6vwgw9C2636Iu306B930641Bh6B1GBb6s6vKB27hxf32w9C2636Gn306s7hxf32w9C2636Go306v64w76Bh6u30HP5AP26C2xOw32w86Is6C230MOhGOeKO9HgAe6C2M9w76Gm6u307EjxEg32w86C26It30ME1iDp1Dm6GpGDg696jKD7HfAd6sw9C2636Gn30HeAc6B0w76s6B0307nMlC263696j6B0w86Gq6C4307fMd696jw76s6Iv307B1xz32w9C2636Gr30Mk6jr73e6j6B0w7696Cq3064w76C26u307EsxEp32w86C26Iu30MEaiDy1Dv6GpGDp696jKDgHfAd6sw9C2636Gn30HeAc6B0w76s6B030HrAp6IwMk6jr73e6j6B0w7696Cq307fMd696jw76s6Ix307nMlC263696j6B0w86Gq6C4307ixg32w9C2636Gr306Iw64w76C26u30jE2696j6B0KDpHfAd6vw9C2636Go30vBh6vKtH7A56Gs6v7ixg32w9C2636Go306CyKiHgAe6Gsw9C2636Gr30pBlH6A465bhr73x656B0263z3065Ku7sxq3Ffwc69r63e6j6531w76Gs65316Gqe36C264HlAj6Iyxe32w86B36Eg30i0HJ4AJ16F2xIv32w86Iy6F230iIg1Fz6EgGFt6B86B0KFiHeAc6Dtr73k6B0bgHtAr6Cdrm3t6Dtrf3B5w76B86q306DtHBdABa6IzrB43nrx3nrk3nr73d6Cdbmr73d6Cdblr73d6Cdbi6CdH7A56Gt80pB9H6A465bhr73x656Cdx73Bt65bgKh7fMd6Izw86Gt6C330HnAl6C7Mg6Gt6Cdw86Ba6B9307fMd6C7w86B86Dp30641Cb6J0GC56B8KBxHBbAB86CdrB23bwww76B86930rj37rd3tw76B86q30bab631bf7hxf3G9w76B86q306Cd64HSwASt6DcxSn32w86B46Dc30MS8iRw1B168Mxig166Bw6C2166C76F2wdw76Cu68306u301Jl6CcGJfKJa7nMlC263wfw86Cu6Cc306C430HeAc68w8C2636830HcAa6vw6686v30HeAc6Bww7686Bw30vCdrp3Biw9C2636Gh30w9C2636F030KhHfAd6E0w86Bw6Ez30KB0HfAd6E0w86Bw6F1307hxf32w9C2636G730bavEskB43Bgw9C2636Dd30ro3Biwgw9C2636Dd306J1306E0KB77B4MB1C263kd3Bg6vw66v6930wgw9C2636Dd306B130KC87BexBb32w9C2636Dd30Mw6BwC263kd3Bg6vw66v6930w86E06C4307pxn32wgw9C2636Dd306J1306E0641B36IcGy696jKq7oMm696jwgw9C2636Dd306Gp30641Ff6ExGF9KF4HmAk6C7wfw8C26368306C730vE8rp3Biw9C2636Gh30w9C2636F030KBx7yMww9C2636D230w9C2636B030w86C76Eg30HvAt6DbMoqb3Bcq63BcfGlw9C2636D330KBeHvAt6DbMoqb3Bcq63BcfGlw9C2636D3307fMd6Dbw86C76J030e36Db641e6B0r93BubDjbCpw76Cu6u30HDaAD76E1xD132w86B46E130MCmiCa1u6B1Gp6E2Ki7gMe6E2w9C2636Em30641Bb6BdGB56F3KyewMuC263wokh3C86F3w9C2636F3306Cg3064w76Bh6u30HlAj6J2xe32w86B36Cw30i0HKfAKc6J3xK632w86J26J430iJr1Dt6CgGDn6E2KDfHdAb6pw76E26p30HfAd6Bfw86E26Bf30vBz6BfKBiHBfABc6B7MB66pwB1Mu6BfwpMi86bJ5bJ6w86Ba6B9306Dp306Dp30K9H7A56B76pefMd6D7w86B76Bd30641Fs6BvGFm6J7KFeHjAh6pMd6J7w86D76Bv30HdAb6E3w66p6930vD7kB13Bgrf3Biw76E3bh31bJ5rf3Biw76E3ba31bJ6KByHxAv6BfMqMeb6bgw86E36Cq30w86Ba6B9307gMebhbgw86E36Ie307fxd3G9w66p6q30bl64H8A66Bf6CyesMqie146p6p166Bf6Bfw86E16B93064HN4AN16CvxMv32w86B46Cv30MMgiM41n68Mji8166Cw6J3w76Bh6u301G06DaGFu6s6C56o68KFg7qxo3268Mi68wew8C26368306u30HkAi6GuMd6o68w76s6Ez30HjAh6pMd6C5w86Gu6D530HeAc6F4w76Gu6830eCyMCviCi146p6p146o6o1b6vw76F46v30156Lg6s1d6Bww86F46Bw301d6C7w86F46C7301c6B0w76s6B0301c6F3w7686Cw30w86E16B930641Dg6DzGDa6s6p6o68KCx7qxo3268Mi68wew8C26368306u307uxs326pMm6pw7686Cw30w9C2636Gv30HB1Az6F5Muw66p6p30wkMd6o68w76s6F1306D530e36F5641Bq6GvGBk6p6CwKBavB7rd3Biq53E66pfG4KkeiMg6pC263w86Cw6Bv30K4e26p64w76Bh6u30HlAj6J8xe32w86B36F630i0HH6AH36J9xGx32w86J86J430iGi1Gf6GwGG96De6Bb6D96BfKFsvB7q63Bc6BfKv7txr326BfMkr83BubEbbiw86Ba6Er3064HBeABb6oMB66De6BfwyMrif1d6Bbr83e6Bb6D9w86Gg6B9306Lh30HBbAB86vMB3Mi6Bbwdw66o69306Cq30r73k6D9bgw86Ba6B9307lxj32w66o6q30r73k6BbbgeyMwik146o6o146v6v166Bf6Bfw86E16B93064HN8AN56GjxMz32w86B46Gj30MMkiM81t68Mpi8166F66J9wdw76Cv68306u301F96DaGF36s6C56De68KEo7qxo3268Mi68wew8C26368306u30HBaAB76CxMB16Dew76s6Bb30w76s6D930wew7686F6306Gw307lxj32w6686v30w76Cx6v30HB9AB66pMB1C2636s6C5w76Cx6o3068wfw86Cv6Da306C4307eMc6Cxw76p6Em30e26p641Fy6DzGFs6s6p6De68KFe7qxo3268Mi68wew8C26368306u307uxs326pMm6pw7686Cw30w9C2636Gv30HBjABg6CxMBa6Dew76s6Bb30w76s6D930w76p6Bf30wew7686F6306Gw307lxj32w6686v30w76Cx6v30HB9AB66F5MB0C2636s6pw76Cx6o3068wfw86Cv6Dz306C430e36F564w76Cv6u30647EBvMEBrGEBnKEBhH8A66B36BrHfAd6B4w86B36Do30HfAd6Dcw86B46Dc30HfAd6D6w86B36Gc30H6A46r80H7A56Gx80H7A56Ck80H7A56Cl80H7A56Cm80H7A56Cn80H7A56F780H7A56F880H7A56F980H7A56Fa807WxMWuGWrKWmH7A56Bj80pCpH6A465bhr73x65bFi263z3065KBxvBur73x65bDjKn7lxj32w76Bj6531r63d65baKu7sxq32w76Bj6531rd36r63d65babJxH7A56BobhH7A56C9bhpT0H6A465bhr73x65bFi263z3065KS8HBsABp6BprBj36rB536rr36re366C9r73d6C9bar73d6C9b6r83d6C9bBer73d6C9bg7B0xy326Bprr36rk36r7376Bpbir73b6BpbfbJw7gxe32w76r6Bo316Bp7hxf32w86Gx6Bp316BoHfAd6Diw86Bj6Bo31HfAd6Fgw86Bj6Di31HfAd6Fhw86Bj6Fg31HzAx6crt36rf3kw86Bj6Bp31bHer83k6BpbJa7yxw32w86Ck6Bo31ri3nr63d6cbmr6376cbi7yxw32w86Cl6Bo31ri3nr63d6cblr6376cbl7yxw32w86Cm6Bo31ri3nr63d6cbir6376cbm7gxe32w86Cn6Bo316cHBnABk6crBf36rB036rm36r83k6FhbLir83k6FgbLjr83k6DibHer83k6BobJa7yxw32w86F76Bp31ri3nr63d6cbmr6376cbi7yxw32w86F86Bp31ri3nr63d6cblr6376cbl7yxw32w86F96Bp31ri3nr63d6cbir6376cbm7gxe32w86Fa6Bp316cvD0q63Bc6BoKi7gxe326Box7326C9baKC57BbxB8326BorB0366Diwt6Bjwm6Bjwf6Bjr8366Fh6Di3131317pxn3Ff6C9wf6Bjw86Bj6C9313164HyAw6Jb8rbhbab6bgbiblbCpbEbbDjbJtbJuHCYcACY86DkxCY132w86D66Dk30MCXliCX81BBt6GaGBBmKBBgvBgkB53Bgw9C2636Gy30rp3Haw9C2636Jc30w9C2636Gi30K4e26464HuAs6oxo32w9C2636Jc30w9C2636Gi30HdAb6Jdw66o6930HkAi6Bbrd3Buw66o6q30bgHuAs6Fbxn32w9C2636Gy30r83e6BbbDhHkAi6Fcrd3kr73e6FbbabgHmAk6B6xf32w9C2636Je3080pNaH6A46wbhr73x6w6Fc263z306wKMivMfr73x6w6BbKo7mxk32w76B66w31w76Jd6w31KLdHjAh6cwd6B6r63t6wba31vJoqd3Bcr83B56w6BbKEy7qxo326cri3nr63d6cbir6376cbm7D0xCx326crCq3nrC73nrBc3nri3dwc6rr6376cbm31bmro3dwi6rrc3br6376cblbf31blro3dwi6rrc3br6376cbibf31biwc6rr63b6cbf317B0xy3Ff6crr3dwl6Jbre3nr83Bu6w6Bbbh31bmvE5kv3Bgr93Df6BbbDhrf3Bir83B56w6BbbgKD37D0xCx326crCq3nrC73nrBc3nri3dwc6rr6376cbm31bmro3dwi6rrc3br6376cblbf31blro3dwi6rrc3br6376cbibf31biwc6rr63b6cbf31647zxx32w76B66w31rk36we6B6r73t6w6Bb316cHmAk6Gzxf32w9C2636Jf3080pHqH7A56Cobhr83x6Co6Fc273z306CoKGvHeAc6wr83t6Fc6CovBer83B56CobgKfHdAb6cw76B66w31KlHjAh6cwd6B6r63t6wbg31vEvkl3C8r73x6Cobgr73Jk6wbgKi7gxe32w86Gz6Co316cKDl7DixDf32w86Gz6Co31rD036rCa36rBe36wj6F7wc6rr6376cbm3131wp6F8wi6rrc3br6376cblbf3131wp6F9wi6rrc3br6376cbibf3131wj6Fawc6rr63b6cbf3131641Br6IvGBl6B26jKBb7B8MB56B26jw9C2636Je306Ck6Cl6Cm6Cn6rw9C2636H030641Gc6IxGG66B26jKFwHjAh6cwd6B2r63e6jba317zxx32wd6B2r63e6jba31we6B2r73e6jbBe317mxk32we6B2r73e6jbBe316c7B9MB66B26jw9C2636Jf306F76F86F96Fa6Gxw9C2636H030HjAh6cwd6B2r63e6jba317zxx32wd6B2r63e6jba31we6B2r73e6jbBe317mxk32we6B2r73e6jbBe316c641BMi6H0GBMb6B26j6B66Ck6Cl6Cm6Cn6rKBLjHgAe6Fbw9C2636Gy30HrAp6Byrk36w76B26j31w76B6bh31HxAv6Bzrq36wd6B2r63e6jba31w76B6ba31HxAv6C0rq36wd6B2r63e6jb631w76B6b631HzAx6C1rs36we6B2r73e6jbBe31w86B6bBe31H6A46wbgpPjH7A56H1bar83x6H16Fb273z306H1KOoHD9AD66EcrD036rCg36rBv36rB436we6Ckr7376Bybm31wk6Clrd3br7376Bzblbf31wk6Cmrd3br7376C0bibf31we6Cnr73b6C1bf31wd6B6263z306w31HD9AD66EdrD036rCg36rBv36rB436we6Ckr7376Bzbm31wk6Clrd3br7376C0blbf31wk6Cmrd3br7376C1bibf31we6Cnr73b6Bybf31wd6B6263z306w31HD9AD66EerD036rCg36rBv36rB436we6Ckr7376C0bm31wk6Clrd3br7376C1blbf31wk6Cmrd3br7376Bybibf31we6Cnr73b6Bzbf31wd6B6263z306w31HD9AD66EfrD036rCg36rBv36rB436we6Ckr7376C1bm31wk6Clrd3br7376Byblbf31wk6Cmrd3br7376Bzbibf31we6Cnr73b6C0bf31wd6B6263z306w317ax8326By6Ec7ax8326Bz6Ed7ax8326C06Ee7ax8326C16EfHDnADk6EcrDe36rCu3nrCa3nrBe3nrj3dwd6rr7376Bybm31bmrp3dwj6rrd3br7376Bzblbf31blrp3dwj6rrd3br7376C0bibf31biwd6rr73b6C1bf31wd6B6263z306w31HDnADk6EdrDe36rCu3nrCa3nrBe3nrj3dwd6rr7376Bzbm31bmrp3dwj6rrd3br7376C0blbf31blrp3dwj6rrd3br7376C1bibf31biwd6rr73b6Bybf31wd6B6263z306w31HDnADk6EerDe36rCu3nrCa3nrBe3nrj3dwd6rr7376C0bm31bmrp3dwj6rrd3br7376C1blbf31blrp3dwj6rrd3br7376Bybibf31biwd6rr73b6Bzbf31wd6B6263z306w31HDnADk6EfrDe36rCu3nrCa3nrBe3nrj3dwd6rr7376C1bm31bmrp3dwj6rrd3br7376Byblbf31blrp3dwj6rrd3br7376Bzbibf31biwd6rr73b6C0bf31wd6B6263z306w317gxe32w76B26j316Ec7mxk32wd6B2r63e6jba316Ed7mxk32wd6B2r63e6jb6316Ee7nxl32we6B2r73e6jbBe316Ef641e6Bbr93BubFibCpw76Dc6u307txr32w86B36Dk30Md6Dkw86Dc6Gb30647GjxGg32w76y6Jg30GG26Eh6H2KFrHxAv6oMr6H2wmwfw86Br6D1306Ce306Bv30HxAv6vMr6H2wmwfw86Br6D1306Ce306Bv30HyAw6EhMr6Ehwmwfw86Br6D1306Ce306Bv30HCmACj6pMCewCbMC36Eh6oiBe1k6Bwwfw86Br6Bw306C2301k6C7wfw86Br6Eg306F230146v6vwfw86Br6Dk306Da306Bd30e26p64H7A56Bn807D4MD1fLkGCm6BxKCe7B8MB5rt3erf3ew86Bx6H330fLlw86Bx6H430w86Bn6C330vB0rg3Dfw86Bn6Bl30bDgKe7cMaw86Bn6H5306464w76y6H6307D4MD1fLmGCm6BxKCe7B8MB5rt3erf3ew86Bx6H330fBjw86Bx6H430w86Bn6C330vB0rg3Dfw86Bn6Bl30bDgKe7cMaw86Bn6H5306464w76y6H6307D4MD1fLnGCm6BxKCe7B8MB5rt3erf3ew86Bx6H330fHcw86Bx6H430w86Bn6C330vB0rg3Dfw86Bn6Bl30bDgKe7cMaw86Bn6H5306464w76y6H630HmAk6H7wfw86Jh6Cz306Ji307P8xP532wfw86Jh6Cz306Ji30GOjKOevObMjw76Bqba31w8FLo6Fk30KN0H8A66E4dJjHwAu6FdwpMjFLpwew76Bqba316Hy30ba31vKvr83Bi6FdfaKc7ax8326E4dFevK4r93Bi6FdfDgKc7ax8326E4dFeKJcpCeH6A465bhre3x65w86Bn6Bl30263z3065KBfvBcru3E9MjfHcwew76Bn65316El30q43tbaKc7ax8326E4dFe64vBjru3E9Mmq43tbawew76Bqba316Cq30fE8Kj7hxf3Btw76Bqba31fE864HtAr6cMnri3BuMaw86K16Lq30bJz6I77wxu3Btw76Bqba31rg3efLrM9w76c6Bd30HBdABa6cMB5bhblwzrs3eMbblw76c6Bd30Mbblw76c6Bd306Cq307BxxBu3Btw76Bqba31rBf3efLsMB7MB1ro3er83e6FdfLtMaw86Bn6Bd306cw76y6Jg306I9vs6E4KlejMhC2636Bqw86H76En3064KlejMhC2636Bqw86H76En30646478q63E86Bka0")
好,我看不懂,我看你当中的值可以吧!
观察到传入的参数中有 CryptoJS
、AES
、CBC
、pkcs7
这些参数,所以我们只需要想办法找到 key
和 iv
还有要被加密的值就可以了,可是怎么加密呢?
根据 JavaScript
中的 CryptoJS
加密模型,可以推断出 CryptoJS.AES.encrypt
方法只有三个参数:
所以我们来 hook
(我是因为已经知道 a、b、c
的值,所以直接打印转换后的,正常可以直接使用 debugger
查看他们的值):
first = true;
crypto_js = _[1][0].CryptoJS.AES.encrypt;
_[1][0].CryptoJS.AES.encrypt = function(a, b, c) {
if (first) {
first = !first;
console.log(_[1][0].CryptoJS.enc.Utf8.stringify(a));
console.log(_[1][0].CryptoJS.enc.Utf8.stringify(b));
console.log(_[1][0].CryptoJS.enc.Utf8.stringify(c.iv));
// debugger;
}
return crypto_js(a, b, c);
};
放开断点后的第一次输出,就是我们的相关参数:
可以发现 key
和 iv
都是一样的,而且像是两个一样的字符串叠加,而我们要加密的文本先是 page
参数,然后竖线,然后一堆随机数,当中是字母,我们先把他们都当定值使用,进行一次 AES
解密:
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
a = '646503bf646503bf'
b = '2|225m259,225m258,225m257,225d257,225u257'
aes = AES.new(key=a.encode('utf-8'), mode=AES.MODE_CBC, iv=a.encode('utf-8'))
v = base64.b64encode(aes.encrypt(pad(b.encode('utf-8'), AES.block_size, style='pkcs7'))).decode('utf-8')
print(v)
我们来对比一下两边执行的结果:
Nice!这加密并没有任何魔改的地方。
我们看到参数中有个时间戳,然而加密中并没有,让我相信他们之间没有任何联系?
我不信,把这个短的加密值的一半变成10进制:
世界上的很多事情就是这么巧,然后我们稍微试试要被加密的文本,发现他大部分都是长度填充,真正有意义的只有那个 u
。
也就是说,不管你写成 2|225m259,225m258,225m257,225d257,225u257
还是 2|_______,_______,_______,_______,___u___
还是 2|u
,都可以正常请求!
解题源码
import os
import time
import base64
import requests
import jsonpath
from urllib import parse
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
os.environ["EXECJS_RUNTIME"] = "Node"
headers = {
'cookie': 'sessionid=j4ypr929ukbi8rcou79p57yylrnccr8i',
'User-Agent': 'yuanrenxue.project'
}
value = 0
for index in range(1, 6):
t = int(time.time())
# a = f'{index}|225m259,225m258,225m257,225d257,225u257'
# a = f'{index}|_______,_______,_______,_______,___u___'
a = f'{index}|u'
b = hex(t)[2:] * 2
aes = AES.new(key=b.encode('utf-8'), mode=AES.MODE_CBC, iv=b.encode('utf-8'))
v = base64.b64encode(aes.encrypt(pad(a.encode('utf-8'), AES.block_size, style='pkcs7'))).decode('utf-8')
url = f'https://match.yuanrenxue.cn/match/18data?page={index}&t={t}&v={parse.quote(v)}'
# value += sum(v['value'] for v in requests.get(url, headers=headers).json()['data'])
value += sum(jsonpath.jsonpath(requests.get(url, headers=headers).json(), '$..value'))
print(value)