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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: jar包加密防止反编译--classFinal

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


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


网上找了几个,觉得还是classFinal这个比较满意,加密选择灵活,支持springboot项目,操作简单。


将项目下载下来,打卡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           无需确认,不加此参数会提示确认以上信息

这样在执行maven的package命令的时候就会自动在target目录下生成加密后的jar包。

将自己需要的配置设置好之后,最好重新一下install一下maven的包,然后package。

在target中出现了加密前的jar包和加密后的jar包:

20201123112233742.png

使用Javaagent命令启动项目:

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

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

我们打开加密后的jar包看一下加密效果:

可以看到加密后,方法中的实现被隐藏掉了。加密的需求达到了。

当项目启动后,class被classloader加载时,真正的方法体会被解密注入。


如何在指定机器上使用?

在maven的插件配置上添加< code >标签,里面的机器码内容需要手动去生成。

将classFinal的项目中的ckassFinal-fatjar模块打成jar包

执行java -jar classfinal-fatjar.jar -C 命令。

会生成机器码,在target目录中也会有一份

将机器码填入code标签再package即可。

这样jar包就只能在生成机器码的设备上使用,在别的设备使用启动jar包的时候会报出机器码有误的内容。

目录
相关文章
|
7月前
|
设计模式 数据可视化 Java
JD-GUI和JAD对War包和Jar包进行反编译教学
JD-GUI和JAD是两个用于反编译Java字节码的工具。代码调试:当你需要调试Java代码时,可以使用JD-GUI将Java类反编译为可读的源代码,以便进行调试和分析。代码分析:如果你需要对Java类进行深入的分析,例如了解代码结构、方法调用关系等,可以使用JD-GUI来反编译Java类,并查看反编译后的源代码。代码重构:如果你需要修改现有的Java类,可以使用JD-GUI将Java类反编译为可读的源代码,然后进行修改。注意,反编译后的源代码可能不完全与原始源代码相同,因此在进行修改时需要谨慎。
649 1
|
算法 安全 Java
Java源码混淆,jar包加密,禁止反编译jar包
本文中介绍使用 XJar 对jar包进行加密。
2252 1
Java源码混淆,jar包加密,禁止反编译jar包
|
2月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
228 2
|
7月前
|
算法 Java Maven
Spring Boot项目Jar包加密基本概念
Jar包加密是一种将Spring Boot项目的Jar包进行加密的技术,以保护项目中的代码和资源不被未授权访问和篡改。通过Jar包加密,可以将Jar包中的所有文件转换成加密的格式,只有拥有正确密钥的客户端才能解密和访问这些文件。
834 0
|
7月前
|
Java
Java【付诸实践 04】Jar包class文件反编译、修改、重新编译打包方法(含反编译工具jd-gui-windows-1.6.6.zip百度云资源)
Java【付诸实践 04】Jar包class文件反编译、修改、重新编译打包方法(含反编译工具jd-gui-windows-1.6.6.zip百度云资源)
844 0
|
Java Linux Android开发
坚持60s(jar反编译)
坚持60s(jar反编译)
62 0
|
Java 芯片 开发者
JD-GUI 反编译jar包
JD-GUI 反编译jar包,
221 0
|
Java Android开发
Android反编译:使用dex2jar查看dex文件
Android反编译:使用dex2jar查看dex文件
815 0
|
存储 安全 算法
iOS 防止反编译加密方法
对NSUserDefaults,sqlite存储文件数据加密,保护帐号和关键信息
249 0
|
5月前
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
554 2
[JarEditor]可直接修改jar包的IDEA插件