javascript - 关闭编译器 : adding prefix to obfuscated variables

标签 javascript obfuscation google-closure-compiler prefix

我的目标是添加前缀,这些前缀将被添加到所有混淆变量之前。
例如:
而不是混淆 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”。我错过了什么?

最佳答案

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

m_options.renamePrefix = "$pre"; 
其中 m_options 是 CompilerOptions 传递给例如编译模块:
m_compiler.compileModules(m_externals, m_modules, m_options);
我的问题是我与来自 3rd 方模块的另一个全局混淆变量发生了冲突,两者都使用全局命名空间。结果是一个微妙的、因此危险的错误,只发生在缩小的代码中。
例如压缩器生成全局符号 aa、ab、ga 等,这些符号很容易与另一个缩小包中的相同符号发生冲突 - 因此您可以看到模块的灵感。
我认为您总是希望至少为缩小的全局变量添加前缀,否则如果您还加载 3rd 方库,这可能是一个定时炸弹。

关于javascript - 关闭编译器 : adding prefix to obfuscated variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60925355/

相关文章:

javascript - Closure-compiler param type Object.<string, *> 没有按预期工作

javascript - 如何设置 html 上传按钮的样式并且侧面仍然有文字?

javascript - 添加 :hover pseudo-class via js/jquery

javascript - Angular JS 过滤器 搜索

android - 当一个 Android 应用程序被分成多个项目时,是否有任何混淆的好处?

javascript - 缩小和混淆 CSS,类似于 Javascript

javascript - 值(value)观问题 Formik

java - 支持 Java 中的 goto 吗?

javascript - 测试对象是否是 Google Closure 类框架中接口(interface)的实现

javascript - Closure 编译器不会虚拟化匿名包装器中包含的原型(prototype)函数