Запутывание Netbeans - PullRequest
       11

Запутывание Netbeans

3 голосов
/ 10 июня 2009

Я очень новичок в запутывании и не имею большого опыта работы с муравьем. Кто-нибудь, предоставьте мне способ запутать обычное Java-приложение с помощью ProGuard (или любого другого обфускатора с открытым исходным кодом). В настоящее время я использую NetBeans 6.5.1 и вижу возможность обфускации только в том случае, если я создаю JAVA ME, а не приложение Java, как у меня. Я посмотрел на http://wiki.netbeans.org/DevFaqModuleObfuscation,, но не понимаю, о чем они говорят.

Спасибо за любой вклад.

Ответы [ 2 ]

9 голосов
/ 11 июня 2009

Часто задаваемые вопросы, которые вы указываете, касаются запутывания модулей NetBeans. Это довольно сложный вариант использования, поэтому я предполагаю, что это не обычное приложение , которое вас интересует.

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

Это вызывает некоторые проблемы:

  • JVM требует, чтобы ваше приложение имело общедоступный статический void main (строковые аргументы []) в публичном классе, поэтому вы должны сказать proguard не изменять это имя
  • если вы используете какой-либо вид самоанализа, вы должны защитить соответствующие имена от изменения
  • другие случаи , как объяснено в руководстве

Кроме того, proguard удаляет неиспользуемый код. Если у вас есть какие-либо классы, которые используются, но на которые нет прямой ссылки, вы должны -keep их также.

Документация Proguard включает пример того, как запутать простое приложение. Вот пример объяснения (с некоторыми менее запутанными именами):

-injars       application.jar        # obfuscate all the classes in the named jars
-outjars      obfuscated.jar         # save all the obfuscated classes to the named jar
-libraryjars  <java.home>/lib/rt.jar # these are all the libraries that the application uses
-printmapping obfuscation.map        # save a file linking the original names to the obfuscated ones
                                     # this helps understanding stack traces from the obfuscated application

# we need to keep our main class and the application entry point
-keep public class com.mycompany.Application {
    public static void main(java.lang.String[]);
}

Если вы не укажете -dontshrink, proguard удалит любой код, который не был сохранен или на который нет ссылки из любого сохраненного кода. Таким образом, в приведенной выше конфигурации любой код, на который не ссылается (косвенно) метод main, будет удален.

Proguard включает задачу Ant, которую можно использовать для интеграции с рабочим процессом NetBeans. Я бы посоветовал сначала поэкспериментировать вручную без Ant, так как это исключает один из осложняющих факторов. Создайте jar своего приложения с помощью NetBeans, а затем попытайтесь запутать описанную выше конфигурацию (уточните, если необходимо). Обязательно протестируйте запутанное приложение, так как неисчислимое количество вещей может пойти не так. Получив рабочую конфигурацию Proguard, попробуйте добавить задачу Ant в файл сборки, чтобы автоматизировать процесс обфускации в NetBeans.

2 голосов
/ 23 сентября 2009

Другое решение, кроме -dontskipnonpubliclibraryclasses, - использовать тот же JDK для запуска proguard, который вы использовали для компиляции кода в файле JAR.

Например, вместо java -jar ../proguard3.8/lib/proguard.jar

использование /usr/local/jdk1.5.0/bin/java -jar ../proguard3.8/lib/proguard.jar

Jacob

...