JarEncrypt2是一个jar包加密工具,类加载器基于jvmti实现,可以有效防止java代码被反编译,支持CentOS、Ubuntu等Linux环境,和MacOSX环境。
下载
检测环境变量
打印环境变量JAVA_HOME
echo ${JAVA_HOME}
OSX:
/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
Linux:
/usr/local/jdk
如果配置Java环境时没有定义该变量,则输出为空,需要编辑decrypt/Makefile和encrypt/Makefile,替换$(shell echo ${JAVA_HOME}),或者定义一个零时变量:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
变量值根据Java安装路径进行修改。
修改加密范围
编辑Encrypt.java
vim Encrypt.java
第80行代码:
if (name.endsWith(".class") && name.startsWith("com/***/foo/abr")) {
替换com/***/foo/abr为需要加密的包名。
编辑decrypt/decrypt.cpp
vim decrypt/decrypt.cpp
第26行代码:
if (name && strncmp(name, "com/***/foo/adr", 12) == 0)
替换com/***/foo/abr为需要加密的包名。
修改密码
编辑decrypt/decrypt.cpp
vim decrypt/decrypt.cpp
第30行代码:
my_data[i] = class_data[i] ^ 0x1f;
替换0x1f;
编辑encrypt/encrypt.cpp
vim encrypt/encrypt.cpp
第16行代码:
dst[i] = dst[i] ^ 0x1f;
替换0x1f, 两处数值必须一致。
编译
javac Encrypt.java
cd encrypt && make && cd -
cd decrypt && make && cd -
加密
java -Djava.library.path=./encrypt/ Encrypt -src demo.jar -dst demo_encrypt.jar
- java.library.path
指定libencrypt.so或libencrypt.dylib所在的路径
- src
需要加密的jar文件的路径
- dst
指定加密后的jar文件路径,缺省则以_encrypt.jar保存在原jar文件路径
解密
检测当前环境是否存在LD_LIBRARY_PATH变量
echo ${LD_LIBRARY_PATH}
追加JarEncrypt2/decrypt
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/data/JarEncrypt2/decrypt
或者替换
export LD_LIBRARY_PATH=/data/JarEncrypt2/decrypt
- Linux
java -agentlib:linux -jar demo_encrypt.jar
- OSX
java -agentlib:darwin -jar demo_encrypt.jar
JarEncrypt2是一款强大的jar包加密工具,基于jvmti实现,能有效防止Java代码被反编译。支持在多种环境中使用,包括CentOS、Ubuntu、MacOSX。本文详细介绍其下载、环境配置、加密范围及密码修改、编译和加密解密流程。
4157

被折叠的 条评论
为什么被折叠?



