当使用ProGuard进行模糊处理时,-keepattributes SourceFile,LineNumberTable是否会使生成的apk更容易进行逆向工程?
我发现自己在报告的堆栈跟踪中需要更多详细信息,但我担心通过包含额外的数据(通过使用-keepattributes SourceFile,LineNumberTable),我正在使我的应用程序更容易进行逆向工程。情况是否如此,如果是,情况如何?
我发现自己在报告的堆栈跟踪中需要更多详细信息,但我担心通过包含额外的数据(通过使用-keepattributes SourceFile,LineNumberTable),我正在使我的应用程序更容易进行逆向工程。情况是否如此,如果是,情况如何?
SourceFile 属性是必需的,因为 Oracle/Sun 的 Java 虚拟机在其他方面不会在堆栈跟踪中包含行号,而这正是您真正想要的(并且本身非常无害)。我还没有检查Android的Dalvik虚拟机是否如此。
至于解决方案,ProGuard 可以保留 SourceFile 属性,但将其内容替换为您选择的无意义字符串,例如
-renamesourcefileattribute SourceFile
字符串的值对于解释堆栈跟踪并不重要。选择类似于“SourceFile”的字符串可以避免增加类文件大小,因为根据定义,此字符串已经存在。
我不完全确定会发生什么,但鉴于源文件名包含类的实际名称,有人可以使用它将混淆的类名映射到真实的类名。鉴于 obfsucation 已经把一切都搞砸了,为什么要保留源文件呢?一切都应该并且仍将运行,运行时不需要调试详细信息,因此保留它们没有意义。你删除的越多,你的目标就越好。