返回
分享一个有趣的种树小游戏
前端
2023-09-23 16:25:59
记一次有意思的种树比赛
在招聘群里,一位老哥发了一个网址,http://geek.qq.com/tree/。我点进去一看,发现还挺好玩,不得不说这玩意儿还真让人极其上头。
这次种树实际上就是一个类似闯关游戏。种树种到一定数量就会出现新的玩法。当然,我也是个小菜鸡,弄了100w就种不下去了。在我玩的这几关里,需要解密混淆的js。
第一关
第一关很简单,只需要把JS代码还原一下,把混淆的变量名还原成正常的变量名,然后把代码运行一下即可。
var _0x378a = ['split', 'log'];
(function(_0x3880f5, _0x38925d) {
var _0x1c0485 = _0x378a[0],
_0x3b63d4 = _0x378a[1];
while (!![]) {
try {
var _0x178fb4 = parseInt('0x1') * parseInt('0x5') + -parseInt('0x6') + parseInt('0x3') * parseInt('0x7') + parseInt('0x4') * -parseInt('0x3') + -parseInt('0x8') + parseInt('0x9') * parseInt('0x2') + parseInt('0xa') * -parseInt('0x1');
if (_0x178fb4 === _0x38925d) break;
else _0x3880f5['push'](_0x3880f5['shift']());
} catch (_0x5b83d1) {
_0x3880f5['push'](_0x3880f5['shift']());
}
}
}(_0x378a, -parseInt('0x44')));
console[_0x3b63d4](_0x3880f5['join'](','));
第二关
第二关需要用到正则表达式。
var _0x5005 = ['match', 'replace', 'test', 'console', 'log'];
(function(_0x18b668, _0x18cd95) {
var _0x174652 = _0x5005[0],
_0x167215 = _0x5005[1],
_0x294d38 = _0x5005[2],
_0x4ea845 = _0x5005[3],
_0x42a9f8 = _0x5005[4];
while (!![]) {
try {
var _0x37a6bb = -parseInt('0x1d8') + -parseInt('0x1f7') * parseInt('0x1') + -parseInt('0x22b') * -parseInt('0x1') + parseInt('0x1bb') * parseInt('0x1') + -parseInt('0x105') + parseInt('0x161') + -parseInt('0x97') * -parseInt('0x1');
if (_0x37a6bb === _0x18cd95) break;
else _0x18b668['push'](_0x18b668['shift']());
} catch (_0x4bb79f) {
_0x18b668['push'](_0x18b668['shift']());
}
}
}(_0x5005, parseInt('0x1e4')));
if (_0x294d38['call'](/((\d+)(-(\d+))?)|(\D+(\d+)))/, 'asd123-456')) {
_0x4ea845[_0x42a9f8]('存在匹配');
} else {
_0x4ea845[_0x42a9f8]('不存在匹配');
}
第三关
第三关需要把一段字符串进行转义。
var _0x3a96 = ['indexOf', 'charCodeAt', 'length', 'fromCharCode'];
(function(_0x223976, _0x4a4c16) {
var _0x54450b = _0x3a96[0],
_0x1a650b = _0x3a96[1],
_0x1b7f02 = _0x3a96[2],
_0x4b7b20 = _0x3a96[3];
while (!![]) {
try {
var _0x5c5f01 = -parseInt('0x21d') + -parseInt('0x1d2') * parseInt('0x1') + parseInt('0x2f2') * parseInt('0x1') + -parseInt('0x26') * parseInt('0x1') + -parseInt('0x1f4') * -parseInt('0x1') + parseInt('0x188') * parseInt('0x1') + parseInt('0x1de');
if (_0x5c5f01 === _0x4a4c16) break;
else _0x223976['push'](_0x223976['shift']());
} catch (_0x366648) {
_0x223976['push'](_0x223976['shift']());
}
}
}(_0x3a96, parseInt('0x199')));
var _0x3885c0 = '';
for (var _0x554404 = -parseInt('0x1'); _0x554404 < _0x4a4c16[_0x1b7f02]; _0x554404++) {
_0x3885c0 += String[_0x4b7b20](_0x4a4c16[_0x54450b](_0x554404) ^ parseInt('0x32'));
}
console[_0x4b7b20](_0x3885c0);
第四关
第四关需要实现一个简单的斐波那契数列。
var _0x4e5b = [0, 1],
_0x392f = _0x4e5b[0],
_0x37a3 = _0x4e5b[1],
_0x4583 = 2;
while (_0x4583 < parseInt('0xa')) {
var _0x1893 = _0x392f + _0x37a3;
_0x4e5b['push'](_0x1893);
_0x392f = _0x37a3;
_0x37a3 = _0x1893;
_0x4583++;
}
console['log'](_0x4e5b['join'](','));
第五关
第五关需要实现一个简单的冒泡排序。
var _0x2c75 = [parseInt('0x3'), parseInt('0x1'), parseInt('0x2')],
_0x3c0b = _0x2c75[_0x2c75['length'] - parseInt('0x1')],
_0x1767 = parseInt('0x0');
while (_0x1767 < _0x3c0b) {
for (var _0x266e = parseInt('0x0'); _0x266e < _0x2c75[_0x2c75['length'] - parseInt('0x1')]; _0x266e++) {
if (_0x2c75[_0x2