【问题标题】:Closure-compiler: adding prefix to obfuscated variables闭包编译器:为混淆变量添加前缀
【发布时间】:2020-07-10 12:21:58
【问题描述】:

我的目标是为所有混淆变量添加前缀。 例如: 而不是将myVar 混淆为x,它将使用前缀$pre,因此结果将类似于:$prex

我正在使用闭包编译器。在Closure-compiler wiki之后,我使用了rename_variable_prefix,不幸的是没有成功。

代码示例:

const ClosureCompiler = require('google-closure-compiler').jsCompiler;

console.log(ClosureCompiler.CONTRIB_PATH); // absolute path to the contrib folder which contains externs

const closureCompiler = new ClosureCompiler({
  compilation_level: 'ADVANCED',
  rename_variable_prefix: '$pre'
});

const compilerProcess = closureCompiler.run([{
 path: 'file-one.js',
 src: 'function add(node){
          let test = window["test"];
          if (node.hzix == test)return 1;
       }
       add(window["node"]);
       window.add = add;',
 sourceMap: null // optional input source map
}], (exitCode, stdOut, stdErr) => {
  //compilation complete
});

结果代码为:

  {\n"version":3,\n"file":"compiled.js",\n"lineCount":1,\n"mappings":"AAAiGA,MAAAC,IAAA,CAAjGA,QAAY,CAACC,CAAD,CAAM,CAA2B,GAAIA,CAAAC,EAAJ,EAAfH,MAAAI,KAAe,CAAsB,MAAO,EAAxD;",\n"sources":["file-one.js"],\n"names":["window","add","node","hzix","test"]\n}\n',
src: 'window.add=function(a){if(a.a==window.test)return 1};

结果不包含前缀“$pre”。我错过了什么?

【问题讨论】:

  • 我也无法让它工作,不是用 Java,也不能用 JS 编译器......也许可以尝试返回几个版本?
  • 其实我回滚到 20171203 并不能让它工作。 ¯_(ツ)_/¯
  • 虽然关于 rename_variable_prefix 标志的文档说:“指定将添加到所有变量的前缀。”。源代码中的文档说:“指定所有全局变量的前缀”。所以这个标志添加了前缀,但仅适用于全局变量。 github.com/google/closure-compiler/blob/…

标签: javascript obfuscation google-closure-compiler prefix


【解决方案1】:

如果有任何帮助,我可以通过编译器选项 renamePrefix 在 Java 闭包编译器中使用它。例如

m_options.renamePrefix = "$pre"; 

其中 m_options 是 CompilerOptions 传递给例如编译模块:

m_compiler.compileModules(m_externals, m_modules, m_options);

我的问题是我与来自 3rd 方模块的另一个全局混淆变量发生冲突,两者都使用全局命名空间。结果是一个微妙的、因此很危险的错误,只发生在缩小的代码中。

例如缩小器生成全局符号 aa、ab、ga 等,这些符号很容易与另一个缩小包中的相同符号发生冲突 - 因此您可以看到模块的灵感。

我认为您总是希望至少为缩小的全局变量添加前缀,否则如果您还加载 3rd 方库,这可能是一个定时炸弹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2017-12-07
    相关资源
    最近更新 更多