常见JS混淆器和特征
obfuscator
网址:https://obfuscator.io/
特征:混淆后会多出一个变量,两个函数。
- 函数方法名和变量名会替换为16进制数,先定义一个符号数组:
var _0x30bb = ['log', 'Hello\x20World!'];
- 再定义两个函数,第一个函数用于对符号数组顺序的干扰
(function (_0x38d89d, _0x30bbb2) {
var _0xae0a32 = function (_0x2e4e9d) {
while (--_0x2e4e9d) {
_0x38d89d['push'](_0x38d89d['shift']());
}
};
_0xae0a32(++_0x30bbb2);
}(_0x30bb, 0x153));
- 第二个函数用于实际代码解析:
var _0xae0a = function (_0x38d89d, _0x30bbb2) {
_0x38d89d = _0x38d89d - 0x0;
var _0xae0a32 = _0x30bb[_0x38d89d];
return _0xae0a32;
};
- 实际代码中的符号被替换为第二个函数:
console[_0xae0a('0x1')](_0xae0a('0x0'));
- 源函数和混淆后的样子基本不变,仅对符号做混淆:
// 混淆后原始程序变为:
function hi() {
console[_0xae0a('0x1')](_0xae0a('0x0'));
}hi();
// 原始程序
function hi() {
console.log("Hello World!");
}
hi();
YUI Compressor UglifyJS Google Closure Compiler
特征:默认情况,三者会压缩代码,Google Closure Compiler在压缩时会做简单的优化。
UglifyJS的高级模式可以将压缩后的代码进行变量替换,
Google Closure Compiler的高级模式可以将代码精简到最简,类似于编译器优化。
JSDetoxed
会在原始基础上生成一个对象