Javascript google closure生成的带有高级设置的代码可以反向工程吗?

Javascript google closure生成的带有高级设置的代码可以反向工程吗?,javascript,obfuscation,google-closure-compiler,Javascript,Obfuscation,Google Closure Compiler,有人知道Google closure使用高级设置生成的JavaScript代码是否可以反向工程吗 GoogleClosure重命名了大部分js变量和函数名,所以我很想知道它是否是保护代码不被窃取的好方法 感谢使用Javascript beautifier,您可以将代码转换为某种可扩展的可读代码,但不能完全进行反向工程 是的,它很容易逆转。googleclosure是一个代码优化器,它几乎与代码混淆相反。这对每个人来说并不总是显而易见的,因为它所做的某些事情实际上会使代码变得有点模糊。 我谈论的是

有人知道Google closure使用高级设置生成的JavaScript代码是否可以反向工程吗

GoogleClosure重命名了大部分js变量和函数名,所以我很想知道它是否是保护代码不被窃取的好方法


感谢使用Javascript beautifier,您可以将代码转换为某种可扩展的可读代码,但不能完全进行反向工程

是的,它很容易逆转。googleclosure是一个代码优化器,它几乎与代码混淆相反。这对每个人来说并不总是显而易见的,因为它所做的某些事情实际上会使代码变得有点模糊。 我谈论的是变量和函数重命名、空格和注释删除

但这并不是为了保护。例如,它生成的新名称总是相同的(确定性)。原因是它只重命名变量和函数,用短的替换它们。它不关心保护。它不需要改变控制流,如果您寻求保护,这就是您想要的。它没有任何东西来混淆字符串和其他文字。相反,它使用了诸如常数折叠和常数传播之类的技术,这实际上使代码更简单,更容易理解


为了保护你,我真的认为你最好的选择是。它们有大量的源代码转换和用于保护的代码陷阱。

是的,它可以反转,但是,如果您在高级优化中的代码有很多内联,那么反转工程可能会困难得多。其次,由于存在大量的不断折叠,这使得代码更难阅读,即:

/** 
 *  @type {number}
 *  @const
 */
var FLAG_A=0x4FFFFFF0;

/** 
 *  @type {number}
 *  @const
 */
var FLAG_B=0x01;

/** @type {number} */
var flags=FLAG_A|FLAG_B;

console.log(flags,(flags&FLAG_A)>0);
输出至:

console.log(1342177265,!0);

这使得实际代码更难阅读和理解。对继承和字符串的依赖越少,朝着位标志的方向移动——将使反向工程代码工作,但是更难更改或扩展。

检查这个问题:如果攻击者有足够的动机进行反向工程,那么任何前端脚本都可以进行反向工程,因为攻击者拥有完整的源代码。以闭包方式编写的代码使用很少的外部代码进行反向工程肯定不容易。然而,它是可行的,就像所有JavaScript一样。