zoukankan      html  css  js  c++  java
  • 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     }

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

  • 相关阅读:
    浅析区间问题
    关于参加信息竞赛
    路爷爷语录
    CentOS-7安装python虚拟环境
    开发笔记(不定时更新)
    Redis有序集合的权重值选择
    数据缓存(Redis)流程设计--思路
    Flask框架之配置日志信息
    Flask框架之一对多关系模型定义
    Flask框架之多对多关系模型类的定义
  • 原文地址:https://www.cnblogs.com/Jackie-Snow/p/9198466.html
Copyright © 2011-2022 走看看