Как зашифровать файл .jar - PullRequest
       8

Как зашифровать файл .jar

5 голосов
/ 25 августа 2011

Я работаю в проекте, где нам нужно зашифровать файл .jar, чтобы никто не мог получить доступ к файлам .class, которые находятся внутри файла jar .... есть ли код Java, который может помочь мне зашифровать.jar файл?

Ответы [ 8 ]

16 голосов
/ 25 августа 2011

Даже если вы зашифруете файл JAR, он должен быть дешифрован, прежде чем JVM сможет его запустить, поэтому вам понадобится другой файл JAR, содержащий классы, которые расшифровывают и загружают в JVM.

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

Возможно, вы можете повысить безопасность своего кода, используя обфускатор, но в конечном итоге он защитит (сделает это сложнее, но не невозможно) файлы классов от декомпиляции, а не от использования.

Если запутывания недостаточно, вы можетерассмотрите возможность компилирования вашего jar-файла в DLL для Windows или SO для Unix / Linux, что затруднит декомпиляцию, но это не всегда возможно сделать правильно, и обычно это PITA.GCJ может сделать это как-то, и есть другие коммерческие продукты, которые на самом деле компилируют .class / .jar непосредственно в машинный код.

Однако, пожалуйста, учтите, что не имеет значения, какую безопасность вы в него вложите,поскольку клиентский компьютер ДОЛЖЕН быть в состоянии выполнить его, он должен иметь возможность читать его, поэтому независимо от того, какой код будет представлен, вы можете только усложнить его.

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

3 голосов
/ 25 августа 2011

Вы хотите запутать, а не зашифровать файл jar.

Популярным выбором для этого в Java является ProGuard .

3 голосов
/ 25 августа 2011

Я предполагаю, что вы знаете о том факте, что любой опытный Java-кодер может перепроектировать Java-инструмент, который вы используете (или пишете), и все же декодировать файлы приложения? Кроме того, написание пользовательских загрузчиков классов, которые читают ваш «зашифрованный» код, может быть декомпилировано, и может быть написан инструмент для его обхода.

Даже с обфускацией и модификацией байт-кода и пользовательскими загрузчиками классов, java можно взломать / декомпилировать, и источник почти всегда можно привести в несколько читабельное состояние.

1 голос
/ 25 августа 2011

Насколько я знаю, это не поддерживается стандартной JVM. Но вы можете сделать следующее. Разделите ваше приложение на 2 части. Первый не будет зашифрован. Это будет простой загрузчик, который будет создавать все остальное с помощью пользовательского загрузчика классов. Этот загрузчик классов получит классы как массивы байтов, расшифрует и загрузит их.

1 голос
/ 25 августа 2011

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

Вы можете запутать свой код, хотя декомпиляция файлов .class приведет к менее читаемому коду (бессмысленные имена переменных / классов и т. Д.).

0 голосов
/ 21 марта 2014

если вы упаковываете в jar -> просто переименуйте его в jarname.ABCD или любое вводящее в заблуждение расширение или даже снимите расширение и соответственно укажите имя jar в вашем приложении.

0 голосов
/ 12 марта 2013

Я предпочитаю jCrypt ! Это простой инструмент, где вы можете зашифровать классы (и ресурсы)

0 голосов
/ 25 августа 2011

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

Если вам нужен какой-то особый способ загрузки классов, рассмотрите возможность использования собственного загрузчика классов.

...