常见JS混淆器和特征

obfuscator

网址:https://obfuscator.io/
特征:混淆后会多出一个变量,两个函数。

  1. 函数方法名和变量名会替换为16进制数,先定义一个符号数组:
var _0x30bb = ['log', 'Hellox20World!'];
  1. 再定义两个函数,第一个函数用于对符号数组顺序的干扰
(function (_0x38d89d, _0x30bbb2) {
    var _0xae0a32 = function (_0x2e4e9d) {
        while (--_0x2e4e9d) {
            _0x38d89d['push'](_0x38d89d['shift']());
        }
    };
    _0xae0a32(++_0x30bbb2);
}(_0x30bb, 0x153));
  1. 第二个函数用于实际代码解析:
var _0xae0a = function (_0x38d89d, _0x30bbb2) {
    _0x38d89d = _0x38d89d - 0x0;
    var _0xae0a32 = _0x30bb[_0x38d89d];
    return _0xae0a32;
};
  1. 实际代码中的符号被替换为第二个函数:
console[_0xae0a('0x1')](_0xae0a('0x0'));
  1. 源函数和混淆后的样子基本不变,仅对符号做混淆:
// 混淆后原始程序变为:
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

会在原始基础上生成一个对象

参考资料
原文地址:https://www.cnblogs.com/zhuxiaoxi/p/14592281.html