x86byte/sbox
GitHub: x86byte/sbox
sbox 在 C++ 编译期使用 AES-128 对字符串进行混淆,消除二进制中的明文痕迹以对抗静态分析。
Stars: 109 | Forks: 9
# sbox - 用于 C++ 的编译期 AES 字符混淆
标准解决方案依赖于 `length + "#" + string` 的形式。这种方式很容易被逆向。
**sbox** 利用 `constexpr` AES-128 分组密码将字符串转换为高熵的乱码。
### 开发背景
在参与 Neetcode 的 "Encode and Decode Strings" 挑战时,我将 AES 引擎从我的混淆项目 **[Obfusk8](https://github.com/x86byte/Obfusk8)** 中移植了过来。
该实现首次提交时仅耗时 **7ms**。加密的安全性不应以牺牲性能为代价。
### 功能特性
- **无分隔符:** 使用固定宽度的头部和块变异取代了可预测的分隔符。
- **二进制安全:** 能够轻松处理原始 payload 和 null 字节。
- **静态隐蔽:** 明文在编译期即被消除。使用提供的宏,`strings.exe`(或 Linux 下的 `strings`)将不会返回任何结果。
### 如何使用
查看 [示例](https://github.com/x86byte/sbox/tree/main/EXAMPLES) 文件夹以了解实现细节:
1. **多字符串示例 (`sbox_test.cpp`):**
演示了如何使用 `_OBF(str)` 宏处理 `vector` 以进行批处理。适用于可直接传输的混淆。
2. **单字符串示例 (`sbox_test1.cpp`):**
演示了如何使用 `ObfStr(str)` 宏进行原子实体化。最适合单变量赋值:
string s = ObfStr("ama obfuscation addicted");
### 性能
**7ms 运行时间。**
证明了“杀鸡用牛刀”式的方案依然可以是最优的。
**作者:** [x86byte](https://github.com/x86byte)
标签:AES加密, C++, DNS 反向解析, 反取证, 字符串加密, 安全评估, 数据擦除, 编译期混淆