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