当前位置:   article > 正文

jar包加密防止反编译--classFinal

jar包加密防止反编译

有这样的需求,我们项目要部署在其他公司的服务器上,但是又不想让外人看到我们的源码。所以要对jar包中的内容进行加密。

加密方式一般有二,一是可以对class文件中的内容进行混淆,对类名和方法名等进行替换,使得代码阅读困难,但是不影响代码逻辑,多花时间还是可以解读出来的。二是对class文件进行一些操作加密,运行的时候再进行解密。

网上找了几个,觉得还是classFinal这个比较满意,加密选择灵活,支持springboot项目,操作简单。
项目地址:https://gitee.com/roseboy/classfinal

将项目下载下来,打卡README.md文档,里面介绍了几种使用方法。
我选择的是使用maven插件加密的方式。
在pom文件中加入:

    <!-- https://gitee.com/roseboy/classfinal -->
    <groupId>net.roseboy</groupId>
    <artifactId>classfinal-maven-plugin</artifactId>
    <version>${classfinal.version}</version>
    <configuration>
        <password>000000</password><!--加密打包之后pom.xml会被删除,不用担心在jar包里找到此密码-->
        <packages>com.yourpackage,com.yourpackage2</packages>
        <cfgfiles>application.yml</cfgfiles>
        <excludes>org.spring</excludes>
        <libjars>a.jar,b.jar</libjars>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>classFinal</goal>
            </goals>
        </execution>
    </executions>
</plugin>

参数说明
-file        加密的jar/war完整路径
-packages    加密的包名(可为空,多个用","分割)
-libjars     jar/war包lib下要加密jar文件名(可为空,多个用","分割)
-cfgfiles    需要加密的配置文件,一般是classes目录下的yml或properties文件(可为空,多个用","分割)
-exclude     排除的类名(可为空,多个用","分割)
-classpath   外部依赖的jar目录,例如/tomcat/lib(可为空,多个用","分割)
-pwd         加密密码,如果是#号,则使用无密码模式加密
-code        机器码,在绑定的机器生成,加密后只可在此机器上运行
-Y           无需确认,不加此参数会提示确认以上信息
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

这样在执行maven的package命令的时候就会自动在target目录下生成加密后的jar包。
将自己需要的配置设置好之后,最好重新一下install一下maven的包,然后package。
在target中出现了加密前的jar包和加密后的jar包:
在这里插入图片描述
使用Javaagent命令启动项目:

java -javaagent:yourpaoject-encrypted.jar -jar yourpaoject-encrypted.jar
  • 1

回车后会让输密码,没有设置密码的话直接再次回车,项目启动成功!

我们打开加密后的jar包看一下加密效果:
在这里插入图片描述
可以看到加密后,方法中的实现被隐藏掉了。加密的需求达到了。
当项目启动后,class被classloader加载时,真正的方法体会被解密注入。

如何在指定机器上使用?
在maven的插件配置上添加< code >标签,里面的机器码内容需要手动去生成。
将classFinal的项目中的ckassFinal-fatjar模块打成jar包
执行java -jar classfinal-fatjar.jar -C 命令。
会生成机器码,在target目录中也会有一份

在这里插入图片描述

在这里插入图片描述
将机器码填入code标签再package即可。
这样jar包就只能在生成机器码的设备上使用,在别的设备使用启动jar包的时候会报出机器码有误的内容。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/810256
推荐阅读
相关标签
  

闽ICP备14008679号