动态符号在什么情况下可以不被混淆?

In What Cases Can A Dynamic Symbol Not Be Obfuscated?

所有混淆器都会说他们不能混淆动态变量,类 等,因为这可能会导致错误。据我了解,动态符号是指 被编程为在 运行 期间添加或删除在编译时可能不存在的属性。

如果我混淆了预编译时间,这不是等同于首先以不同的方式命名符号,因此应该不会引起任何问题吗?

一些代码可以使用字符串(例如,从资源文件中读取的字符串)来引用变量/类型(符号)——例如通过反射。您发现的混淆器可能无法检测字符串何时引用符号 - 它可能会重命名名称出现在字符串中的符号 - 混淆后,代码将被破坏,因为字符串将引用已重命名的符号.

如果混淆器混淆了帧标签但不使用新名称(或 SWF 中的资源文件)更新字符串,这也可能导致错误 - 代码可能会从 XML 资源,但时间线不再有旧标签。

这些是通过混淆破解代码的简单方法,但还有更多。这就是为什么大多数混淆器产品都有 'ignore lists' - 在混淆过程中要忽略的符号名称(或正则表达式)列表。在大型项目中,维护忽略列表可能非常不方便,因为需要记住包括所有可能在混淆后中断的符号。