2015-05-19 72 views
1

所有混淆器都会说他们不能混淆动态变量,类等,因为它可能会导致错误。就我的理解而言,动态符号是 被编程为在运行时添加或删除可能在编译时不存在的属性的符号。在什么情况下动态符号不会被混淆?

如果我混淆了预编译时间,是不是刚刚命名符号不同的首要的equivelant,因此不应该引起任何问题?

+0

是的,它只是以不同的方式命名变量。使用混淆器仍然没有多大作用 - 它不是重要符号的名称,而是它的使用场景。如果混淆器无法确定在非动态场景之外不使用符号,则它将无法混淆符号。 – xxbbcc

+0

但是,请注意,源混淆(我认为这就是预编译混淆的含义)具有相同的问题 - 您知道何时使用符号(以及如何),但混淆器只能通过解析源来猜测。它表现出与SWF混淆相同(或更多)的问题 - 使用SWF混淆,至少编译器已经通过代码一次并删除了大部分垃圾。 – xxbbcc

+0

谢谢,但基本上混淆器可以选择包含所有变量(包括动态变量)的混淆。如果这样做,它可能会破坏程序。我无法围绕代码如何破解我的头。 – CausingUnderflowsEverywhere

回答

0

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

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

这些都是通过混淆处理破坏代码的简单方法,但还有很多。这是大多数混淆器产品具有“忽略列表”的原因 - 在混淆期间要忽略的符号名称列表(或正则表达式)。在大型项目中,维护忽略列表可能相当不方便,因为需要记住包含混淆后可能会中断的所有符号。

相关问题