在部署SpringBoot项目时,如果不对其进行加密,源码就会有泄露的风险。具体来说,当攻击者获得到我们部署的jar
包之后,通过jd-gui
工具对其进行反编译即可看到源码。所以需要在打包之前对项目文件进行加密。我查到的加密工具有xjar
、Proguard
等。这篇文章以xjar
为例对SpringBoot项目进行加密打包。
maven
,用于打包SpringBoot项目jd-gui
,用于对打包文件进行反编译go
,用于对xjar打包的go文件进行编译maven
jd-gui
go
主要添加两个东西:
jitpack.io https://jitpack.io
xxx com.github.core-lib xjar-maven-plugin 4.0.2 xjar package build ${project.artifactId}-xjar.jar // 加密打包后的文件名
打包的时候会遇到下载的问题。
有的博客会把xjar打包所用的密码直接写到configuration配置节中,比如:
${project.artifactId}-xjar.jar your_password // 直接把密码写在这里
这样仍然会有问题。xjar是不会加密pom.xml文件的。当打包完成之后,攻击者对jar包进行反编译,还是可以看到打包所使用的密码,从而造成泄露。在第3步中会讲解密码应该写在哪里。
打开终端,执行如下命令:
mvn clean package -Dxjar.password= # 密码应该写在这里
产生的目录结构为:
其中,xxx-xjar.jar
是加密打包后的文件(文件名和在pom.xml中配置的相同)。之后我们部署主要用到两个文件:xxx-xjar.jar
和xjar.go
。
这里准备两版打包文件:没有使用xjar打包的未加密jar包(假设名字为xxx.jar
)、使用了xjar打包的加密jar包(xxx-xjar.jar
)。然后用jd-gui
分别打开xxx.jar
和xxx-xjar.jar
,观察文件结果。
这里就不放截图了,文字说明一下加密后的文件:文件大部分都为空,或者是乱码。
首先把xxx-xjar.jar
和xjar.go
上传到服务器上,然后对xjar.go
文件进行编译:
go build xjar.go
这一步会生成一个可执行文件xjar
。然后执行命令:
xjar java -jar xxx-xjar.jar
项目启动成功,说明部署完成。
SpringBoot2 集成xJar插件 动态解密jar包,避免源码泄露或反编译
xjar加密jar包
Linux操作系统配置Go编程环境