ClassFinal — это инструмент безопасной шифровки Java class файлов, поддерживающий прямое шифрование JAR и WAR пакетов без необходимости изменения исходного проектного кода. Инструмент совместим с spring-framework и позволяет избежать утечки исходного кода или декомпиляции байткода.
Выполните следующую команду:
java -jar classfinal-fatjar.jar -file yourproject.jar -libjars a.jar,b.jar -packages com.yourpackage,com.yourpackage2 -exclude com.yourpackage.Main -pwd 123456 -Y
Параметры команды
-file Полный путь до JAR/WAR файла для шифровки
-packages Названия пакетов для шифровки (может быть пустым; несколько значений разделены запятой)
-libjars Названия JAR файлов в директории lib для шифровки (может быть пустым; несколько значений разделены запятой)
-cfgfiles Конфигурационные файлы для шифровки, обычно расположенные в директории classes (может быть пустым; несколько значений разделены запятой)
-exclude Названия классов для исключения из шифровки (может быть пустым; несколько значений разделены запятой)
-classpath Директория внешних зависимостей JAR, например /tomcat/lib (может быть пустым; несколько значений разделены запятой)
-pwd Пароль шифровки, если используется символ #, то используется режим шифровки без пароля
-code Машина-код, создается на привязанной машине, после шифровки проект может выполняться только на этой машине
-Y Безопасный режим, без этого параметра будет запрос на подтверждение информации выше
```Результат: Создается файл yourproject-encrypted.jar, этот файл является зашифрованным JAR файлом; зашифрованный файл не может быть выполнен напрямую, требуется настройка javaagent.> Примечание:
> Выше приведены примеры выполнения с помощью параметров. Также можно запустить командой `java -jar classfinal-fatjar.jar`, следуя указаниям в консоли.### Конфигурация плагина Maven
Добавьте следующую конфигурацию плагина в pom.xml проекта, который требуется зашифровать. На данный момент последняя версия — 1.2.1.
```xml
<plugin>
<!-- https://gitee.com/roseboy/classfinal -->
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>${classfinal.version}</version>
<configuration>
<password>000000</password><!-- После шифрования и сборки pom.xml будет удален, поэтому не беспокойтесь о том, что найдете этот пароль в jar-файле -->
<packages>com.yourpackage,com.yourpackage2</packages>
<cfgfiles>application.yml</cfgfiles>
<excludes>org.spring</excludes>
<libjars>a.jar,b.jar</libjars>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>
Выполнение команды mvn package
автоматически создаст зашифрованный jar-файл yourproject-encrypted.jar
в директории target.
Параметры плагина Maven совпадают с параметрами для прямого запуска; подробнее см. описание параметров выше.
Для шифрования установите параметр -pwd
равным значению #
. При запуске пароль вводить не нужно;
если это war-пакет, при запуске укажите параметр -nopwd
, чтобы пропустить ввод пароля.
Установка машины позволяет запускать зашифрованный проект только на конкретной машине;На машине, которая должна быть связана, выполните следующую команду, чтобы сгенерировать код машины:
java -jar classfinal-fatjar.jar -C
При шифровании используйте параметр -code
для указания кода машины. Машина может быть связана как с использованием кода машины, так и с использованием пароля.### Запуск зашифрованного jar
Зашифрованный проект требует использования аргумента -javaagent
для запуска. Проект расшифровывает классы во время запуска полностью в памяти, не оставляя никаких расшифрованных файлов.
Функция расшифровки уже включена в ваш jar-файл yourpaoject-encrypted.jar
, поэтому при запуске вам не потребуется дополнительный jar-файл.
Запуск jar-проекта выполняется следующей командой:
java -javaagent:yourpaoject-encrypted.jar='-pwd 0000000' -jar yourpaoject-encrypted.jar
// Параметры:
// -pwd Пароль зашифрованного проекта
// -pwdname Название переменной окружения, содержащей пароль
Или вы можете запустить jar без указания пароля, после чего ввести его в консоли при запуске. Этот метод рекомендован.
java -javaagent:yourpaoject-encrypted.jar -jar yourpaoject-encrypted.jar
Порядок получения пароля был изменён следующим образом: пароль передаётся через аргументы командной строки || через переменные окружения || из файла с паролем || вводится в консоль || вводится через графическое окно || программа завершает работу.### Запуск зашифрованного war-файла в Tomcat
Установите зашифрованный war-файл в папку tomcat/webapps
,
в файл tomcat/bin/catalina
добавьте следующие параметры:
# Linux
CATALINA_OPTS="$CATALINA_OPTS -javaagent:classfinal-fatjar.jar='-pwd 0000000'";
export CATALINA_OPTS;
# Windows
set JAVA_OPTS="-javaagent:classfinal-fatjar.jar='-pwd 000000'"
# -pwd Пароль для шифрованного проекта
# -nopwd При отсутствии пароля, добавьте этот параметр для пропуска этапа ввода пароля
# -pwdname Название переменной окружения, содержащей пароль
Этот инструмент использует алгоритм AES для шифрования class-файлов. Пароль является ключом безопасности, поэтому сохраните его в надёжном месте и не раскрывайте третьим лицам.
Если вы забудете пароль, проект не сможет запуститься и восстановление будет невозможно, поэтому запомните пароль.
После шифрования методы остаются доступными для сканирования аннотаций Spring, Swagger и других систем; при этом тело метода очищается, что делает невозможным чтение содержимого метода при декомпиляции; когда класс загружается класслоадером, реальное тело метода дешифруется и внедряется.
Для обеспечения безопасности проекта во время выполнения, при запуске JVM добавьте параметр
-XX:+DisableAttachMechanism
.## Версия
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )