此规则也使我们可以在自定义的类中标识方法和属性是否被混淆,对于需要外部调用不能混淆的方法和属性,采用小写字母起始,对于内部的方法和属性,采用其他字母起始。
| 类型 | 混淆 | 不混淆 |
| 类方法定义 | Class1.Method1 = function(){...} | Class1.method1 = function(){...} Class1["Method1"] = function(){...} |
| 对象方法定义 | Class1.prototype.Method1 = function(){...} | Class1.prototype.method1 = function(){...} Class1.prototype["Method1"] = function(){...} |
| 类属性定义 | Class1.Prop1 = 1; | Class1.prop1 = 1; Class1["Prop1"] = 1; |
| 对象属性定义 | object1.Prop1 = 1; | object1.prop1 = 1; object1["Prop1"] = 1; |
| 类方法调用 | Class1.Method1(); | Class1.method1 (); Class1["Method1"](); |
| 对象方法调用 | object1.Method1(); | object1.method1 (); object1["Method1"](); |
Javascript 在线混淆器的核心规则就是以上两点,另外还有几点说明。
标识符的混淆采用 Hash 算法,不可逆
Hash 算法是不可逆的,所以不能根据混淆后的标识符,来直接推出混淆前的标识符;但 Hash 算法依赖于 .Net 系统的实现,大多数的时候,.Net 的 Hash 算法是不变的,就是同一个标识符的混淆结果是一样的;如果能够枚举足够多的标识符,仍然可能根据相同的混淆结果,知道混淆前的标识符。
如何调用混淆后的类、方法和属性
对于混淆代码的内部调用,只要采用相同的规则,要么都混淆,要么都不混淆,就能正确的调用。
对于混淆代码的外部调用,可以有两种方式,一种是不混淆,代码内部采用不混淆的规则,外部采用不混淆的可理解的标识符调用;另一种是混淆,代码内部采用混淆的规则,外部也采用混淆后的不可理解的标识符调用,但此方式依赖于 .Net Hash 算法的实现,在不同版本的 .Net 实现中的 Hash 算法有可能不同,以至混淆后的标识符不一致,从而导致重新混淆后,需要替换原来混淆的标识符。
为何有“清除空格,保留分号后的回车”的选项
Javascript 语法要求全局函数的结尾必须有分号或回车,如果遗漏了分号,而又清除了所有的回车,总是提示第一行缺少分号,无法定位错误所在;采用本选项可以有助于寻找缺少的分号的位置。










