| Crates.io | r-license |
| lib.rs | r-license |
| version | 1.0.0 |
| created_at | 2025-12-24 10:17:42.346531+00 |
| updated_at | 2025-12-24 10:17:42.346531+00 |
| description | An industrial-grade offline software licensing system with hardware binding and anti-rollback protection. |
| homepage | |
| repository | https://github.com/antoneo/r-license |
| max_upload_size | |
| id | 2002957 |
| size | 99,868 |
R-License 是一个深度防御的 Rust 离线软件授权系统
它通过“物理硬件绑定 + 非对称加密签名 + 物理单调时间计数 + 多点冗余备份”构建了一个不依赖网络的强大离线授权闭环,确保您的软件知识产权在极端离线环境下依然稳如磐石。
R-License 提供了一套完整的软件授权解决方案,特别适合需要在离线环境中运行的商业软件。引入了深度防御 (Defense in Depth) 机制,通过多重审计和隐匿锚点,极大地提升了破解难度。
系统在启动阶段执行以下五重防御节点:
Instant 累加物理运行时间,防止通过倒拨时钟获得额外试用期。在您的 Cargo.toml 中添加依赖:
[dependencies]
r-license = { version = "1.0.0" }
# 如果是从私服安装
# r-license = { version = "1.0.0", registry = "your-private-registry" }
为了确保授权系统的安全性和正确性,请遵循以下标准业务流程:
| 阶段 | 步骤 | 角色 | 操作内容 | 输入 | 输出 |
|---|---|---|---|---|---|
| 初始化 | 1. 生成密钥 | 开发者 | 运行 issuer 生成全局唯一的 Ed25519 密钥对 |
无 | license_keys.bin |
| 集成 | 2. 嵌入公钥 | 开发者 | 从密钥文件中提取公钥并硬编码至客户端应用 | license_keys.bin |
客户端二进制文件 |
| 注册 | 3. 获取指纹 | 最终用户 | 在目标机器运行应用或工具获取硬件 ID (HWID) | 无 | HWID 字符串 |
| 签发 | 4. 制作授权 | 开发者 | 使用私钥 + 用户 HWID 签发授权文件 | HWID, 私钥 |
license.lic |
| 激活 | 5. 授权部署 | 最终用户 | 将 license.lic 放置在应用指定目录 |
license.lic |
软件功能解锁 |
首次使用时,需要生成用于签名的非对称密钥对。
# 生成并保存密钥对到 license_keys.bin
cargo run --bin issuer -- --save-keys --hwid "INIT"
注意:
license_keys.bin包含私钥,请务必妥善保管,切勿泄露给用户。
用户在其机器上运行以下代码获取 HWID:
use r_license::auth::generate_hwid;
let hwid = generate_hwid().unwrap();
println!("您的硬件ID: {}", hwid);
根据用户提供的 HWID 签发授权:
# 使用现有私钥签发 365 天授权
cargo run --bin issuer -- --hwid "用户HWID" --expiry 365 --keyfile license_keys.bin --output license.lic
use r_license::auth::startup_validation;
// 从 license_keys.bin 提取的 32 字节公钥
const PUBLIC_KEY: [u8; 32] = [/* ... */];
fn main() {
// 一键启动深度验证流水线
if let Err(e) = startup_validation("license.lic", &PUBLIC_KEY) {
panic!("授权验证失败: {}", e);
}
println!("授权成功,进入业务逻辑...");
}
项目内置了严密的测试套件,模拟了完整的业务生命周期和多种攻击场景。您可以运行 cargo test --test license_test -- --nocapture 来观察以下关键流程:
flowchart TD
Start[应用启动] --> Load[加载 License.lic]
Load --> VerifySig{Ed25519 签名验证}
VerifySig -- 失败 --> Exit[安全退出]
VerifySig -- 成功 --> HWID{硬件指纹匹配?}
HWID -- 否 --> Exit
HWID -- 是 --> Audit[一致性审计: 扫描隐匿锚点]
Audit -- 异常 --> Exit
Audit -- 正常 --> TimeCheck{时间水位线 & 有效期}
TimeCheck -- 违规 --> Exit
TimeCheck -- 正常 --> Heartbeat[启动后台心跳 & 水位线更新]
Heartbeat --> Run[进入业务逻辑]
Cargo.toml 中配置 lto = true 和 codegen-units = 1。strip 移除符号表:strip target/release/your_app 或在 Cargo.toml 中配置 strip = true。AppData,隐匿锚点放置在 ProgramData 或系统目录,并设为隐藏文件。本项目采用 MIT 许可证。
R-License - 为您的 Rust 应用构建不可逾越的安全防线。