当使用ProGuard混淆时,-keepattributes SourceFile,LineNumberTable是否使



我发现自己需要更多的细节在我报告的堆栈跟踪,但我担心,通过包括额外的数据(通过使用-keepattributes SourceFile,LineNumberTable),我使我的应用程序更容易逆向工程。是这样吗?如果是这样,差多少?

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

SourceFile属性是必需的,因为Oracle/Sun的Java虚拟机在堆栈跟踪中不包含行号,这是您真正想要的(并且它本身是相当无害的)。我还没有检查这是否适用于Android的Dalvik虚拟机。

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

-renamesourcefileattribute SourceFile

字符串的值对于解释堆栈跟踪并不重要。选择像"SourceFile"这样的字符串可以避免增加类文件的大小,因为这个字符串在定义中已经存在了。

我不太确定发生了什么,但是给定源文件名包含类的实际名称,有人可以使用它将混淆的类名称映射为实际的类名称。既然模糊化已经把所有东西都弄混了,为什么还要保留源文件呢?所有内容都应该并且将继续运行,运行时不需要调试细节,因此保留它们没有意义。考虑到你的目标,你删除的越多越好。

我想你可以直接使用:

-keepattributes LineNumberTable
-renamesourcefileattribute
-keepattributes SourceFile, LineNumberTable,Signature,Exceptions,InnerClasses,EnclosingMethod

-renamesourcefileattribute ''
-keepattributes SourceFile, LineNumberTable,Signature,Exceptions,InnerClasses,EnclosingMethod

让filename为空

相关内容

  • 没有找到相关文章

最新更新