Обфусцирует ли ProGuard, -keepattributes SourceFile, LineNumberTable делают полученный apk проще для обратного инжиниринга? - PullRequest
27 голосов
/ 18 июля 2011

Мне нужно больше подробностей в моих отчетных трассировках стека, но я обеспокоен тем, что, включив дополнительные данные (используя -keepattributes SourceFile, LineNumberTable), я делаю свое приложение еще проще для обратного инжиниринга.Так ли это, и если да, то насколько?

Ответы [ 3 ]

38 голосов
/ 19 июля 2011

Руководство по ProGuard> Примеры> Создание полезных запутанных трассировок стека

Требуется атрибут SourceFile, поскольку виртуальная машина Java Oracle / Sun в противном случае не включает номера строк в трассировки стека,что вы действительно хотите (и что само по себе совершенно безвредно).Я не проверял, верно ли это для виртуальной машины Android Dalvik.

Что касается решения, ProGuard может сохранить атрибут SourceFile, но заменить его содержимое бессмысленной строкой по вашему выбору, например,

* 1008.*

Значение строки не важно для интерпретации трассировки стека.Выбор строки типа «SourceFile» позволяет избежать увеличения размеров файла класса, поскольку эта строка уже присутствует по определению.

2 голосов
/ 18 июля 2011

Я не совсем уверен в том, что происходит, но, учитывая, что имя исходного файла содержит фактическое имя класса, кто-то может использовать это для отображения обфусцированных имен классов в реальные имена классов.Принимая во внимание, что все уже перемешано, зачем вообще сохранять исходный файл?Все должно и будет работать, подробности отладки не требуются среде выполнения, поэтому нет смысла их хранить.Чем больше вы убираете, тем лучше с учетом ваших целей.

0 голосов
/ 01 января 2019

Я думаю, вы можете просто использовать:

-keepattributes LineNumberTable
...