赞
踩
<!-- 添加jitpack.io仓库 --> <repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> </repositories> <!-- 添加XJar依赖 --> <dependencies> <dependency> <groupId>com.github.core-lib</groupId> <artifactId>xjar</artifactId> <version>4.0.0</version> </dependency> </dependencies>
XCryptos.encryption()
.from("D:/jars/original.jar")
.use("1@3$qWeR")
.include("/io/xjar/**/*.class")
.include("/mapper/**/*Mapper.xml")
.exclude("/static/**/*")
.exclude("/conf/*")
.to("D:/files/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) | 指定要加密的资源相对于classpath的ANT路径表达式 |
include | (Pattern regex) | 指定要加密的资源相对于classpath的正则路径表达式 |
exclude | (String ant) | 指定不加密的资源相对于classpath的ANT路径表达式 |
exclude | (Pattern regex) | 指定不加密的资源相对于classpath的正则路径表达式 |
to | (String xJar) | 指定加密后jar包输出路径,并执行加密 |
to | (File xJar) | 指定加密后jar包输出路径,并执行加密 |
go build xjar.go
xjar java -jar /path/to/encrypted.jar
Maven项目可通过集成 xjar-maven-plugin 以免去每次加密都要执行一次上述的代码,随着Maven构建自动生成加密后的JAR和Go启动器源码文件。
<project> <!-- 设置 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.0</version> <executions> <execution> <goals> <goal>build</goal> </goals> <phase>package</phase> <!-- 或使用 <phase>install</phase> --> <configuration> <!-- 建议password不要在pom文件中指定 --> <password>io.xjar</password> <!-- optional <algorithm/> <keySize/> <ivSize/> <includes> <include/> </includes> <excludes> <exclude/> </excludes> <sourceDir/> <sourceJar/> <targetDir/> <targetJar/> --> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
对于Spring Boot 项目或模块, 该插件要后于 spring-boot-maven-plugin 插件执行, 有两种方式
也可以通过Maven命令执行
mvn xjar:build -Dxjar.password=io.xjar
mvn xjar:build -Dxjar.password=io.xjar -Dxjar.targetDir=outputDir/encrypted.jar
但通常情况下是让XJar插件绑定到指定的phase中自动执行,这样就能在项目构建的时候自动构建出加密的包
mvn clean package -Dxjar.password=io.xjar
mvn clean install -Dxjar.password=io.xjar -Dxjar.targetDir=/directory/to/save/target.xjar
强烈建议
不要在 pom.xml 的 xjar-maven-plugin 配置中写上密码,这样会导致打包出来的 xjar 包中的 pom.xml 文件保留着密码,极其容易暴露密码!强烈推荐通过 mvn 命令来指定加密密钥!
下载exe4j工具并安装
官网下载地址:https://exe4j.apponic.com/
安装完成后打开软件,填写Name, Company 和 Licence key. Name 和 Company 随便填,Licence key 网上搜一个即可,如 A-XVK258563F-1p4lv7mg7sav
点击 Next, 选择 “JAR in EXE” mode
点击 Next, 填写输出exe文件的名称和输出路径
点击 Next, 进行exe程序配置;如需要兼容64位操作系统,需点击 “Advanced Options”, 选择 “32-bit or 64-bit”, 进入设置页面,勾选 “Generate 64-bit executable” 选项
点击 Next, 进入 “Java invocation” 页面;点击右侧 “+” 图标,添加项目jar包以及所有依赖jar包;添加后点击下方 “…” 图标选择程序启动的 Main class;并输入启动参数(如需要)
点击 Next, 填写JRE版本;点击 “Advanced Options”, 选择 “Search sequence”, 点击右侧 “+” 图标,添加本地java安装路径下的jre路径;添加后把jre路径移到第一项(或者把默认的三项删掉)
一直点击 Next, 直到进入 “Finished” 页面;点击上方按钮可测试exe程序运行
保存 & 完成
采用jvmti方式对Class文件进行加密,使用C++生成加密和解密库,先用加密库对Jar包进行加密,将加密后的Jar包及解密库文件发布出去,执行时候需要JVM引入解密库文件,解密后执行
./JarEncrypt2/encrypt ## 加密库
—– encrypt.cpp
—– Makefile
./JarEncrypt2/decrypt ## 解密库
—–decrypt.cpp
—– Makefile
./JarEncrypt2/Encrypt.java ## Java加密执行文件
INCLUDEDIR = -I /home/jdk1.8/include -I /home/jdk1.8/include/linux
// Encrypt.java
// 只对特定类型和package下的文件加密
if (name.endsWith(".class") && name.startsWith("com/du/")) {
// decrypt.cpp
// 设置需要解密的package
if (name && strncmp(name, "com/du/", 7) == 0) {
javac Encrypt.java
java -Djava.library.path=./encrypt/ -cp . Encrypt -src test.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 3455696313 in class file
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/JarEncrypt2/decrypt
java -agentlib:linux -jar test_encrypt.jar
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。