Обозначение переменных в обфускации ProGuard, как избежать префиксов локальных параметров и параметров - PullRequest
4 голосов
/ 16 июля 2011

Я пытаюсь запутать весеннее веб-приложение с помощью ProGuard.Я хочу сохранить имена классов и методов, особенно те, которые используются в качестве весенних бобов.

Но ProGuard переименовывает локальные переменные в local[class name], например, если у меня есть объект User, он переименовывает локальную переменную в localUser.Он также переименовывает параметры метода в param[Class name], например, если у меня есть параметр User, имя переменной в запутанном методе становится paramUser.Таким образом, запутанный код становится довольно читабельным.

Я хочу запретить ProGuard использовать локальные префиксы и префиксы параметров и имена классов.Например, я хочу использовать x1 вместо localUser.Я проверил параметры конфигурации, но не смог найти, как это сделать.

Ответы [ 3 ]

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

Руководство по ProGuard> Устранение неполадок > Неожиданные наблюдения после обработки> Имена переменных не запутываются

Если имена локальных переменных и параметров в вашем запутанном коде не выглядятзапутанный, потому что они подозрительно напоминают имена своих типов, возможно, это потому, что используемый вами декомпилятор подходит с этими именами.Шаг обфускации в ProGuard полностью удаляет исходные имена, если только вы явно не сохраните атрибуты LocalVariableTable или LocalVariableTypeTable.

1 голос
/ 16 июля 2011

Переменная x1 не дает больше информации, чем paramUser, учитывая, что просматриваемый код будет:

public void foo(User x1)
{
    ...
}

Если ваши методы не очень длинные, это не будетлюбому, кто читает метод, трудно запомнить, что это параметр типа User, и это все, что говорит paramUser.Да, есть некоторая разница в удобочитаемости, но я бы не сказал, что лично о ней стоит беспокоиться - если кто-то потратит достаточно времени на декомпиляцию вашего кода, очень небольшая разница, как эта, вряд ли их удержит.Если имена классов были также запутаны, это будет иметь большее значение для ИМО.

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

Схема именования, которую вы описываете, выглядит как имена, воссозданные JD, когда LocalVariableTable был пропущен компилятором Java (см. Javac -g: var).Для меня это не ошибка в ProGuard.

Чтобы сделать облачность ваших приложений более эффективной,

  • старайтесь каждый раз заменять «защищенный» на «частный».возможно: ProGuard заменит имена классов, методов и полей короткими именами,
  • попытается использовать анонимные классы в вашем коде,
  • и попытается разбить ваши алгоритмы на большое количество классов, чтобыусложнить понимание потоков выполнения.
...