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

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

  • 相关阅读:
    linux线程
    linux线程
    c++之堆、栈、数据段、
    fork()、僵死进程和孤儿进程
    linux之管理mysql
    linux之管理apache
    Django 时间与时区设置问题
    Django rest framework:__str__ returned non-string (type NoneType) 真正原因
    Django获取当前页面的URL——小记
    Django中出现:TemplateDoesNotExist at
  • 原文地址:https://www.cnblogs.com/Jackie-Snow/p/9198466.html
Copyright © 2020-2023  润新知