自动化流程支持得更好
Gradle 插件原生集成,bceProtect 任务自动 dependsOn jar,构建过程中完成加密,无需手工运行 CLI、无需替换产物。
- Maven 插件绑定
package生命周期 - 支持依赖 JAR 同步加密(
extraJars) - CI/CD 流水线开箱即用,无需额外依赖
不止是一款防逆向保护工具,更是嵌入到你构建流水线里的代码资产防护方案。
Gradle 插件原生集成,bceProtect 任务自动 dependsOn jar,构建过程中完成加密,无需手工运行 CLI、无需替换产物。
package 生命周期extraJars)全面采用自研防逆向保护引擎保护字节码,同时引入密码安全分发机制:加密解密均使用加密后的 Password,不必担心 Password 凭据泄露。
还在为"哪些类该加密"发愁?bceAnalyze 任务一键扫描,自动排除 Spring / JPA / SPI 等框架敏感类,输出可复用的 YAML 候选清单。
采用 白名单(opt-in)模型,未列入的类不会被处理,行为可预期。适合从 1 个工具类试点 → 逐步扩展到全量的递进式接入。
M1 全加密安全等级高,反编译后仅剩类名,是默认推荐模式;M2 方法体加密保留完整类结构、充分兼容 Spring 等主流框架。同一 JAR 中可混合使用。源盾采用自研防逆向保护引擎进行字节码保护。
对整个 class 文件整体加密,并替换为一个仅保留类名的 Stub。反编译后只剩下类名,方法、字段、注解、字节码全部不可见。
// 整个 class 加密为 Stub
public class CryptoHelper {
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
}
仅加密 class 文件的 Code 属性,保留完整的类结构(类名、注解、字段、方法签名、接口)。对需要框架扫描的类使用,兼容 Spring、JPA、AOP/CGLIB 等主流框架。
// 保留:类名、方法签名、注解、字段
@Service
public class UserService {
@Autowired
private UserDao userDao;
public User findById(Long id) {
▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓▓ ▓▓▓▓▓ ▓▓▓▓▓
▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓ ▓▓▓▓
}
}
同一 JAR 中按类显式选择不同的加密策略。核心算法用 M1 全加密,框架业务类用 M2,两种模式兼得。
fullEncryptClasses 显式指定 M1 名单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
左边是原始代码,右边是源盾加密后的反编译结果。
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);
}
}
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) {
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓
▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓
▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓
▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓
}
}
在反编译可见性、框架兼容性、构建集成度等关键维度上的差异。
不区分行业与规模,任何需要保护 Java 字节码的 Java 程序都可以使用源盾;默认推荐 M1 全加密,框架类可选用 M2 方法体加密,同一 JAR 中可混合使用。
SDK 内部核心算法与对外 API 类默认均推荐 M1 全加密;需要 Spring 等框架扫描的类可选用 M2 方法体加密,再叠加名称混淆 + 字符串加密防止 IP 被复刻。
加密算法、License 校验、离线工具等不需要框架扫描的纯内部类,推荐 M1 全加密,反编译后仅剩类名,安全等级更高。
关键算法类与业务类默认均推荐 M1 全加密;需要 Spring 等框架扫描的类可选用 M2 方法体加密,自研防逆向保护引擎加持,兼顾代码保护与运行稳定。
M1 全加密 + 字符串加密,保护核心业务逻辑与关键算法不被反编译复刻,降低商业逻辑外泄风险;需要框架扫描的类可选用 M2 方法体加密。
核心算法类与 UI / 业务类默认均推荐 M1 全加密;需要 JavaFX 框架扫描的类可选用 M2 方法体加密,配合 Native Agent 启动参数实现端到端保护。
从 1 个工具类开始验证,白名单模型误伤风险低,逐步扩展。
插件 JAR 内嵌三平台原生组件,构建与部署时按操作系统自动提取,无需额外下载;同一份加密 JAR,配合对应平台的 Native Agent 即可在三个平台运行。
Windows 10 / 11 与 Windows Server。
bce-protect.exebce_agent.dllUbuntu / Debian / CentOS / 银河麒麟等信创系统。
bce-protectlibbce_agent.somacOS 14 起(M1–M5 芯片)。
bce-protectlibbce_agent.dylib运行端仅需 JDK 8+:-agentpath:./bce_agent.dll=…(Windows)· ./libbce_agent.so=…(Linux)· ./libbce_agent.dylib=…(macOS)
源盾提供三种集成方式,覆盖从 IDE 到 CI/CD 的全场景。
插件发布在 Maven Central。两种接入方式:plugins {}(需先在 settings.gradle 的 pluginManagement 声明 mavenCentral() 为插件仓库);
buildscript {} + apply plugin(不便改 settings.gradle 时):
build/libs/<artifact>-<version>-protected.jarbceProtect 自动 dependsOn jarextraJars 加密依赖 JAR// Gradle 默认只查 Plugin Portal;源盾插件在 Maven Central,需显式声明
pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal() // 其他插件兜底的,保留
}
}
// 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
}
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
▌
在 pom.xml 中添加插件,绑定到 package 生命周期:
mvn package 一行命令完成加密target/<artifact>-<version>-protected.jar<!-- 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
▌
适合未使用 Gradle/Maven 的项目,或作为 CI 流水线的独立步骤:
bce-protect,Windows / Linux / macOS 三平台# 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
▌
商务咨询、技术支持,请联系北京塔尔旺科技有限公司。