• 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     }

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

  • 相关阅读:
    《构建之法》阅读报告
    教务管理系统类图及数据库E/R图
    设计模式:抽象工厂
    结对项目:四则运算程序测试
    Leetcode笔记之57和为s的连续正数序列
    Leetcode笔记之1103分糖果 II
    Leetcode笔记之199二叉树的右视图
    每日Scrum(9)
    每日Scrum(7)
    每日Scrum(6)
  • 原文地址:https://www.cnblogs.com/Jackie-Snow/p/9198466.html
Copyright © 2020-2023  润新知