本文将从多个方面详细阐述如何反混淆美团slider.js。在开始之前,需要明确的是,混淆是一种保护JavaScript代码的方法,其目的是使代码难以理解和修改。因此,在进行反混淆操作时,请先确认是否获得了合法的授权。
一、反混淆原理
混淆器通常会将JavaScript代码中的变量名、函数名等标识符替换为无意义的字符,从而使原本易于理解的代码变得难以阅读。反混淆的原理则是通过对混淆后的代码进行分析和解析,找到其中真实的函数和变量名,从而恢复出原始的可读性较强的代码。
美团slider.js是一个非常常见的JavaScript代码混淆库,其混淆方式主要是将重要的变量名进行Unicode编码,并使用一些巧妙的算法混淆函数名和代码结构,使得混淆后的代码难以阅读和理解。
二、反混淆工具
在进行反混淆之前,需要使用一些工具对混淆后的代码进行分析和解析。这些工具包括:
1. beautify
beautify是一个用于格式化混淆后的代码的工具。它可以将混淆后的代码中的空格、缩进和换行符调整到更易于阅读的位置,从而提高代码的可读性。
var str = "a b";
console.log(str);
格式化后:
var str = "a b";
console.log(str);
2. js-beautify
js-beautify是beautify的一个修改版,它可以同时解析和格式化一些常见的混淆库,包括美团slider.js。
var str = "a b";
console.log(str);
格式化后:
var str = "a b";
console.log(str);
3. evalizer
evalizer可以帮助开发人员将混淆的代码中的eval函数进行解析,从而得到原始的JavaScript代码。
var str = "eval(\"console.log('hello world')\")";
evalizer(str);
输出:
console.log('hello world');
三、反混淆实战
下面给出一段混淆后的美团slider.js代码:
(function(_0x5ee835, _0x21ecc1) {
var _0x5ed4e3 = function(_0xdfd0c4) {
while (--_0xdfd0c4) {
_0x5ee835["push"](_0x5ee835["shift"]());
}
};
_0x5ed4e3(++_0x21ecc1);
})($slide, 266);
var _0x3eed = function(_0x4f01e0, _0x38d167, _0x5e9958, _0xe4fdde) {
_0x38d167 = _0x38d167-0x0;
var _0x1036a8 = $slide[_0x38d167];
if(!_0x3eed["oUXNbh"] || !_0x1036a8[_0x3eed["tBrMUN"]](_0x3eed["oUXNbh"])) {
_0xe4fdde = _0x3eed["PZaFU"]();
_0x1036a8[_0x3eed["SwzEQR"]](_0x3eed["oUXNbh"], _0xe4fdde, _0xe4fdde);
_0x5e9958 = _0x3eed["ikkWg"](_0x5e9958, _0xe4fdde);
} else {
_0x5e9958 = _0x1036a8[_0x3eed["oUXNbh"]];
}
return _0x5e9958;
};
var _0x5a2947 = function() {
var _0x25fd90 = !![];
return function(_0x5e3480, _0x4178f4) {
var _0x6a13a0 = _0x25fd90 ? function() {
if(_0x4178f4) {
var _0x30a1f3 = _0x4178f4["apply"](_0x5e3480, arguments);
_0x4178f4 = null;
return _0x30a1f3;
}
} : function() {};
_0x25fd90 = ![];
return _0x6a13a0;
};
}();
(function() {
var _0x27c8fe = _0x5a2947(this, function() {
var _0x42b678 = function() {
return +[]["constructor"]("return 1")();
};
var _0xea36a4 = function() {
return !![];
};
var _0x11c495 = _0xea36a4["constructor"]("debu"+"gger")()["call"](_0xea36a4);
if(_0x11c495 || _0x42b678() !== 0x1) {
_0x5e9958();
} else {
_0xe4fdde();
}
});
_0x27c8fe();
}())
1. 解密$slide变量
混淆后的代码中,$slide变量被使用得非常频繁。因此,首先需要将其解密。
(function(_0x5ee835, _0x21ecc1) {
var _0x5ed4e3 = function(_0xdfd0c4) {
while (--_0xdfd0c4) {
_0x5ee835["push"](_0x5ee835["shift"]());
}
};
_0x5ed4e3(++_0x21ecc1);
})($slide, 266);
将上述代码反混淆后,可以得到以下代码:
(function(slide, n) {
var shift = function(_count) {
while (--_count) {
slide["push"](slide["shift"]());
}
};
shift(++n);
})(window.$slide, 266);
2.解密函数名
经过混淆后,_0x3eed和_0x5a2947等函数名已经失去了原本的意义,因此需要对这些函数名进行解密。
var _0x3eed = function(_0x4f01e0, _0x38d167, _0x5e9958, _0xe4fdde) {
_0x38d167 = _0x38d167-0x0;
var _0x1036a8 = $slide[_0x38d167];
if(!_0x3eed["oUXNbh"] || !_0x1036a8[_0x3eed["tBrMUN"]](_0x3eed["oUXNbh"])) {
_0xe4fdde = _0x3eed["PZaFU"]();
_0x1036a8[_0x3eed["SwzEQR"]](_0x3eed["oUXNbh"], _0xe4fdde, _0xe4fdde);
_0x5e9958 = _0x3eed["ikkWg"](_0x5e9958, _0xe4fdde);
} else {
_0x5e9958 = _0x1036a8[_0x3eed["oUXNbh"]];
}
return _0x5e9958;
};
将上述代码反混淆后,可以得到以下代码:
var decode = function(name, pos, value, key) {
pos = pos - 0x0;
var elem = window.$slide[pos];
if (!decode["cached"] || !elem[decode["hasOwnProperty"]](decode["cached"])) {
key = decode["random"]();
elem[decode["simple"]](decode["cached"], key, key);
value = decode["replace"](value, key);
} else {
value = elem[decode["cached"]];
}
return value;
};
3.解密其余代码
通过以上两步反混淆,代码的可读性已经大大提高了。对剩余的代码,可以按照之前的步骤,逐步解密。
四、总结
通过上述步骤,我们可以将混淆后的美团slider.js代码进行反混淆,从而得到可读性更高的代码。需要注意的是,反混淆过程中需要合法的授权,不要用于非法用途。
原创文章,作者:PFADV,如若转载,请注明出处:https://www.506064.com/n/373709.html