GitHub: https://github.com/core-lib/xjar
JDK 1.7+
<проект>
<!-- Установите репозиторий jitpack.io -->
<репозитории>
<репозиторий>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</репозиторий>
</репозитории>
<!-- Добавьте зависимость XJar -->
<зависимости>
<зависимость>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar</artifactId>
<version>4.0.1</version>
<!-- <scope>test</scope> -->
</зависимость>
</зависимости>
</проект>
https://jitpack.io
.test
.XCryptos.encryption()
.from("/путь/к/читаемому/plaintext.jar")
.use("io.xjar")
.include("/io/xjar/**/*.class")
.include("/mapper/**/*Mapper.xml")
.exclude("/static/**/*")
.exclude("/conf/*")
.to("/путь/к/сохранению/encrypted.jar");
Метод | Параметры | Обязательность | Описание метода |
---|---|---|---|
from | (String jar) | Или один, или другой | Указывает путь до JAR-файла для шифрования |
from | (File jar) | Указывает файл JAR-файла для шифрования | |
use | (String password) | Или один, или другой | Указывает пароль для шифрования |
use | (String algorithm, int keySize, int ivSize, String password) | Указывает алгоритм шифрования и пароль для шифрования | |
include | (String ant) | Можно вызывать несколько раз |
Specifies an ANT expression of the path relative to the classpath for encryption | |||
include | (Pattern regex) | Can be called multiple times | Specifies a regular expression of the path relative to the classpath for encryption |
exclude | (String ant) | Can be called multiple times | Specifies an ANT expression of the path relative to the classpath for exclusion from encryption |
exclude | (Pattern regex) | Can be called multiple times | Specifies a regular expression of the path relative to the classpath for exclusion from encryption |
to | (String xJar) | Either one or the other | Sets the path for saving the encrypted JAR file and performs encryption |
to | (File xJar) | Sets the file for saving the encrypted JAR file and performs encryption |
include
и exclude
: шифрование будет выполнено только для ресурсов, входящих в диапазон include
, но исключённых из диапазона exclude
.go build xjar.go
xjar.go
в том же каталоге, что и зашифрованный JAR-файл.xjar.go
на различных платформах приведёт к получению запускаемых файлов для этих платформ. На Windows имя файла будет xjar.exe
, а на Linux — просто xjar
./path/to/xjar /path/to/java [ОПЦИИ] -jar /path/to/encrypted.jar [АРГУМЕНТЫ]
/path/to/xjar /path/to/javaw [ОПЦИИ] -jar /path/to/encrypted.jar [АРГУМЕНТЫ]
``````markdown
nohup /path/to/xjar /path/to/java [ОПЦИИ] -jar /path/to/encrypted.jar [АРГУМЕНТЫ]
Чтобы запустить зашифрованный JAR-файл, следует перед командой запуска Java указать имя собранного Go-стартового скрипта (xjar
). В случае использования nohup
для запуска, данная команда должна располагаться перед именем Go-стартового скрипта (xjar
). Если Go-стартовый скрипт (xjar
) находится вне текущего рабочего каталога, его путь должен быть указан полностью или относительно. Поддерживаются только запуски через -jar
. Запуск через -cp
или -classpath
невозможен. После -jar
обязательно должно следовать полное имя пути к зашифрованному JAR-файлу.
Пример: если текущий рабочий каталог совпадает с местоположением xjar
, и переменная окружения java
установлена, команда выглядит так: ./xjar java -Xms256m -Xmx1024m -jar /path/to/encrypted.jar
.
#### 1. Несоответствие spring-boot-maven-plugin с параметрами `executable=true` и `embeddedLaunchScript`
```xml
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- Эти параметры необходимо удалить, поскольку данный плагин ещё не поддерживает шифрование JAR-файлов в данном режиме! Возможно, это будет реализовано в будущих версиях.
<configuration>
<executable>true</executable>
<embeddedLaunchScript>...</embeddedLaunchScript>
</configuration>
-->
</plugin>
Если в проекте используется JPA и реализация Hibernate, то из-за того что Hibernate сам расшифровывает зашифрованные Jar-файлы, нормальный запуск невозможен. Для решения этой проблемы можно использовать следующие шаги:
mvn clean package
и получить файл xjar-agent-hibernate-${version}.jar
.xjar java -javaagent:xjar-agent-hibernate-${version}.jar -jar your-spring-boot-app.jar
.При шифровании статических файлов объём этих файлов увеличивается, поэтому Spring Boot использует размер файла как значение заголовка Content-Length
, которое отправляет браузеру. Однако после расшифровки через XJar размер файлов восстанавливается до первоначального значения, и браузер продолжает ждать завершения загрузки.Для решения этой проблемы следует игнорировать шифрование статических файлов во время процесса шифрования. На самом деле нет необходимости шифровать статические файлы, так как даже если они будут зашифрованы, пользователи смогут просмотреть полный исходный код в браузере. Обычно статические файлы хранятся в директориях static/
и META-INF/resources/
. Чтобы исключить эти файлы из процесса шифрования, можно использовать метод exclude()
, как показано ниже:
XCryptos.encryption()
.from("/путь/к/читаемому/plain-text.jar")
.use("io.xjar")
.exclude("/static/**/*")
.exclude("/META-INF/resources/**/*")
.to("/путь/к/сохраняемому/зашифрованному.jar");
Из-за модульности в версиях JDK 9 и выше, пакет jdk.internal.loader
недоступен для использования XJar. Для решения этой проблемы можно добавить параметр --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
при запуске:
xjar java --add-opens java.base/jdk.internal.loader=ALL-UNNAMED -jar /путь/к/зашифрованному.jar
Чтобы решить эту проблему, можно добавить конфигурацию зеркала Maven, где в элементе mirrorOf
будет указано ,!jitpack.io
:```xml
alimaven
central,! jitpack.io
aliyun maven
http://maven.aliyun.com/nexus/content/repositories/central/
## Интеграция плагинов
### Для Maven проекта можно использовать интеграцию плагина [xjar-maven-plugin](https://github.com/core-lib/xjar-maven-plugin), чтобы избежать необходимости каждый раз выполнять указанный выше код для шифрования. Шифрованные JAR-файлы и исходные Go-запускеры будут автоматически генерироваться вместе с сборкой Maven.
[xjar-maven-plugin](https://github.com/core-lib/xjar-maven-plugin) GitHub: https://github.com/core-lib/xjar-maven-plugin
```xml
<проект>
<!-- Установка репозитория плагинов jitpack.io -->
<pluginRepositories>
<pluginRepository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</pluginRepository>
</pluginRepositories>
<!-- Добавление плагина XJar Maven -->
<build>
<plugins>
<plugin>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar-maven-plugin</artifactId>
<version>4.0.1</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
<phase>package</phase>
<!-- или используйте
<phase>install</phase>
-->
<configuration>
<password>io.xjar</password>
<!-- необязательно
<algorithm/>
<keySize/>
<ivSize/>
<includes>
<include/>
</includes>
<excludes>
<exclude/>
</excludes>
<sourceDir/>
<sourceJar/>
<targetDir/>
``````markdown
<targetJar/>
-->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</проект>
package
.install
(по умолчанию значение равно package
). Команда сборки должна быть mvn clean install
.mvn xjar:build -Dxjar.password=io.xjar
mvn xjar:build -Dxjar.password=io.xjar -Dxjar.targetDir=/directory/to/save/target.xjar
mvn clean package -Dxjar.password=io.xjar
mvn clean install -Dxjar.password=io.xjar -Dxjar.targetDir=/directory/to/save/target.xjar
Строго рекомендуется не указывать пароль в конфигурации плагина xjar-maven-plugin в файле pom.xml, так как это может привести к тому, что пароль будет сохранён в зашифрованном jar-файле, что делает его легко доступным. Вместо этого следует использовать команды mvn для указания ключей шифрования.## Описание параметров
Параметр | Команда | Описание | Тип | Значение по умолчанию | Пример значения |
---|---|---|---|---|---|
password | -Dxjar.password | Пароль | String | Обязательно | Любая строка, io.xjar |
algorithm | -Dxjar.algorithm | Название алгоритма шифрования | String | AES/CBC/PKCS5Padding | Встроенные алгоритмы шифрования Java, такие как AES/CBC/PKCS5Padding и DES/CBC/PKCS5Padding |
keySize | -Dxjar.keySize | Длина ключа | int | 128 | В зависимости от выбранного алгоритма шифрования, 56, 128, 256 |
ivSize | -Dxjar.ivSize | Длина вектора инициализации | int | 128 | В зависимости от выбранного алгоритма шифрования, 128 |
sourceDir | -Dxjar.sourceDir | Каталог с исходными jar-файлами | File | ${project.build.directory} | Каталог файлов |
sourceJar | -Dxjar.sourceJar | Имя исходного jar-файла | String | ${project.build.finalName}.jar | Имя файла |
targetDir | -Dxjar.targetDir | Каталог для хранения целевых jar-файлов | File | ${project.build.directory} | Каталог файлов |
targetJar | -Dxjar.targetJar | Имя целевого jar-файла | String | ${project.build.finalName}.xjar | Имя файла |
includes | -Dxjar.includes | Выражение пути для ресурсов, требующих шифрования | String[] | Отсутствует | io/xjar/**, mapper/*Mapper.xml, поддерживаются выражения Ant |
excludes | -Dxjar.excludes | Выражение пути для ресурсов, не требующих шифрования | String[] | Отсутствует | static/, META-INF/resources/, поддерживаются выражения Ant |
includes
и excludes
одновременно, то ресурсы, которые указаны в includes
и не указаны в excludes
, будут зашифрованы. Более информации: xjar-maven-plugin
nested-lib
без шифрования его внутренних ресурсов в случае наличия безопасной проверкиXJarClassLoader
System.console()
и замена на new Scanner(System.in)
!
) для фильтровXEntryFilters
в класс XKit
BOOT-INF/classes/
* v1.0.9v1.0.8
v1.0.7
v1.0.6
v1.0.5
v1.0.4 Мелкие улучшения
v1.0.3 Добавление по умолчанию фильтра для шифрования Spring Boot FatJar, чтобы избежать проблем запуска зашифрованного JAR пакета при отсутствии фильтра
v1.0.2 Устранение проблем с путями на кириллице и пробелах
v1.0.1 Обновление фреймворка detector
v1.0.0 Первый официальный выпуск
Apache-2.0## Вступите в чат
QQ 950956093
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )