self_crypto_key-0.1.0 has been yanked.
Self Crypto Key
一个用于在二进制文件中存储和自修改加密密钥的 Rust 库。
安全声明
本库提供的是"提高破解难度"的方案,而非绝对安全。
在开源环境下,拥有完整二进制和源代码的攻击者理论上可以提取密钥。这是软件保护的根本性限制。
对于高安全需求场景,建议考虑:
- 硬件安全模块(TPM, Intel SGX, ARM TrustZone)
- 服务器端验证
- 用户密码派生
快速开始
安装
在 Cargo.toml 中添加依赖:
[]
= "0.1"
基本使用
use ;
// 1. 在程序开头初始化密钥存储(最大 256 字节)
init_key_storage!;
运行示例
# 构建示例
# 初始化密钥
# 查看密钥
# 更新密钥
# 生成随机密钥(64字节)
工作原理
1. 密钥分片存储
密钥被随机分成 3-8 个片段,每个片段存储在独立的 ELF section 中:
密钥: "my-secret-key-12345678"
↓
片段 0: "my-se" → .data_847
片段 1: "cret-" → .rodata_392
片段 2: "key-1" → .bss_615
片段 3: "2345678" → .init_928
2. 基于代码段的加密
每个片段使用程序不同代码段的哈希值加密:
// 片段 0 使用 .text 段的哈希
derive_key = SHA256
encrypted_shard_0 = obfuscate XOR derive_key
// 片段 1 使用 .rodata 段的哈希
derive_key = SHA256
encrypted_shard_1 = obfuscate XOR derive_key
// 以此类推...
3. 多层混淆
原始数据
↓
位反转 + 字节运算(基于位置和种子)
↓
异或加密(使用派生密钥)
↓
存储到二进制
4. 自修改机制
程序通过以下步骤实现自修改:
- 读取自身二进制文件到内存
- 解析 ELF 格式,定位密钥 sections
- 修改内存中的密钥数据
- 写入临时文件
- 原子重命名替换原文件