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