v1.8.1 · 已发布 Maven Central

守护你的 Java 字节码
让反编译工具 一览无余 → 一无所获

源盾(Code Shield)面向 JVM 字节码的端到端防逆向保护产品。
基于自研防逆向保护引擎,Gradle / Maven 插件自动加密,M1 全加密默认推荐,框架类可选 M2 方法体加密,只加密显式配置的类,适合从试点到全量的逐步递进。

3种加密模式
防逆向保护引擎
自动化支持CD/CI自动化工具
低误伤白名单可控
3平台Windows · Linux · macOS
为什么选择源盾

为生产环境设计的 源码保护

不止是一款防逆向保护工具,更是嵌入到你构建流水线里的代码资产防护方案。

自动化流程支持得更好

Gradle 插件原生集成,bceProtect 任务自动 dependsOn jar,构建过程中完成加密,无需手工运行 CLI、无需替换产物

// build.gradle
plugins {
id 'com.telecwin.codeshield.jvm' version '1.8.1'
}
bceProtect {
licenseKey = 'YOUR-LICENSE-KEY'
password = '...'
}
$ gradle bceProtect build/libs/app-protected.jar
  • Maven 插件绑定 package 生命周期
  • 支持依赖 JAR 同步加密(extraJars
  • CI/CD 流水线开箱即用,无需额外依赖
🧠

自动分析并生成初始配置

还在为"哪些类该加密"发愁?bceAnalyze 任务一键扫描,自动排除 Spring / JPA / SPI 等框架敏感类,输出可复用的 YAML 候选清单。

  • 智能识别 Spring 组件 / JPA 实体 / Mybatis / Hibernate / SPI
  • YAML 候选可直接作为配置使用
🎯

只加密显式配置的类

采用 白名单(opt-in)模型,未列入的类不会被处理,行为可预期。适合从 1 个工具类试点 → 逐步扩展到全量的递进式接入。

  • 试点期:1 个工具类即可验证
  • 推广期:逐个验证后扩展
  • 稳定期:自动持续发现候选
3种 加密模式

M1 全加密 / M2 方法体加密 / 混合,按需选择

M1 全加密安全等级高,反编译后仅剩类名,是默认推荐模式;M2 方法体加密保留完整类结构、充分兼容 Spring 等主流框架。同一 JAR 中可混合使用。源盾采用自研防逆向保护引擎进行字节码保护。

M1 全加密 默认 · 推荐

整个 class 文件整体加密,并替换为一个仅保留类名的 Stub。反编译后只剩下类名,方法、字段、注解、字节码全部不可见。

  • ✅ 整个 class 文件加密 + Stub 替换,安全等级高
  • ✅ 默认推荐,最大化保护核心代码
  • ✅ 适合:纯内部工具类、加密算法、License 实现、SDK 核心模块
  • ⚠️ 不适合:Spring 组件、抽象类(破坏 CGLIB 代理)
  • ⚠️ Stub 无方法签名,框架扫描会失败
com/example/CryptoHelper.class
// 整个 class 加密为 Stub
public class CryptoHelper {
    ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
    ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
    ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
}

M2 方法体加密 框架兼容

仅加密 class 文件的 Code 属性,保留完整的类结构(类名、注解、字段、方法签名、接口)。对需要框架扫描的类使用,兼容 Spring、JPA、AOP/CGLIB 等主流框架。

  • ✅ Spring 组件扫描、@Autowired、AOP / CGLIB 代理
  • ✅ Hibernate / JPA 实体扫描、Jackson 序列化
  • ✅ Web 路由扫描、Grails GORM、OSGi
  • ✅ 反编译后方法体为乱码,字符串为下划线占位符
com/example/UserService.class
// 保留:类名、方法签名、注解、字段
@Service
public class UserService {
    @Autowired
    private UserDao userDao;

    public User findById(Long id) {
        ▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓▓ ▓▓▓▓▓ ▓▓▓▓▓
        ▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓ ▓▓▓▓
    }
}

M1 + M2 混合模式 灵活

同一 JAR 中按类显式选择不同的加密策略。核心算法用 M1 全加密,框架业务类用 M2,两种模式兼得。

  • ✅ 通过 fullEncryptClasses 显式指定 M1 名单
  • ✅ 同一 class 不会被重复加密(M1/M2 互斥)
  • ✅ Agent 解密时自动检测格式
  • ✅ 一份配置覆盖整个 JAR
bce-full-encrypt.yaml
fullEncryptClasses:
  - com.example.util.CryptoHelper      # M1 全加密
  - com.example.algorithm.AESUtil        # M1 全加密
  - com.example.license.LicenseChecker  # M1 全加密

# 其余类(Spring 组件等)自动 M2 方法体加密
# com.example.controller.*   → M2
# com.example.service.*      → M2
实际效果

JD-GUI 打开加密前后 对比

左边是原始代码,右边是源盾加密后的反编译结果。

🔓 加密前 UserService.java
package com.example;

import org.springframework.stereotype.Service;

@Service
public class UserService {
    private static final String API_URL =
        "https://api.example.com/v2/user";

    public User login(String username,
                          String password) {
        HttpClient client = new HttpClient();
        String token = client.post(API_URL,
            username, password);
        if (token == null) {
            throw new AuthException(
                "login failed for " + username);
        }
        return new User(username, token);
    }
}
🔒 加密后 JD-GUI / CFR 反编译
package com.example;

import org.springframework.stereotype.Service;

@Service
public class UserService {
    private static final String API_URL =
        "___________________";

    public User login(String username,
                          String password) {
        ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓
        ▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓
        ▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓
        ▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓
        ▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓
        ▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓
    }
}
横向对比

源盾 vs 传统方案

在反编译可见性、框架兼容性、构建集成度等关键维度上的差异。

维度
名称混淆方式
同类商业工具
源盾
反编译后是否可见源码
😢 可读源码
😊 不可读
😊 不可读
字符串常量是否可见
😢 明文
😊 加密
😊 加密并显示占位符
框架兼容性(Spring/JPA)
😐 需较多 keep
😐 因实现而异
😊 框架兼容
构建工具集成
😐 单一工具
😐 GUI 程序
😊 支持 gradle、maven 和 CLI
自动发现候选类
😢 无
😐 因实现而异
😊 自动发现工具
默认安全策略
😐 黑名单
😐 因实现而异
😊 白名单
适合逐步递进
😢 难递进
😐 因实现而异
😊 友好递进
适用场景

Java 程序都可以用 源盾 进行保护

不区分行业与规模,任何需要保护 Java 字节码的 Java 程序都可以使用源盾;默认推荐 M1 全加密,框架类可选用 M2 方法体加密,同一 JAR 中可混合使用。

📦

SDK / 中间件厂商

SDK 内部核心算法与对外 API 类默认均推荐 M1 全加密;需要 Spring 等框架扫描的类可选用 M2 方法体加密,再叠加名称混淆 + 字符串加密防止 IP 被复刻。

🔐

独立工具 / 算法类

加密算法、License 校验、离线工具等不需要框架扫描的纯内部类,推荐 M1 全加密,反编译后仅剩类名,安全等级更高。

🏛️

防止核心逻辑被反编译

关键算法类与业务类默认均推荐 M1 全加密;需要 Spring 等框架扫描的类可选用 M2 方法体加密,自研防逆向保护引擎加持,兼顾代码保护与运行稳定。

☁️

SaaS 多租户后端

M1 全加密 + 字符串加密,保护核心业务逻辑与关键算法不被反编译复刻,降低商业逻辑外泄风险;需要框架扫描的类可选用 M2 方法体加密。

🖥️

JavaFX / 桌面应用

核心算法类与 UI / 业务类默认均推荐 M1 全加密;需要 JavaFX 框架扫描的类可选用 M2 方法体加密,配合 Native Agent 启动参数实现端到端保护。

🧪

试点 / 验证

从 1 个工具类开始验证,白名单模型误伤风险低,逐步扩展。

平台支持

三大主流平台,开箱即用

插件 JAR 内嵌三平台原生组件,构建与部署时按操作系统自动提取,无需额外下载;同一份加密 JAR,配合对应平台的 Native Agent 即可在三个平台运行。

🖥️
x86_64

Windows

Windows 10 / 11 与 Windows Server。

bce-protect.exebce_agent.dll
🐧
x86_64

Linux

Ubuntu / Debian / CentOS / 银河麒麟等信创系统。

bce-protectlibbce_agent.so
🍎
arm64Apple Silicon

macOS

macOS 14 起(M1–M5 芯片)。

bce-protectlibbce_agent.dylib

运行端仅需 JDK 8+:-agentpath:./bce_agent.dll=…(Windows)· ./libbce_agent.so=…(Linux)· ./libbce_agent.dylib=…(macOS)

快速开始

3 行命令,开始加密

源盾提供三种集成方式,覆盖从 IDE 到 CI/CD 的全场景。

Gradle 插件(推荐)

插件发布在 Maven Central。两种接入方式:plugins {}(需先在 settings.gradle 的 pluginManagement 声明 mavenCentral() 为插件仓库);
buildscript {} + apply plugin(不便改 settings.gradle 时):

  • ✅ 产物输出:build/libs/<artifact>-<version>-protected.jar
  • ✅ 任务 bceProtect 自动 dependsOn jar
  • ✅ 支持 extraJars 加密依赖 JAR
settings.gradle(必须:声明插件下载仓库)
// Gradle 默认只查 Plugin Portal;源盾插件在 Maven Central,需显式声明
pluginManagement {
    repositories {
        mavenCentral()
        gradlePluginPortal()  // 其他插件兜底的,保留
    }
}
build.gradle(plugins {} 方式)
// 1) 一次性生成安全包裹的密码(请妥善保存)
$ ./gradlew bceGeneratePassword --no-daemon
> RJreKJXd58bYAcizcFsClEFCRmCve0AM27YWaoqTpDQ=

// 2) 在 build.gradle 中粘贴该密码
plugins {
    id 'com.telecwin.codeshield.jvm' version '1.8.1'
}

bceProtect {
    // 许可证密钥(向塔尔旺商务购买,也可用环境变量 BCE_LICENSE_KEY)
    licenseKey     = 'YOUR-LICENSE-KEY'
    password       = 'RJreKJXd58bYAcizcFsClEFCRmCve0AM27YWaoqTpDQ='
    encryptStrings = true
    excludeStrings = ['java.', 'org.springframework']
    configFile     = 'bce-full-encrypt.yaml'  // 可选,但推荐添加

    // 名称混淆
    obfuscationEnabled       = true
    obfuscationClasses       = ['com.example.SecretUtil']
    obfuscationGenerateMapping = true
}
build.gradle(buildscript {} 方式,不便改 settings.gradle 时)
buildscript {
    repositories {
        mavenCentral()
        // v1.8.1 起插件发布在 Maven Central,无需其他仓库
    }
    dependencies {
        classpath 'com.telecwin.codeshield:codeshield-gradle-plugin:1.8.1'
    }
}

apply plugin: 'com.telecwin.codeshield.jvm'

bceProtect {
    licenseKey     = 'YOUR-LICENSE-KEY'
    password       = 'RJreKJXd58bYAcizcFsClEFCRmCve0AM27YWaoqTpDQ='
    encryptStrings = true
}
$ ./gradlew bceProtect --no-daemon

Maven 插件

pom.xml 中添加插件,绑定到 package 生命周期:

  • mvn package 一行命令完成加密
  • ✅ 产物输出:target/<artifact>-<version>-protected.jar
  • ✅ 与现有 Maven 构建流程无缝集成
pom.xml
<!-- 1) 一次性生成安全包裹的密码 -->
$ mvn com.telecwin.codeshield:codeshield-maven-plugin:1.8.1:generate-password
> RJreKJXd58bYAcizcFsClEFCRmCve0AM27YWaoqTpDQ=

<!-- 2) 在 pom.xml 中粘贴该密码 -->
<plugin>
    <groupId>com.telecwin.codeshield</groupId>
    <artifactId>codeshield-maven-plugin</artifactId>
    <version>1.8.1</version>
    <configuration>
        <licenseKey>YOUR-LICENSE-KEY</licenseKey>
        <password>RJreKJXd58bYAcizcFsClEFCRmCve0AM27YWaoqTpDQ=</password>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>protect</goal>
                <goal>extract-agent</goal>
            </goals>
        </execution>
    </executions>
</plugin>
$ mvn package

命令行 CLI(无外部依赖)

适合未使用 Gradle/Maven 的项目,或作为 CI 流水线的独立步骤:

  • ✅ 单文件 bce-protect,Windows / Linux / macOS 三平台
  • ✅ 无外部依赖,无需预装 JVM
  • ✅ 适合 Docker / 容器化 CI
bce-protect.exe 参数说明
# 1) 一次性生成安全包裹的密码
$ bce-protect.exe --generate-password
> RJreKJXd58bYAcizcFsClEFCRmCve0AM27YWaoqTpDQ=

# 2) 加密 JAR(密码经安全包裹,源码中不出现明文)
$ bce-protect \
    input.jar \
    output-protected.jar \
    RJreKJXd58bYAcizcFsClEFCRmCve0AM27YWaoqTpDQ= \
    true "java.,org.springframework" \
    --full-encrypt=com.example.CryptoHelper,com.example.AESUtil \
    --license-key=YOUR-LICENSE-KEY

# 3) 运行时启动(密码同样以安全包裹形式提供)
$ java -agentpath:./bce_agent.dll=RJreKJXd58bYAcizcFsClEFCRmCve0AM27YWaoqTpDQ= \
       -jar output-protected.jar   # Windows

$ java -agentpath:./libbce_agent.so=RJreKJXd58bYAcizcFsClEFCRmCve0AM27YWaoqTpDQ= \
       -jar output-protected.jar   # Linux
$ java -agentpath:./bce_agent.dll=... -jar output-protected.jar
立即开始

保护你的 JVM 应用,
从今天开始

商务咨询、技术支持,请联系北京塔尔旺科技有限公司。

📧 contact@telecwin.com · 北京塔尔旺科技有限公司