User-Profile-Image
hankin
  • 5
  • Java
  • Kotlin
  • Spring
  • Web
  • SQL
  • MegaData
  • More
  • Experience
  • Enamiĝu al vi
  • 分类
    • Zuul
    • Zookeeper
    • XML
    • WebSocket
    • Web Notes
    • Web
    • Vue
    • Thymeleaf
    • SQL Server
    • SQL Notes
    • SQL
    • SpringSecurity
    • SpringMVC
    • SpringJPA
    • SpringCloud
    • SpringBoot
    • Spring Notes
    • Spring
    • Servlet
    • Ribbon
    • Redis
    • RabbitMQ
    • Python
    • PostgreSQL
    • OAuth2
    • NOSQL
    • Netty
    • MySQL
    • MyBatis
    • More
    • MinIO
    • MegaData
    • Maven
    • LoadBalancer
    • Kotlin Notes
    • Kotlin
    • Kafka
    • jQuery
    • JavaScript
    • Java Notes
    • Java
    • Hystrix
    • Git
    • Gateway
    • Freemarker
    • Feign
    • Eureka
    • ElasticSearch
    • Docker
    • Consul
    • Ajax
    • ActiveMQ
  • 页面
    • 归档
    • 摘要
    • 杂图
    • 问题随笔
  • 友链
    • Spring Cloud Alibaba
    • Spring Cloud Alibaba - 指南
    • Spring Cloud
    • Nacos
    • Docker
    • ElasticSearch
    • Kotlin中文版
    • Kotlin易百
    • KotlinWeb3
    • KotlinNhooo
    • 前端开源搜索
    • Ktorm ORM
    • Ktorm-KSP
    • Ebean ORM
    • Maven
    • 江南一点雨
    • 江南国际站
    • 设计模式
    • 熊猫大佬
    • java学习
    • kotlin函数查询
    • Istio 服务网格
    • istio
    • Ktor 异步 Web 框架
    • PostGis
    • kuangstudy
    • 源码地图
    • it教程吧
    • Arthas-JVM调优
    • Electron
    • bugstack虫洞栈
    • github大佬宝典
    • Sa-Token
    • 前端技术胖
    • bennyhuo-Kt大佬
    • Rickiyang博客
    • 李大辉大佬博客
    • KOIN
    • SQLDelight
    • Exposed-Kt-ORM
    • Javalin—Web 框架
    • http4k—HTTP包
    • 爱威尔大佬
    • 小土豆
    • 小胖哥安全框架
    • 负雪明烛刷题
    • Kotlin-FP-Arrow
    • Lua参考手册
    • 美团文章
    • Java 全栈知识体系
    • 尼恩架构师学习
    • 现代 JavaScript 教程
    • GO相关文档
    • Go学习导航
    • GoCN社区
    • GO极客兔兔-案例
    • 讯飞星火GPT
    • Hollis博客
    • PostgreSQL德哥
    • 优质博客推荐
    • 半兽人大佬
    • 系列教程
    • PostgreSQL文章
    • 云原生资料库
    • 并发博客大佬
Help?

Please contact us on our email for need any support

Support
    首页   ›   Java   ›   正文
Java

SpringBoot—jar包加密防止反编译

2023-12-21 18:13:32
873  0 1

阅读完需:约 4 分钟

ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。

可以直接加密 jar 包或 war 包,而无需修改任何项目代码。还可以设置 jar 包的启动密码,严格控制使用人员的权限。并且支持绑定机器,使得加密后的 jar 包只能在特定机器上运行。这就像给 jar 包加上了一把锁,只有拥有钥匙的机器和人员才能打开并运行它。希望这个解决方案能帮助大家解决类似的烦恼,保障软件的安全与权益。

要使用 ClassFinal,首先我们要下载 ClassFinal.jar

如果我们想绑定指定机器运行,需要通过如下命令去获取机器码:

java -jar classfinal-fatjar-1.2.1.jar -C

如果我们想直接对打包好的 jar 进行加密,可以通过如下的加密命令对目标 jar 进行加密:

java -jar classfinal-fatjar.jar -file yourpaoject.jar -libjars a.jar,b.jar -packages com.yourpackage,com.yourpackage2 -exclude com.yourpackage.Main -pwd 123456 -Y

参数说明
-file        加密的jar/war完整路径
-packages    加密的包名(可为空,多个用","分割)
-libjars     jar/war包lib下要加密jar文件名(可为空,多个用","分割)
-cfgfiles    需要加密的配置文件,一般是classes目录下的yml或properties文件(可为空,多个用","分割)
-exclude     排除的类名(可为空,多个用","分割)
-classpath   外部依赖的jar目录,例如/tomcat/lib(可为空,多个用","分割)
-pwd         加密密码,如果是#号,则使用无密码模式加密
-code        机器码,在绑定的机器生成,加密后只可在此机器上运行
-Y           无需确认,不加此参数会提示确认以上信息

如果我们不想每次打包后都手动执行一次加密命令的话,可以通过 maven 插件的方式使用 ClassFinal。这样的话,我们的 maven 项目每次打包时都会自动使用 ClassFinal 加密。


<plugin>
    <groupId>net.roseboy</groupId>
    <artifactId>classfinal-maven-plugin</artifactId>
    <version>1.2.1</version>
    <configuration>
         <!--设置启动 jar 包的密码,加密打包之后 pom.xml 会被删除,不用担心在 jar 包里找到此密码-->
        <password>000000</password>
        <!-- 加密的包名,如果有多个就用逗号隔开 -->
        <packages>com.enmalvi.flowable</packages>
        <!-- 加密的配置文件,如果有多个就用逗号隔开 -->
        <cfgfiles>application.yml</cfgfiles>
        <!-- 不需要加密的包名,如果有多个就用逗号隔开 -->
        <excludes>org.spring</excludes>
         <!-- jar 包中 lib 目录下需要加密的 jar 依赖,如果有多个就用逗号隔开 -->
        <libjars>novel-common.jar</libjars>
        <!-- 机器码,在绑定的机器生成,加密后只可在此机器上运行 -->
        <code>158478CA8276D5BFCCB6D</code>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>classFinal</goal>
            </goals>
        </execution>
    </executions>
</plugin>

结果: 生成 Flowable-encrypted.jar,这个就是加密后的jar文件;加密后的文件不可直接执行,需要配置javaagent。

通过如下命令来启动加密后的 jar:

java -javaagent:Flowable-encrypted.jar='-pwd 000000' -jar Flowable-encrypted.jar

参数说明

  • -pwd 加密项目的密码
  • -pwdname 环境变量中密码的名字

如果输入的密码不正确则会启动失败

如果不是在指定机器上运行也会启动失败

查看反编译后的 application.yml 配置文件发现只剩一片空白:

查看反编译后的方法,发现所有的方法体都被清空了,只保留了方法参数、注解等信息:

项目地址:https://gitee.com/jia_hui_xu/classfinal

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

1 打赏
Enamiĝu al vi
不要为明天忧虑.因为明天自有明天的忧虑.一天的难处一天当就够了。
543文章 68评论 294点赞 593775浏览

随机文章
WebSocket(二)
5年前
SpringSecurity—防御 CSRF 攻击
4年前
MyBatis笔记15—查询缓存
5年前
RabbitMQ——发布订阅模式
5年前
SpringCloud—Gateway(四)Filter(过滤器)
5年前
博客统计
  • 日志总数:543 篇
  • 评论数目:68 条
  • 建站日期:2020-03-06
  • 运行天数:1927 天
  • 标签总数:23 个
  • 最后更新:2024-12-20
Copyright © 2025 网站备案号: 浙ICP备20017730号 身体没有灵魂是死的,信心没有行为也是死的。
主页
页面
  • 归档
  • 摘要
  • 杂图
  • 问题随笔
博主
Enamiĝu al vi
Enamiĝu al vi 管理员
To be, or not to be
543 文章 68 评论 593775 浏览
测试
测试
看板娘
赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付