【猿人学WEB题目专解】猿人学第18题

深入探索 Android 网络优化(二、网络优化基础篇,android编程基础教程 3、BDP(Bandwidth-delay product,带宽延迟积) 接收窗口(rwnd)会随每次 ACK 一起发送,而 拥塞窗口(cwnd)则由发送端根据拥塞控制和预防算法动态调整。 无论发送端发送的数据还是接收端接收的数据超过了未确认的最大数据量,都必须停 下来等待另一方 ACK 确认某些分组才能继续。 而 BDP(Bandwidth-delay product,带宽延迟积) 就是 任意时刻处于在途未确认状态的最大数据量。 BDP = 数据链路的容量 * 其端到端延迟 在高速连接的客户端与服务器之间 阅读详情

🌈据说,看我文章时 关注、点赞、收藏 的 帅哥美女们 心情都会不自觉的好起来。

前言:
🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
👍专栏介绍:猿人学WEB题目专解 ,提供猿人学WEB题目总计20题的解题思路与方法,如有讲述错误,请不吝赐教。

想看往期历史文章,可以浏览此博文: 历史文章目录,后续所有文章发布都会同步更新此博文~

人生苦短,我用python

题目网址

猿人学第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", "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66HrbJqA66HsbJrA66HtbJsA66HubHdvlrd3BifCyq53E66ye2ba64vlqc3Bcw76y6Ei30e36Hh64vlqc3Bcw76y6Ca30e36Hi64vsqj3Bcwew76y6Ca306Dm30e36Hj64vzqq3Bcwlwew76y6Ca306Dm306Ej30e36Hk64vnwew76y6Ei306Fl30e36Hl64vBekB43Bgwew76y6Ei306Dn30MjfFlwew76y6Ei306Dn30e36Hm64HaA86Ek83FK2hC9H7A56Hv3a6yhBvH7A56Fm3a6EkvBgkB63Bgwfw86Ek6Fm316Fk30Mk6Hvwfw86Ek6Fm316Fk30e36Hn64HBuAB26Fn8xfK3fK4fK5fK6fK7fK8fK9fKafKbfKcfKdAn6Fo8ifKefKffKgfKhfKifKjhB1H7A56Hw3a6Fovnwe6yw86Fo6Hw3131e36Ho64hB8H7A56Hx3a6Fnvuwlw76y6Ca30w86Fn6Hx3131e36Hp64hC0H7A56Fp3aw76y6Ca30vBfkB53BgMdFKkw86Fp6Hy30wlwew76y6Ca306Fp316Kl30e36Hq64eF8gF5kC33Bgks3Bgw76y6Fq30wew76y6Fq306Bd30rB33E9q43tbaMsfKmwnMgwew76y6Fq306Bd306El306HrgCtMqfKnwlwew76y6Ca306Dm306Ej306HsgBvMqfFlwlwew76y6Ca306Dm306Ej306HtgyMqfKowlwew76y6Ca306Dm306Ej306Hu6Hg64K0KQDd79x7326Bki07xxv32w86BkbBe31Mhwfw86Bq6Kp306Bd307mxk32w76Bkb631w76Bqbh317uxs32w76Bkba31wfw86BkbBe316Bl307BoxBl32w76Bkbh31rB73tw76Bkba31wuMnFKqfE5wfw86BkbBe316Kr306Bl30vPYmqC93BckC33BgkB13Bgrf3Biw76Bkbh31bK0rf3Biw76Bkba31bKsru3H9MjfKtwew76Bkb6316El30q43tbaKa78q63E86BkKPVu7PVgMPVcGPV8KPV2HEJ2AEIy6BrkEIr3C86BrMEIh6CfGEIa6Cf6CyKEHyHDdADa6B9kD43C8w86Ku6B930MCoGClKCgj5K06Eaa0eC4GC16HzKBtH7A56Bm3a7hxf32w86Ea6Cz306Hz7cxa326BmB36Ea7gxe32w86Ea6Cz30s4e36Bm6464H7A56B3i0HlAj6B4xe32w86B36Do30i0HOhAOe6BhxO832w86B46Bh30MNtGNqKNleNiiNf1Ga6uGG56FrKFxHeAc6BmM7C2636B9vo6FrKh7fMd6Frw86Bm6Em3064vD9kBd3C8qi3BcMdfB1w86Bm6Dn30ro3Haw9C2636B130w86Bm6B130KBo7BlxBi32w86Bm6B130GB3Kz7xMvC2636Bqwmwfw86Bm6I0306B1306En3064647oxm32wfw86Bm6B1306Cz306Bm7ixg32w86Bm6I030C263e36Bm641Bq6B9GBkKBfHhAf6EoMaw8C2636u307pMn6Eo6Bqwfw86Eo6B1306En30e36Eo64196B1G4K0641Dm6EmGDg6D0KD8hBsH7A56Ep3a6D0KBdvBaMd6Epw86D06Dn30Kr7pxn32w9C2636Ep31w86D06Ep3164vBaMdfBdw86D06Dn30Kr7pxn32w9C2636Bd30w86D06Bd3064641B66BsGB0KweuMsC263wmwgw9C2636B1306Cz306u306464HBHxABHt6BaxBHm32w86B46Ba30MBH6iBGt1D46B1GCy696qKCp7txr3269xl32w8C2636930k73C86980vBrr83E96q6CyKi7gxe32w8C2636q306qKv7txr32w8C2636q30rd3kw7696Bl30bg641B26BdGx6I1KqeoMmC263wgk93C86I16Fj6Cg30641Kb6DpGK56B7KJxHfAd6Fsw8C2636930HeAc6Ftw76B76930HfAd6Dqw8C2636q30HeAc6Eqw76B76q307dMbw9C2636Fu30vGvr83B56DqbgKEapE7H6A465bhr73x656Eq263z3065KDfHBiABf6I2rB93brB237wd6Ftr63765b631rj3tbmrd3kr73B565bgbibf7BrxBo3E7wk6Fsrd37r73e6Dq65b631rx3d6I2rq3tbmrk3kre3B5r73e6Dq65bgbiKC5pC2H6A465bhr73x656Eqx73Bt65bgKB97B6xB332wk6Fsrd37r73e6Dq65b631wd6Ftr63765b6317ixg3Btw8C2636q306Eqe4C263641Dn6FuGDhKDcHeAc69w8C2636930HeAc6qw8C2636q307BdxBa3Kvwc69r6376qb631rr3dbI3rk3tbCprd3kr73B56qbgbi7yxw32w7696Bl30Mjr73Bu6qbgw86Cf6I430641Ca6BsGC4KBzHsAq6BsMlC263wfw86Bh6Bs306C4307yxw32w76Bs6930Mjbhwfw8C26369306Cq30e36Bs641Lx6ErGLr6ChKLjH6A46980HH2AGz6HbGGt6CrKGlH8A66Cr6CrH8A66DrbKwH8A66EsbI3eFoGFlKFg7BbxB8326DrrB03brt3erf3kbKxr83b6DrbI5r83H86Drbl6Es7BbxB8326CrrB03brt3erf3kbKyr83b6CrbI5r83H86Crbl6EsHsAq6Etrl3bre3er73d6Drbl6Cr6Es7bx93Jl6EtbFv7bx93Bt6EtbI6eB1rz3k6Etgsri3DfMaw86Cf6Er30bI6baq43tba6464pDkHdA465bhA56Fw3ar73x656Chx73Bt65bgKCkHB1Az6FxMurp3kki3C86FwMaw86Cf6Er30bFv6Hb7jxh326Fwra3kM36FxbKz7tMrrg3nra3kM36FxbFvbhw7696C330ehBf696Chw86Ba6B13064w76Bh6u30HlAj6Cbxe32w86B36D130i0HLtALq6FjxLk32w86Cb6Fj30iL51G96CgGG36B7KFvHdAb69w76B76930HdAb6qw76B76q30H7A56Eu80pE8H6A465bhr63x656q263z3065KDhHBhABe6DlrB83brB137wc69r63765b631rj3tbmrd3kr73B565bgbibf7wMuMiblwer7376Dlbg6Bd30w86Eu6C3307xMvMjblwfr83b6DlbHd6Bd30w86Eu6C330efMdfE5w86Eu6Fy30641Eq6BvGEk6FzKEcHfAd6G0w86Fz6Bl30H6A46980pCuH6A465bhr73x656G0x73Bt65b6KC17ByxBv3E7wd69r73765bBe31rBa3dMlMe65b6w86Fz6L030bl6I7rj3tbmrd3kr73B565bibgeoBm69r83Bu6G0b6w86Ba6B13064HKdAKa6EvxK432w86Cb6Ev30iJp1F56CgGEz6B7KErHdAb69w76B76930HdAb6qw76B76q30H7A56G180pD4H6A465bhr63x656q263z3065KCdHBhABe6DlrB83brB137wc69r63765b631rj3tbmrd3kr73B565bgbibf7rMpMd6Dlw86L16L230w86G16C330efMdfE5w86G16Fy30641Ee6BvGE86G2KE0HfAd6G3w86G26Bl30H6A46980pCpH6A465bhr73x656G3263z3065KBx7BuxBr3E7wc69r63765b631rB73dri3bMc65w86G26Ew30bfrj3tbmrd3kr73B565bgbiehBf696G3w86Ba6B13064HDoADl6CexDf32w86Cb6Ce30iD01Br6CgGBl6B7KBdlBaKrepMnMiMd6B7w86Ev6Cg306L36L4Df6BxKa58B6fL56L6641B36BvGy6I8KrepMnMbM66I86I96L7w86Ev6Bv3064HT0ASx6CixSr32w86B46Ci30MSciS01Bn6CcGBhKBc7rxp32w9C2636D230Baw86Ba6B1307hxf32w9C2636Ia30bh641D56DsGCz6B8KCrvB8re3Biq63E66B8fG4Ko7mxk326B8Md6B8w86Ce6Bv30647nMl6B8wgw9C2636D2306Dp307pxn3Btw9C2636Ia30w76B86q30641Kf6D3GK96IbKK1HgAe6B8w9C2636D230HeAc6G5w76B86930HeAc6G6w76B86q30HgAe6B0w9C2636B030HeAc6Dtr73k6B0bgHgAe6D4r93Bu6G66DtvCa6IbKo7mxk326D4Md6D4w86Cf6I430KBe7BbxB8326D4MB0rm3tr73n6D4bhw9C2636G730bhw86Cf6L830HfAd6Dur83k6D46B0HtAr6G8Mmr73k6Dubg6G6w86Cf6L930vCv6DuKCnpBdH6A46jbhr73x6j6Dux83Bt6j6B0Kk7iMg6G56jw9C2636Ic30HmAk6IdMfbh6Duw86G56Ie307hxf3G9w76B86q306G864eiBg6Id6G8w86Ba6B130641Ca6BsGC4KBzHsAq6BsMlC263wfw86Bh6Bs306C4307yxw32w86Bs6D230Miwgw9C2636D2306Bs30e36Bs64156G7bhw76Bh6u30HMdAMa6IfxM432w86B46If30MLpiLd1d68M9w76Bh6u301Bs6B1GBm68KBf7yxw32w8C2636830Mi68wew8C26368306u307dMbw9C2636Cc30641Bf6CcGB9KB47nMlC263wfw86Ci6Cc306C4307dMbw9C2636Ga30641Bh6LaGBb6DvKB37gMe6Dvw9C2636Ds307dMbw9C2636D330e4C263641Bu6D5GBo6DvKBgvp6DvKi7gMe6Dvw9C2636Ds3064HiAg6HfMbw9C2636Ex30e36Hf641e6B0r93BubJybCp1Bl6GbGBf6EyKB7eB4GB16C568KseqMo6C5wjBc68w86Ey6B1306D53064641Bx6LbGBr6EyKBjeBgGBd6C56oKB3eB0My6C5wtBm6Ey6owfw86D66Lc306B1306D5306464w76Ci6u30HlAj6D6xe32w86B36Gc30i0e36B3647BIfMBIbGBI7KBI1H8A66B36BrHfAd6B4w86B36Do30HfAd6Baw86B46Ba30HfAd6Cbw86B36D130HYbAY86D7xY232w86Cb6D730iXn1Pe6CgGP86B7KP0HdAb69w76B76930HdAb6qw76B76q30HgAe6Csw9C2636Gd307cMaw86B76Fu30H7A56Dw80pKhH6A465bhr63x656qx83Bt65bBeKJoHBhABe6IgrB83brB137wc69r63765b631rj3tbmrd3kr73B565bgbibfHBtABq6IhrBk3brBd37wi69rc37r63e65bab631rp3tbmrj3krd3B5r63e65babgbibfHBtABq6IirBk3brBd37wi69rc37r63e65b6b631rp3tbmrj3krd3B5r63e65b6bgbibfHyAw6Ijrr3nrk3nr73d6Igblr73d6Ihbi6IipD9H7A56C6bhky3Bgr73x6C6bgrk3xre3e65r83k6C6bLd6q273z306C6KBo7BlMBiMB5rt3brm376Ijrf3kbDhr83tbBe6C6bJvw86Cs6Ge30w86Dw6C330HkAi6D8MdbEbw86Cs6Ge30vBb6D8KB3OB0rf3B5w86Dw6Bl30bgKh7fMd6D8w86Dw6C33064efMdfE5w86Dw6Fy30641Hv6BvGHp6CtKHhHfAd6Dxw86Ct6Bl30HgAe6Csw9C2636Gd30HgAe6Cjw9C2636Ik30vD2q63Bc6CjKCp7oxm326Cjxf32w9C2636Ik3080pBwH7A56C6bhrf3x6C6w86Cs6Bl30273z306C6Kv7txr32wk6CjMd6C6w86Cs6Ew30316C664HkAi6D8MdbEbw86Cs6Ge30vBq6D8KBiHkAi6GfMd6D8w86Ct6El30vurc3H96Gfq43tbaKc7ax8326Dx6Gf6464eeMc6Ct6Dx6Cj6Il64166GdfLejHv6Ct6Dx6CjKHgH6A46980H7A56ChbhpGdH6A465bhr73x656Dx263z3065KFlvFir73B565bgKF4HBhABe6ImrB83dwp6CjMir63t65baw86Ct6Ew3031rd3kr73B565bgb6HBiABf6InrB937wj6CjMc65w86Ct6Ew3031rk3tbDhrd3kr73B565bgb67BlxBi3E7wd69r7376Chb631ry3dr83n6Im6Inrk3tbmre3kr83B56Chbgbi79273z306Ch64ehMf696Chw86Ba6B9306Il647EUvkEUr3C8wfw86Br6Do306Cu30MEU3GETz6CyKETqH8A66B36BrHfAd6B4w86B36Do30HfAd6Bhw86B46Bh30HfAd6Baw86B46Ba30HfAd6Ciw86B46Ci30HfAd6Cbw86B36D130HfAd6Cew86Cb6Ce30HfAd6D7w86Cb6D730HfAd6D6w86B36Gc30HfAd6Ggw86D66Gg30HRvARs6CuxRm32w86B46Cu30MR7iQv1d68M9w76Bh6u301B86EzGB26o68KuesMqw9C2636F0306o68w9C2636B930641B86F1GB26o68KuesMqw9C2636Io306o68w9C2636B930641D06B1GCu6Ip6o68KCi7yxw32w8C2636830Mi68wew8C26368306u307ixg32w9C2636Gh306Ip7hxf32w9C2636Gi306o7dMbw9C2636Cc30641Bf6CcGB9KB47nMlC263wfw86Ci6Cc306C4307dMbw9C2636Ga30641Ba6LfGB46DyKx7gMe6Dyw9C2636Ds30edMbw9C2636D330641Bu6D5GBo6DyKBgvp6DyKi7gMe6Dyw9C2636Ds3064HiAg6IqMbw9C2636Ex30e36Iq641e6Bbr93BubDjbCp1e6D9r93BubDjbCp156F0ba156Iob61Em6GbMEgGEdKE8jB26oKvvtrd3Biq53E66ofG4K5e36GjK5e36Cv6GkeD0GCx6sKCqeCniCk1B86DaGB26C56o68KrepMn6s6C56o68wcM56o6Gk6Da30641B66DzGB06p6o68KqeoMm6s6p6o68wcM56o6Gk6Dz30646464w76Ci6u30HCnACk6IrxCe32w86B46Ir30MBziBn1Bd6ExGB7KB2HvAt6DbMoqb3Bcq63BcfGlw9C2636D330e36Db64156B0baw76Cu6u30HlAj6Isxe32w86B36Bw30i0HEwAEt6GmxEn32w86B46Gm30ME8iDw1B36EzGy6s6vKqeoMm6s6vwgw9C2636It306B930641B36F1Gy6s6vKqeoMm6s6vwgw9C2636Iu306B930641Bh6B1GBb6s6vKB27hxf32w9C2636Gn306s7hxf32w9C2636Go306v64w76Bh6u30HP5AP26C2xOw32w86Is6C230MOhGOeKO9HgAe6C2M9w76Gm6u307EjxEg32w86C26It30ME1iDp1Dm6GpGDg696jKD7HfAd6sw9C2636Gn30HeAc6B0w76s6B0307nMlC263696j6B0w86Gq6C4307fMd696jw76s6Iv307B1xz32w9C2636Gr30Mk6jr73e6j6B0w7696Cq3064w76C26u307EsxEp32w86C26Iu30MEaiDy1Dv6GpGDp696jKDgHfAd6sw9C2636Gn30HeAc6B0w76s6B030HrAp6IwMk6jr73e6j6B0w7696Cq307fMd696jw76s6Ix307nMlC263696j6B0w86Gq6C4307ixg32w9C2636Gr306Iw64w76C26u30jE2696j6B0KDpHfAd6vw9C2636Go30vBh6vKtH7A56Gs6v7ixg32w9C2636Go306CyKiHgAe6Gsw9C2636Gr30pBlH6A465bhr73x656B0263z3065Ku7sxq3Ffwc69r63e6j6531w76Gs65316Gqe36C264HlAj6Iyxe32w86B36Eg30i0HJ4AJ16F2xIv32w86Iy6F230iIg1Fz6EgGFt6B86B0KFiHeAc6Dtr73k6B0bgHtAr6Cdrm3t6Dtrf3B5w76B86q306DtHBdABa6IzrB43nrx3nrk3nr73d6Cdbmr73d6Cdblr73d6Cdbi6CdH7A56Gt80pB9H6A465bhr73x656Cdx73Bt65bgKh7fMd6Izw86Gt6C330HnAl6C7Mg6Gt6Cdw86Ba6B9307fMd6C7w86B86Dp30641Cb6J0GC56B8KBxHBbAB86CdrB23bwww76B86930rj37rd3tw76B86q30bab631bf7hxf3G9w76B86q306Cd64HSwASt6DcxSn32w86B46Dc30MS8iRw1B168Mxig166Bw6C2166C76F2wdw76Cu68306u301Jl6CcGJfKJa7nMlC263wfw86Cu6Cc306C430HeAc68w8C2636830HcAa6vw6686v30HeAc6Bww7686Bw30vCdrp3Biw9C2636Gh30w9C2636F030KhHfAd6E0w86Bw6Ez30KB0HfAd6E0w86Bw6F1307hxf32w9C2636G730bavEskB43Bgw9C2636Dd30ro3Biwgw9C2636Dd306J1306E0KB77B4MB1C263kd3Bg6vw66v6930wgw9C2636Dd306B130KC87BexBb32w9C2636Dd30Mw6BwC263kd3Bg6vw66v6930w86E06C4307pxn32wgw9C2636Dd306J1306E0641B36IcGy696jKq7oMm696jwgw9C2636Dd306Gp30641Ff6ExGF9KF4HmAk6C7wfw8C26368306C730vE8rp3Biw9C2636Gh30w9C2636F030KBx7yMww9C2636D230w9C2636B030w86C76Eg30HvAt6DbMoqb3Bcq63BcfGlw9C2636D330KBeHvAt6DbMoqb3Bcq63BcfGlw9C2636D3307fMd6Dbw86C76J030e36Db641e6B0r93BubDjbCpw76Cu6u30HDaAD76E1xD132w86B46E130MCmiCa1u6B1Gp6E2Ki7gMe6E2w9C2636Em30641Bb6BdGB56F3KyewMuC263wokh3C86F3w9C2636F3306Cg3064w76Bh6u30HlAj6J2xe32w86B36Cw30i0HKfAKc6J3xK632w86J26J430iJr1Dt6CgGDn6E2KDfHdAb6pw76E26p30HfAd6Bfw86E26Bf30vBz6BfKBiHBfABc6B7MB66pwB1Mu6BfwpMi86bJ5bJ6w86Ba6B9306Dp306Dp30K9H7A56B76pefMd6D7w86B76Bd30641Fs6BvGFm6J7KFeHjAh6pMd6J7w86D76Bv30HdAb6E3w66p6930vD7kB13Bgrf3Biw76E3bh31bJ5rf3Biw76E3ba31bJ6KByHxAv6BfMqMeb6bgw86E36Cq30w86Ba6B9307gMebhbgw86E36Ie307fxd3G9w66p6q30bl64H8A66Bf6CyesMqie146p6p166Bf6Bfw86E16B93064HN4AN16CvxMv32w86B46Cv30MMgiM41n68Mji8166Cw6J3w76Bh6u301G06DaGFu6s6C56o68KFg7qxo3268Mi68wew8C26368306u30HkAi6GuMd6o68w76s6Ez30HjAh6pMd6C5w86Gu6D530HeAc6F4w76Gu6830eCyMCviCi146p6p146o6o1b6vw76F46v30156Lg6s1d6Bww86F46Bw301d6C7w86F46C7301c6B0w76s6B0301c6F3w7686Cw30w86E16B930641Dg6DzGDa6s6p6o68KCx7qxo3268Mi68wew8C26368306u307uxs326pMm6pw7686Cw30w9C2636Gv30HB1Az6F5Muw66p6p30wkMd6o68w76s6F1306D530e36F5641Bq6GvGBk6p6CwKBavB7rd3Biq53E66pfG4KkeiMg6pC263w86Cw6Bv30K4e26p64w76Bh6u30HlAj6J8xe32w86B36F630i0HH6AH36J9xGx32w86J86J430iGi1Gf6GwGG96De6Bb6D96BfKFsvB7q63Bc6BfKv7txr326BfMkr83BubEbbiw86Ba6Er3064HBeABb6oMB66De6BfwyMrif1d6Bbr83e6Bb6D9w86Gg6B9306Lh30HBbAB86vMB3Mi6Bbwdw66o69306Cq30r73k6D9bgw86Ba6B9307lxj32w66o6q30r73k6BbbgeyMwik146o6o146v6v166Bf6Bfw86E16B93064HN8AN56GjxMz32w86B46Gj30MMkiM81t68Mpi8166F66J9wdw76Cv68306u301F96DaGF36s6C56De68KEo7qxo3268Mi68wew8C26368306u30HBaAB76CxMB16Dew76s6Bb30w76s6D930wew7686F6306Gw307lxj32w6686v30w76Cx6v30HB9AB66pMB1C2636s6C5w76Cx6o3068wfw86Cv6Da306C4307eMc6Cxw76p6Em30e26p641Fy6DzGFs6s6p6De68KFe7qxo3268Mi68wew8C26368306u307uxs326pMm6pw7686Cw30w9C2636Gv30HBjABg6CxMBa6Dew76s6Bb30w76s6D930w76p6Bf30wew7686F6306Gw307lxj32w6686v30w76Cx6v30HB9AB66F5MB0C2636s6pw76Cx6o3068wfw86Cv6Dz306C430e36F564w76Cv6u30647EBvMEBrGEBnKEBhH8A66B36BrHfAd6B4w86B36Do30HfAd6Dcw86B46Dc30HfAd6D6w86B36Gc30H6A46r80H7A56Gx80H7A56Ck80H7A56Cl80H7A56Cm80H7A56Cn80H7A56F780H7A56F880H7A56F980H7A56Fa807WxMWuGWrKWmH7A56Bj80pCpH6A465bhr73x65bFi263z3065KBxvBur73x65bDjKn7lxj32w76Bj6531r63d65baKu7sxq32w76Bj6531rd36r63d65babJxH7A56BobhH7A56C9bhpT0H6A465bhr73x65bFi263z3065KS8HBsABp6BprBj36rB536rr36re366C9r73d6C9bar73d6C9b6r83d6C9bBer73d6C9bg7B0xy326Bprr36rk36r7376Bpbir73b6BpbfbJw7gxe32w76r6Bo316Bp7hxf32w86Gx6Bp316BoHfAd6Diw86Bj6Bo31HfAd6Fgw86Bj6Di31HfAd6Fhw86Bj6Fg31HzAx6crt36rf3kw86Bj6Bp31bHer83k6BpbJa7yxw32w86Ck6Bo31ri3nr63d6cbmr6376cbi7yxw32w86Cl6Bo31ri3nr63d6cblr6376cbl7yxw32w86Cm6Bo31ri3nr63d6cbir6376cbm7gxe32w86Cn6Bo316cHBnABk6crBf36rB036rm36r83k6FhbLir83k6FgbLjr83k6DibHer83k6BobJa7yxw32w86F76Bp31ri3nr63d6cbmr6376cbi7yxw32w86F86Bp31ri3nr63d6cblr6376cbl7yxw32w86F96Bp31ri3nr63d6cbir6376cbm7gxe32w86Fa6Bp316cvD0q63Bc6BoKi7gxe326Box7326C9baKC57BbxB8326BorB0366Diwt6Bjwm6Bjwf6Bjr8366Fh6Di3131317pxn3Ff6C9wf6Bjw86Bj6C9313164HyAw6Jb8rbhbab6bgbiblbCpbEbbDjbJtbJuHCYcACY86DkxCY132w86D66Dk30MCXliCX81BBt6GaGBBmKBBgvBgkB53Bgw9C2636Gy30rp3Haw9C2636Jc30w9C2636Gi30K4e26464HuAs6oxo32w9C2636Jc30w9C2636Gi30HdAb6Jdw66o6930HkAi6Bbrd3Buw66o6q30bgHuAs6Fbxn32w9C2636Gy30r83e6BbbDhHkAi6Fcrd3kr73e6FbbabgHmAk6B6xf32w9C2636Je3080pNaH6A46wbhr73x6w6Fc263z306wKMivMfr73x6w6BbKo7mxk32w76B66w31w76Jd6w31KLdHjAh6cwd6B6r63t6wba31vJoqd3Bcr83B56w6BbKEy7qxo326cri3nr63d6cbir6376cbm7D0xCx326crCq3nrC73nrBc3nri3dwc6rr6376cbm31bmro3dwi6rrc3br6376cblbf31blro3dwi6rrc3br6376cbibf31biwc6rr63b6cbf317B0xy3Ff6crr3dwl6Jbre3nr83Bu6w6Bbbh31bmvE5kv3Bgr93Df6BbbDhrf3Bir83B56w6BbbgKD37D0xCx326crCq3nrC73nrBc3nri3dwc6rr6376cbm31bmro3dwi6rrc3br6376cblbf31blro3dwi6rrc3br6376cbibf31biwc6rr63b6cbf31647zxx32w76B66w31rk36we6B6r73t6w6Bb316cHmAk6Gzxf32w9C2636Jf3080pHqH7A56Cobhr83x6Co6Fc273z306CoKGvHeAc6wr83t6Fc6CovBer83B56CobgKfHdAb6cw76B66w31KlHjAh6cwd6B6r63t6wbg31vEvkl3C8r73x6Cobgr73Jk6wbgKi7gxe32w86Gz6Co316cKDl7DixDf32w86Gz6Co31rD036rCa36rBe36wj6F7wc6rr6376cbm3131wp6F8wi6rrc3br6376cblbf3131wp6F9wi6rrc3br6376cbibf3131wj6Fawc6rr63b6cbf3131641Br6IvGBl6B26jKBb7B8MB56B26jw9C2636Je306Ck6Cl6Cm6Cn6rw9C2636H030641Gc6IxGG66B26jKFwHjAh6cwd6B2r63e6jba317zxx32wd6B2r63e6jba31we6B2r73e6jbBe317mxk32we6B2r73e6jbBe316c7B9MB66B26jw9C2636Jf306F76F86F96Fa6Gxw9C2636H030HjAh6cwd6B2r63e6jba317zxx32wd6B2r63e6jba31we6B2r73e6jbBe317mxk32we6B2r73e6jbBe316c641BMi6H0GBMb6B26j6B66Ck6Cl6Cm6Cn6rKBLjHgAe6Fbw9C2636Gy30HrAp6Byrk36w76B26j31w76B6bh31HxAv6Bzrq36wd6B2r63e6jba31w76B6ba31HxAv6C0rq36wd6B2r63e6jb631w76B6b631HzAx6C1rs36we6B2r73e6jbBe31w86B6bBe31H6A46wbgpPjH7A56H1bar83x6H16Fb273z306H1KOoHD9AD66EcrD036rCg36rBv36rB436we6Ckr7376Bybm31wk6Clrd3br7376Bzblbf31wk6Cmrd3br7376C0bibf31we6Cnr73b6C1bf31wd6B6263z306w31HD9AD66EdrD036rCg36rBv36rB436we6Ckr7376Bzbm31wk6Clrd3br7376C0blbf31wk6Cmrd3br7376C1bibf31we6Cnr73b6Bybf31wd6B6263z306w31HD9AD66EerD036rCg36rBv36rB436we6Ckr7376C0bm31wk6Clrd3br7376C1blbf31wk6Cmrd3br7376Bybibf31we6Cnr73b6Bzbf31wd6B6263z306w31HD9AD66EfrD036rCg36rBv36rB436we6Ckr7376C1bm31wk6Clrd3br7376Byblbf31wk6Cmrd3br7376Bzbibf31we6Cnr73b6C0bf31wd6B6263z306w317ax8326By6Ec7ax8326Bz6Ed7ax8326C06Ee7ax8326C16EfHDnADk6EcrDe36rCu3nrCa3nrBe3nrj3dwd6rr7376Bybm31bmrp3dwj6rrd3br7376Bzblbf31blrp3dwj6rrd3br7376C0bibf31biwd6rr73b6C1bf31wd6B6263z306w31HDnADk6EdrDe36rCu3nrCa3nrBe3nrj3dwd6rr7376Bzbm31bmrp3dwj6rrd3br7376C0blbf31blrp3dwj6rrd3br7376C1bibf31biwd6rr73b6Bybf31wd6B6263z306w31HDnADk6EerDe36rCu3nrCa3nrBe3nrj3dwd6rr7376C0bm31bmrp3dwj6rrd3br7376C1blbf31blrp3dwj6rrd3br7376Bybibf31biwd6rr73b6Bzbf31wd6B6263z306w31HDnADk6EfrDe36rCu3nrCa3nrBe3nrj3dwd6rr7376C1bm31bmrp3dwj6rrd3br7376Byblbf31blrp3dwj6rrd3br7376Bzbibf31biwd6rr73b6C0bf31wd6B6263z306w317gxe32w76B26j316Ec7mxk32wd6B2r63e6jba316Ed7mxk32wd6B2r63e6jb6316Ee7nxl32we6B2r73e6jbBe316Ef641e6Bbr93BubFibCpw76Dc6u307txr32w86B36Dk30Md6Dkw86Dc6Gb30647GjxGg32w76y6Jg30GG26Eh6H2KFrHxAv6oMr6H2wmwfw86Br6D1306Ce306Bv30HxAv6vMr6H2wmwfw86Br6D1306Ce306Bv30HyAw6EhMr6Ehwmwfw86Br6D1306Ce306Bv30HCmACj6pMCewCbMC36Eh6oiBe1k6Bwwfw86Br6Bw306C2301k6C7wfw86Br6Eg306F230146v6vwfw86Br6Dk306Da306Bd30e26p64H7A56Bn807D4MD1fLkGCm6BxKCe7B8MB5rt3erf3ew86Bx6H330fLlw86Bx6H430w86Bn6C330vB0rg3Dfw86Bn6Bl30bDgKe7cMaw86Bn6H5306464w76y6H6307D4MD1fLmGCm6BxKCe7B8MB5rt3erf3ew86Bx6H330fBjw86Bx6H430w86Bn6C330vB0rg3Dfw86Bn6Bl30bDgKe7cMaw86Bn6H5306464w76y6H6307D4MD1fLnGCm6BxKCe7B8MB5rt3erf3ew86Bx6H330fHcw86Bx6H430w86Bn6C330vB0rg3Dfw86Bn6Bl30bDgKe7cMaw86Bn6H5306464w76y6H630HmAk6H7wfw86Jh6Cz306Ji307P8xP532wfw86Jh6Cz306Ji30GOjKOevObMjw76Bqba31w8FLo6Fk30KN0H8A66E4dJjHwAu6FdwpMjFLpwew76Bqba316Hy30ba31vKvr83Bi6FdfaKc7ax8326E4dFevK4r93Bi6FdfDgKc7ax8326E4dFeKJcpCeH6A465bhre3x65w86Bn6Bl30263z3065KBfvBcru3E9MjfHcwew76Bn65316El30q43tbaKc7ax8326E4dFe64vBjru3E9Mmq43tbawew76Bqba316Cq30fE8Kj7hxf3Btw76Bqba31fE864HtAr6cMnri3BuMaw86K16Lq30bJz6I77wxu3Btw76Bqba31rg3efLrM9w76c6Bd30HBdABa6cMB5bhblwzrs3eMbblw76c6Bd30Mbblw76c6Bd306Cq307BxxBu3Btw76Bqba31rBf3efLsMB7MB1ro3er83e6FdfLtMaw86Bn6Bd306cw76y6Jg306I9vs6E4KlejMhC2636Bqw86H76En3064KlejMhC2636Bqw86H76En30646478q63E86Bka0")

好,我看不懂,我看你当中的值可以吧!
在这里插入图片描述
观察到传入的参数中有 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)
猿人学web端爬虫攻防大赛赛题解析_第十八题:jsvmp-洞察先机 jsvmp-洞察先机一、前言二、解析过程分析三、代码实现四、参考文献 一、前言 又是很长时间没更博客了,今天终于花时间把最后一题给解决了,至此猿人学赛题的学习基本告一段落,总的来说大部分题对我来说都很有挑战性,而每次解题过程中也会学到点新知识。目前的达到的水准是即使有些完全没思路的加密,看下其他大神分享的解题过程,基本上自己也能摸索着还原出来,虽然距离大佬们还有不小的差距,但相比起挑战习题最初的我来说,还算是有一定进步了。总之也算是完成了猿人学赛题的挑战目标,嗯,废话不多说,进入正题。 二、解析过程分析 首 阅读详情

相关推荐

猿人学web端爬虫攻防大赛赛题解析_第一题:源码乱码

第一题:js 混淆 - 源码乱码1、前言2、题目理解3、逆向(踩坑)分析过程3.1、初步分析3.2、当头一棒3.3、循序渐进3.4、大功告成4、结语 1、前言 接触网络爬虫已经有两三年了,但其实一直没系统的学习过,都是在偶尔有爬数据需求时在网上找教程,应对一些普通的静态网页或者是没有加密参数的ajax请求时没有问题,但现在各类网站越发注重数据保护,制定了很多反爬虫措施,以至于我现有的那点技术储备面对各种花式反扒虫显得捉襟见肘,痛定思痛,还是要认真系统的学习下相关知识。恰巧最近关注的爬虫大佬王平办了个爬虫攻防

仙路尽头谁为峰 1万+

【困难】 猿人学web第一届 第18题 jsvmp 洞察先机

第4页:[‘1004m209’, ‘1004m208’, ‘1004m207’, ‘1004d208’, ‘1004u209’]第5页:[‘1052m197’, ‘1052m199’, ‘1052m200’, ‘1051d201’, ‘1051u203’]第2页:[‘905m206’, ‘905m207’, ‘905m208’, ‘905d209’, ‘905u211’]第3页:[‘950m203’, ‘950m204’, ‘950m206’, ‘950d208’, ‘950u210’]

m0_69843492的博客 1411

JS逆向系列之猿人学爬虫第18题-jsvmp - 洞察先机

JS逆向系列之猿人学爬虫第18题-jsvmp - 洞察先机

自成背后的博客 8558

ASP2.0-130道ASP.NET面试题

1. 简述 private、 protected、 public、 internal 修饰符的访问权限。答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。2 .列举ASP.NET 页面之间传递值的几种方式。

MasterFT的专栏 2193

猿人学18题——js加密进阶

猿人学18题完整版独家代码,绝对不会让你失望

Vivado FFT IP核避坑指南:从Matlab数据生成到FPGA验证的完整流程

本文详细解析了Vivado FFT IP核从Matlab数据生成到FPGA验证的完整流程,重点解决跨平台数据一致性、IP核配置陷阱和验证方法论等核心问题。通过实战案例和避坑指南,帮助工程师高效实现FFT运算的硬件验证,确保结果与Matlab的误差控制在0.3%以内。

weixin_42543046的博客 395

【猿人学WEB题目专解】猿人学第2题

第二题js 混淆 动态cookie 1 - 猿人学

user_from_future的博客 9939

添加odbc数据源时的一些问题和解决办法

pl/sql

Mr_Syh的博客 9641

【猿人学WEB题目专解】专栏通知

🧡作者简介:大家好我是。

user_from_future的博客 9129

Unity与IOS交互,调用IOS系统相机和相册

与IOS的交互,在步骤上要比android简单许多,不会产生因为系统版本,或者包名导致的许多问题。过程中最头疼的一个问题是IOS回调Unity,很简单的一个问题,搞了半天。

Hello Mingo 1万+

网络安全 —— 实验(基于华为eNSP模拟器)

8. 实验八 —— 通过路由的远程管理(基于实验七的基础配置)8. 实验八 —— 通过路由的远程管理(基于实验七的基础配置)6. 实验六 —— 交换机的远程控制(直接控制和间接控制)6. 实验六 —— 交换机的远程控制(直接控制和间接控制)5. 实验五 —— 将交换机作为PC端通过交换机相连。5. 实验五 —— 将交换机作为PC端通过交换机相连。4. 实验四 —— 两个PC机通过两台交换机相连。2. 实验二 —— 两个PC机通过交换机相连。2. 实验二 —— 两个PC机通过交换机相连。

这个家伙看起来很懒,只想把你留下来哦 9337

【猿人学WEB题目专解】猿人学第16题

webpack初体验

user_from_future的博客 499

4、文化遗产数字记录的伦理框架构建

本文探讨了在数字技术快速发展的背景下,如何构建一个伦理框架以指导文化遗产的数字记录工作。文章分析了遗产保护的重要性以及当前面临的挑战,包括气候变化、全球化和技术变革等。同时,结合国际古迹遗址理事会(ICOMOS)的伦理原则和加拿大遗产专业人员协会(CAHP)的行为准则,提出了六个核心伦理类别,并讨论了其在实践中的应用。文章强调,伦理框架不仅有助于提高数字记录的质量和可持续性,还能促进专家合作、保护社区利益并确保数字遗产的长期可访问性。未来需要持续完善这一框架,以应对不断变化的技术和社会环境带来的新挑战。

7h6j5k4l3的博客 95

猿人学第一届Web端攻防大赛第八题逆向过程-图文点选验证码反爬

图文点选验证码反爬逆向实战过程,图片处理,训练模型,爬虫业务代码编写

鄢多鱼的博客 2132

可维护的 SAP UI5 Theming 策略:从 CSS 级联与特性选择器到 UI Theme Designer 的工程化落地

摘要:SAP UI5主题化是一个涉及CSS级联、选择器特异性和主题参数的系统工程,与应用逻辑解耦以实现品牌化和无障碍适配。轻量级调整优先使用附加CSS,重大改动才考虑创建新主题。样式冲突需通过特异性原则解决,避免滥用!important。动态添加样式应使用addStyleClass而非直接操作DOM。主题可通过bootstrap参数、URL或运行时API设置,企业级主题推荐使用UI Theme Designer。自定义内容应消费主题变量以实现一致性,避免直接修改控件内部结构或内联样式。工程化落地需规范分层和

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 307

关于DEJA_VU3D - Cesium功能集专栏说明

专栏主要目的是对工作中基于Cesium实现过的功能进行整合,暂时打算一周2-3更的样子来更新,每一篇都会奉上完整源代码(尽可能把代码简洁一些)。功能实现大多数是自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小130个左右的功能,后续也会不断的更新。..........................................

总得学点什么的博客 2万+

猿人学第二题,手撕OB混淆给你看(Step1-开篇)

基于AST 手撕OB混淆猿人学题目2

小玉的小本本 3823

保姆级教程:ABAP 通过 HTTP POST 调用 OData 服务创建业务数据的具体例子

笔者之前的文章发布之后,有朋友在评论区留言,询问 ABAP 除了 Web Service 之外,是否也支持 HTTP 呢?ABAP 这么强大的语言,支持 HTTP 当然不在话下。网上有很多在 ABAP 系统基于 CL_HTTP_CLIENT 工具类,通过 HTTP 协议和第三方系统交互的代码例子。本文介绍笔者项目中一个实际例子,实现的是在 ABAP 系统 A 通过 HTTP 调用 OData 服务,在 ABAP 系统 B 创建业务数据的需求。下面我们按照这个套路来一步步实现。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 697

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

但是经过上面的 Hook 重写之后 Function.prototype.constructor.prototype 就不是一个方法了,会变成一个对象。_yrxCxm[‘f’ + ‘g’ + ‘a’ + ‘E’] 的值和 _yrxVhD() 方法中的值一致。_yrxCxm[‘f’ + ‘g’ + ‘a’ + ‘E’] 的值和 _yrxVhD() 方法中的值一致。方法中对应的时间戳是动态变化的,包括后面的全局变量 _yrxCxm 的值也是动态变化的。

m0_69843492的博客 1770

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

猿人学Web端爬虫攻防大赛第十题 与某数ast+jsdom方法

猿人学Web端爬虫攻防大赛第十题 与某数ast+jsdom方法 参考文章: 1.猿人学爬虫攻防赛 第10题 2.某数和某5秒-反混淆动态注入调试的一种方案 样品网址:https://match.yuanrenxue.com/match/10 打开首页后直接就有5处混淆,第一处是某数套 jsjiami.com.v6,然后后面4处为obfuscator 首先还原这一段jsjiamiv6的混淆,还原后的结果如下 let yuanrenxue_36 = ''; var yuanrenxue_59 = 968; f

zjq592767809的博客 2654

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【非常简单】 猿人学web第一届 第12题 入门级js

这一题非常简单,只需要找到数据接口,请求参数 m生成的逻辑即可查看数据接口 https://match.yuanrenxue.cn/api/match/12查看请求对应的堆栈中的 requests 栈list 为对应的请求参数list 是由 btoa 函数传入 ‘yuanrenxue’ + 对应的页码生成的btoa 在浏览器中的作用是: 将传入的字符串进行 base64 编码对应的 python 代码结果与浏览器一致。

m0_69843492的博客 494

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【JavaScript 逆向】猿人学 web 第十八题:jsvmp,洞察先机

猿人学练习平台 web 比赛第十八题:jsvmp,hook,插桩,AES 加密

Yy_Rose的博客 3826

WASM进阶-猿人学第二十题

加密步骤其实只有这一步,len0 就是 content 的长度,下面几步是从内存中获取值,进入到 wasm 内部查看 sign函数。文件地址:https://match.yuanrenxue.com/api/match20/wasm。此时发现 content 长度发生变化,看一下长度,大概是经过了md5加密,那就先来看一下明文是啥?就是在 content 加了一段盐值,经过多次调试发现,盐值不变。一直往下滑,直到看到 md5 字样,然后再次进入函数内部。没办法,只能硬着头皮去肝wasm源码了,先上一段。

qq_40734108的博客 1116

AI辅助JS逆向:猿人学第18题动态Cookie破解

在爬虫与反爬的攻防博弈中,动态Cookie校验是高频出现的防护机制,通常依赖一段被高度混淆的JavaScript在浏览器环境内计算生成。这类JS往往还会被虚拟化保护,拆分为字节码和解释器,使静态分析成本陡增。而AI辅助逆向提供了一种新思路:利用模型对代码行为的理解能力,快速概括输入输出与主流程,再结合补环境技术,在Node.js中模拟浏览器对象,让混淆代码自行运行生成Cookie。这种方法能显著降低算法还原难度,适用于JS逆向、反爬对抗、数据采集等工程场景。本文以猿人学第18题为例,完整演示如何从抓包定位、

weixin_29327977的博客 207

AST还原实战|猿人学第二届第二题加密参数token纯算分析

本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!欢迎加入知识星球,学习更多AST和爬。

Python3 爬虫实战 1:应对特殊字体,爬取猫眼电影实时排行榜 171

猿人学第一届web端第三题

任务3:抓取下列5页商标的数据,并将出现频率最高的申请号填入答案中。

weixin_44851624的博客 291
上一篇: 【猿人学WEB题目专解】猿人学第20题
下一篇: 【Python学习】Python大版本新增内容精选
user_from_future
博客等级 码龄5年 4066粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值