uglifyjs2全局混淆

Posted 莫行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uglifyjs2全局混淆相关的知识,希望对你有一定的参考价值。

    从git克隆uglifyjs2源码后,进入目录:

    npm link

    编译并安装uglifyjs2成功,就可以直接调用uglifyjs命令了。但是在进行全局混淆时出现了问题,虽然指定了文件topvar.json为全局变量的cache文件,还是出现:

    1)全局变量混淆后的名字与局部变量的混淆名冲突;

    2)不同全局变量的混淆名冲突。

    查阅文档并做了一些测试,无奈都未成功。最终翻阅代码并做如下改动:

    1)在scope.js文件中修改SymbolDef.prototype.mangle函数:

1             // 为了避免混淆时TopLevel中的变量名与局部作用域中的变量名冲突, 对于Toplevel的变量增加前后缀双下划线
2             if (this.scope instanceof AST_Toplevel) {
3                 console.log(this.name + "=>" + this.mangled_name);
4                 this.mangled_name = "__" + this.mangled_name + "__";
5             }

对于全局变量的混淆,添加双下划线前后缀,避免冲突。在这修改之后,在计算next_mangled_name时需要过滤掉已经使用过的全局符号。

    2)在函数next_mangled_name函数中增加如下处理:

 

1     while (true) {
2         name = base54(++scope.cname);
3         // 双下划线过滤
4         if (in_use[‘__‘ + name + ‘__‘] || !is_identifier(name) || member(name, options.reserved)) continue;
5         if (!names[name]) break;
6         holes.push(scope.cname);
7     }

如此这般之后,全局变量混淆的问题才算是彻底解决。

以上是关于uglifyjs2全局混淆的主要内容,如果未能解决你的问题,请参考以下文章

append() 在这个代码片段中是如何工作的?与特定变量混淆[重复]

UglifyJS2 删除块或文件末尾的想要的注释

oc代码混淆

C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段

Python 默认参数混淆

gulp 项目构建 代码压缩与混淆