# xjar-plus **Repository Path**: daoos_admin/xjar-plus ## Basic Information - **Project Name**: xjar-plus - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-08-13 - **Last Updated**: 2025-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # XJAR-Plus Spring Boot JAR 安全加密工具,提供对JAR包的加密和运行时解密功能,同时支持JDK8~21。 ## 简介 Spring Boot JAR 安全加密工具,同时支持JDK8~21,支持Spring Boot 3.4.2。 ## 功能特性 1. **无代码侵入**:只需少量配置即可完成JAR包加密 2. **完全内存加密**:无需解压JAR包到磁盘 3. **动态插件加载**:支持插件化架构,可动态加载加密插件 4. **多种加密策略**:支持ANT表达式或正则表达式指定加密路径 5. **自定义参数**:支持自定义JVM参数、启动参数等 6. **安全保护**:支持设置启动器有效期,防止非法使用 7. **License生成与校验**:支持生成license文件,并校验code和有效期 8. **统一后缀**:所有加密后的包后缀均为`.x` 9. **支持生成Linux可执行文件**(可选) 10. **可视化界面**:提供图形界面用于简化加密操作 ## 技术架构 - 支持Spring Boot 3.4.2和JDK 21 - 支持自定义JDK打包,便于在目标机器运行 - 提供多种加密策略和过滤器机制 ## 系统架构 ``` +-------------------+ | Base Project | (基座项目) +-------------------+ | +-------------------+ | XJar Launcher | (启动器) +-------------------+ | +-------------------+ +------------------+ | Plugin Manager |<--->| Plugin A/B/C | (插件项目) +-------------------+ +------------------+ ``` ## 动态插件加载功能说明 XJAR-Plus 支持插件化架构,可以将应用拆分为基座项目和多个插件项目,实现动态加载和热插拔功能。 ### 插件化架构优势 - **模块化开发**:将大型应用拆分为多个独立插件,降低系统复杂度 - **动态扩展**:支持运行时加载/卸载插件,实现系统功能的热扩展 - **权限隔离**:不同插件可在不同的安全上下文中运行 - **版本管理**:支持插件版本控制,实现版本回滚和升级 ### 插件管理器 XJAR-Plus 提供了 `XPluginManager` 类用于管理插件的生命周期和类加载: ```java // 创建插件管理器 XPluginManager pluginManager = new XPluginManager( "path/to/plugins", // 插件目录 parentClassLoader, // 父类加载器 decryptor, // 解密器 encryptor, // 加密器 key // 密钥 ); // 加载所有插件 pluginManager.loadPlugins(); // 获取插件 XPluginManager.Plugin plugin = pluginManager.getPlugin("plugin-a"); Class pluginClass = plugin.loadClass("com.plugin.a.PluginA"); ``` ### 插件加密与加载流程 1. **插件加密**:使用 `asPlugin()` 方法标记插件模式进行加密 ```java XCryptos.encryption() .from("path/to/plugin-a.jar") .password("plugin-a-password") .asPlugin() // 标记为插件模式 .to("output/plugins", "plugin-a.jar"); ``` 2. **插件加载**:基座项目启动时自动加载 plugins 目录中的插件 3. **运行时管理**:可通过 API 动态控制插件的加载、卸载和调用 ### 使用建议 - 插件间应保持松耦合,通过定义清晰的接口进行通信 - 建议为插件系统设计良好的版本管理机制 - 对于需要热更新的场景,需注意类加载器的生命周期管理 - 插件目录结构应保持清晰,建议按插件ID或版本进行子目录划分 ## 可视化界面使用说明 本项目提供了一个图形用户界面,用于简化加密操作。界面支持以下功能: 1. 选择基座项目JAR包并设置密码 2. 选择插件目录,自动识别所有插件JAR包 3. 对每个插件单独设置密码 4. 执行加密操作 ### 启动GUI 编译项目后,可以通过以下命令启动GUI界面: ```bash java -jar target/xjar-plus-3.4.2.jar ``` 或者直接运行[io.xjar.gui.XJarGUI](file:///home/daoos/IdeaProjects/xjar-plus/src/main/java/io/xjar/gui/XJarGUI.java#L19-L328)类的main方法。 ### 使用步骤 1. 点击"浏览..."按钮选择基座项目JAR文件 2. 输入基座项目的密码 3. 选择插件目录(包含所有需要加密的插件JAR文件) 4. 系统会自动扫描插件目录并列出所有插件 5. 为每个需要加密的插件设置密码(可选择性加密) 6. 选择输出目录 7. 点击"开始加密"按钮执行加密操作 > 注意:加密后的文件后缀会统一改为`.x`,而非原始的`.jar`扩展名 ### 输出结构 加密完成后,输出目录将包含以下结构: ``` output/ ├── encrypted/ │ ├── base.x # 加密后的基座项目(后缀为.x) │ └── plugins/ │ ├── plugin-a.x # 加密后的插件A(后缀为.x) │ ├── plugin-b.x # 加密后的插件B(后缀为.x) │ └── ... # 其他插件 ``` ## 使用方法 ### 1. 基础加密 ```java // 加密Spring Boot项目 XCryptos.encryption() .from("path/to/project.jar") .password("your-password") .include("com/package/**") .exclude("static/**") .to("path/to/output", "encrypted.jar"); ``` ### 2. 插件化架构 支持将项目拆分为基座项目和多个插件项目: ```java // 加密基座项目 XCryptos.encryption() .from("path/to/base-project.jar") .password("base-password") .include("com/framework/**") .to("output", "base.jar"); // 加密插件项目 XCryptos.encryption() .from("path/to/plugin-a.jar") .password("plugin-a-password") .asPlugin() // 标记为插件模式 .to("output/plugins", "plugin-a.jar"); ``` ## 运行加密后的项目 1. 将加密后的基座项目和插件项目部署到目标机器 2. 确保插件JAR包放置在基座项目目录下的"plugins"子目录中 3. 运行基座项目,系统会自动加载plugins目录中的所有插件 ## 注意事项 1. JDK ZIP包必须为根目录结构,不能有多层目录 2. 时间校验依赖宿主机时间,若修改时间可能导致校验失效 3. 使用Arthas等工具仍可能通过JVM Agent获取运行时类信息,建议添加`-XX:+DisableAttachMechanism`参数防止