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

时间:2011-07-18 01:16:37

标签: java android proguard

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

4 个答案:

答案 0 :(得分:38)

ProGuard manual > Examples > Producing useful obfuscated stack traces

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

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

-renamesourcefileattribute SourceFile

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我认为您可以只使用-keepattributes LineNumberTable

答案 3 :(得分:0)

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

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

让文件名为空就可以了