Мне кажется, что мне нужно больше подробностей в моих отчетах о трассировке стека, но я обеспокоен тем, что, включив дополнительные данные (используя -keepattributes SourceFile, LineNumberTable), я делаю мое приложение еще проще для обратной инженерии. Это так, и если да, то насколько?
При запутывании с помощью ProGuard, -keepattribтрибуты SourceFile, LineNumberTable облегчают обратное преобразование полученного apk?
Ответ 1
Руководство по ProGuard > Примеры > Создание полезных обфусканных стеков стека
Требуется атрибут SourceFile, потому что виртуальная машина Oracle/Sun Java в противном случае не включает номера строк в трассировках стека, что вы действительно хотите (и который совершенно безвреден сам по себе). Я не проверял, верно ли это для виртуальной машины Android Dalvik.
Что касается решения, ProGuard может сохранить атрибут SourceFile, но заменить его содержимое бессмысленной строкой по вашему выбору, например.
-renamesourcefileattribute SourceFile
Значение строки не важно для интерпретации трассировки стека. Выбор такой строки, как "SourceFile", позволяет избежать увеличения размеров файлов классов, поскольку эта строка уже присутствует по определению.
Ответ 2
Я не совсем уверен в том, что происходит, но если имя исходного файла содержит фактическое имя класса, кто-то может использовать его для сопоставления обфускационных имен классов с именами реальных классов. Учитывая, что obfsucation уже все запутывает, зачем хранить исходный файл вообще? Все должно и должно выполняться, детали отладки не требуются во время выполнения, поэтому нет смысла их хранить. Чем больше вы удаляете, тем лучше ваши цели.
Ответ 3
Я думаю, что вы можете просто использовать:
-keepattributes LineNumberTable
Ответ 4
-renamesourcefileattribute
-keepattributes SourceFile, LineNumberTable,Signature,Exceptions,InnerClasses,EnclosingMethod
или
-renamesourcefileattribute ''
-keepattributes SourceFile, LineNumberTable,Signature,Exceptions,InnerClasses,EnclosingMethod
Просто оставьте имя файла пустым.