当使用ProGuard进行模糊处理时,-keepattributes SourceFile,LineNumberTable是否会使生成的apk更容易进行逆向工程?

2022-09-01 06:06:49

我发现自己在报告的堆栈跟踪中需要更多详细信息,但我担心通过包含额外的数据(通过使用-keepattributes SourceFile,LineNumberTable),我正在使我的应用程序更容易进行逆向工程。情况是否如此,如果是,情况如何?


答案 1

ProGuard 手册>示例> 生成有用的混淆堆栈跟踪

SourceFile 属性是必需的,因为 Oracle/Sun 的 Java 虚拟机在其他方面不会在堆栈跟踪中包含行号,而这正是您真正想要的(并且本身非常无害)。我还没有检查Android的Dalvik虚拟机是否如此。

至于解决方案,ProGuard 可以保留 SourceFile 属性,但将其内容替换为您选择的无意义字符串,例如

-renamesourcefileattribute SourceFile

字符串的值对于解释堆栈跟踪并不重要。选择类似于“SourceFile”的字符串可以避免增加类文件大小,因为根据定义,此字符串已经存在。


答案 2

我不完全确定会发生什么,但鉴于源文件名包含类的实际名称,有人可以使用它将混淆的类名映射到真实的类名。鉴于 obfsucation 已经把一切都搞砸了,为什么要保留源文件呢?一切都应该并且仍将运行,运行时不需要调试详细信息,因此保留它们没有意义。你删除的越多,你的目标就越好。


推荐