Запутывание защищенных элементов Java с помощью ProGuard

#java #obfuscation #proguard

#java #запутывание #proguard

Вопрос:

Я разрабатываю библиотеку, состоящую из нескольких отдельных классов, которые работают вместе для выполнения функций библиотеки. Затем один из классов предоставляет несколько общедоступных функций, которые все являются внешним кодом для использования библиотеки.

Поскольку разные классы должны взаимодействовать, я помещаю их все в один пакет и получаю много «защищенных» материалов (классов и функций).

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

Итак, вопрос в том, могу ли я заставить ProGuard запутывать эти защищенные элементы в дополнение к частным?

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

Спасибо!

Ответ №1:

ProGuard запутывает все, что не соответствует одному из параметров -keep в вашей конфигурации. Например, из руководства ProGuard> Примеры> Типичная библиотека:

 -keep public class * {
    public protected *;
}
 

Эта спецификация сохраняет все общедоступные и защищенные классы, поля и методы. ProGuard запутывает все остальное. Если вы хотите запутать больше, вам нужно указать меньшее количество элементов для сохранения, например, с одним или несколькими параметрами, подобными этому:

 -keep public class mypackage.MyPublicClass {
    public void myPublicMethod();
}
 

Вы можете использовать подстановочные знаки или другие шаблоны, как описано в руководстве ProGuard.

Итак, по умолчанию ProGuard запутывает все, если вы не укажете сохранить некоторые элементы. ProGuard не может угадать, что вы хотели бы сохранить.