java代码禁⽌反编译_Java代码防⽌反编译
今天因为需要,需要对内部的Java代码进⾏加密保护。由于时间紧迫,于是搜了很多⽹站。代码保护⼤家常⽤的⽅法⼤概有如下⼏种:
1)代码混淆,即使⽤代码混淆的⼯具,将程序结构打乱,这样即使源代码被反编译了,仍然很难梳理出程序的正常逻辑结构;
2)代码隔离。即在别的服务器上仅仅存放页⾯的代码,实际的应⽤程序访问到⾃⼰的服务器上。这种保护效果也⽐较好,问题就是,如果被部署服务器和访问服务器之间⽹络⽆法共通,那么此⽅法则不可⾏。
3)本地代码保护,通过本地加密技术动态⽣成可执⾏的jar包,将加密之后的应⽤发布,则在反编译时,需要输⼊密码,如果⽆密码,则⽆法解密。
4)通过加密⼯具进⾏加密,之后发布已经加密的包,通过GO语⾔⽣成的动态脚本执⾏启动命令。
今天我使⽤到的就是第四种,通过GO语⾔动态⽣成执⾏⽂件的⽅式启动java程序。
下⾯就是整个加密解密的过程:
1).通过idea或者Eclipse开发⼯具,将要部署的源代码打成jar包;
2)单独写⼀个test⽅法,执⾏以下逻辑对⽣成的jar包进⾏加密。ption() .from( "/XXXX/test.jar" ) .use( "123456" ) .include( "/com/123/**/*.class" ) .include( "/mapper/**/*l" ) .exclude( "/static/**/*" ) .exclude( "/conf/*" ) .to( "XXX/backend-gateway.jar" );
注:其中的from函数中的参数是已经打包好的jar包的绝对路径,to函数中的参数为加密后的jar⽂件的输出绝对路径;
use函数的参数是加密的密码;
include函数的参数为指定需要加密的class⽂件
exclude函数为加密时,需要排除的⼀些静态⽂件
3)在编译环境中安装GO环境,具体⽅法可以⽹上搜索。
4)在输出jar包的⽬录中有⼀个的⽂件,⽤cmd命令⾏进⼊到当前⽬录执⾏:build
5)windows环境编译完后可得到⼀个 ⽂件,linux环境的执⾏脚本问xjar⽂件;具体可参考:
github/core-lib/xjar中的⽅法
6)执⾏程序启动命令,启动程序。
注意:⽣成的⽂件或者linux下的xjar⽂件,需要与启动脚本放同⼀⽬录;
例如:启动本地加密后的jar包:
正常执⾏启动命令:../boot/Test.jar --fig.location=../config/ --safetyuser.isEnableAnsi=false
加密之后的程序启动命令:
C:/Users/Laptop/Desktop/test/Myproject/bin/xjar java -jar ../boot/Test.jar --fig.location=../config/ --safetyuser.isEnableAnsi=false
即可启动程序。
注意:加密时所使⽤的jdk的版本,与启动时所使⽤的jdk版本应保持⼀⾄,否则启动会报如下错误:Exception in thread "main"
java.lang.RuntimeException: java.lang.ClassCastException: jdk.internal.loader.ClassLoaders$AppCl
assLoader (in module: java.base) cannot be cast to java.URLClassLoader (in module: java.base)
若出现以上问题,将加密时使⽤的JDK指定为启动JDK,具体如下:
C:/Users/Laptop/Desktop/test/Myproject/bin/xjar C:/ProgramFile/java/jdk_1.8_0.161/bin/java -jar ../boot/Test.jar --fig.location=../config/ --safetyuser.isEnableAnsi=false
java源代码加密加⿊部分为JDK的安装⽬录。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。