mmohamedkhaled/RansomVault-Lab
GitHub: mmohamedkhaled/RansomVault-Lab
一个安全设计的教育工具包,通过复现勒索软件的混合加密模型(AES-256-GCM + RSA-4096)帮助用户学习现代文件加密与密钥交换原理。
Stars: 0 | Forks: 0
# RansomVault-Lab
[](https://github.com/mmohamedkhaled/RansomVault-Lab/actions/workflows/ci.yml)



**RansomVault** *不是*恶意软件。它是一个安全学习教育工具包,可让您亲自动手探索文件加密和混合密钥交换模型的工作原理——以及为什么如果没有正确的密钥,恢复将是不可能的。原始文件**始终保持保留**,恢复密钥**始终在本地生成**,并且在设计上没有任何敲诈、传播或破坏性行为。
## 它的不同之处
- **真实的加密核心。** 每个文件使用随机 AES-256-GCM 密钥,每个密钥均由 RSA-4096 公钥 (OAEP+SHA-256) 封装——这正是 WannaCry、LockBit 和 REvil 所使用的混合模型。
- **认证加密。** 篡改、截断和错误的密钥都会被*检测*到并拒绝,绝不会静默接受。
- **两种密钥模型。** 对称密钥 (`--keyfile` / `--password`) 和混合 RSA 密钥 (`--pubkey` / `--privkey`)。
- **设计安全。** 没有删除、没有网络请求、没有敲诈——请参阅[免责声明](#disclaimer)。
- **规范的打包。** 可安装的软件包,具有类型提示、文档和测试。
## 快速开始
```
git clone https://github.com/mmohamedkhaled/RansomVault-Lab.git
cd RansomVault-Lab
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
```
### 混合流程(真实的勒索软件模型)
```
# 1. 生成 RSA-4096 keypair(一次)
ransomvault keygen
# -> attacker_public.pem(用于加密)
# -> attacker_private.pem(恢复时需要)
# 2. “攻击”:使用公钥加密文件夹
ransomvault encrypt ./target --pubkey attacker_public.pem
# -> 每个文件变为 .rvlt,保留原始文件
# -> HOW_TO_DECRYPT.txt 释放到文件夹中
# 3. “防御”:使用私钥恢复
ransomvault decrypt ./target --privkey attacker_private.pem
# -> 每个 .rvlt 文件被还原
```
### 对称替代方案
```
ransomvault encrypt ./target --password # scrypt-derived key
ransomvault decrypt ./target --password
ransomvault encrypt ./target --keyfile my.key # random key saved to my.key
ransomvault decrypt ./target --keyfile my.key
```
## CLI 参考
```
ransomvault keygen [-o OUT_DIR] Generate an RSA-4096 keypair
ransomvault encrypt FOLDER --pubkey PEM Encrypt (hybrid)
ransomvault encrypt FOLDER --keyfile PATH Encrypt (symmetric key)
ransomvault encrypt FOLDER --password Encrypt (scrypt password)
ransomvault decrypt FOLDER --privkey PEM Decrypt (hybrid)
ransomvault decrypt FOLDER --keyfile PATH Decrypt (symmetric key)
ransomvault decrypt FOLDER --password Decrypt (scrypt password)
```
运行任何带有 `--help` 的命令以获取详细信息。
## 工作原理
```
file ──► random AES-256 key ──► AES-GCM ──► ciphertext
│
└─► RSA-4096 public key (OAEP) ──► wrapped key
│
.rvlt file ◄─────────────────────┘
```
恢复需要 **RSA 私钥**来解包 AES 密钥。受害者仅持有公钥,无法解密——这正是真实勒索软件挟持受害者的方式,在此以安全的方式进行了模拟。有关完整的格式规范,请参阅 [`docs/architecture.md`](docs/architecture.md);有关与真实 C 语言勒索软件样本的对比,请参阅 [`docs/analysis.md`](docs/analysis.md)。
## 项目布局
```
src/ransomvault/ installable package
constants.py magic, sizes, version numbers
container.py RVLT blob pack/unpack
crypto.py AES-256-GCM, scrypt, RSA-4096, byte/file ops
cli.py argparse CLI
tests/ pytest suite (roundtrips, wrong-key, tamper, binary, CLI)
docs/ architecture + comparative analysis
```
## 开发
```
pytest # run the test suite
ruff check src tests # lint
```
## 环境要求
- Python ≥ 3.9
- [`cryptography`](https://cryptography.org/) ≥ 41.0
## 免责声明
本软件**仅严格用于教育和授权研究目的**。
- **仅在您自己的系统或数据上使用它**,或者在隔离的实验室/虚拟机 (VM) 中使用。
- 它**不包含**任何破坏性、自我传播或敲诈功能。
- 作者对任何滥用行为**不承担**责任。
如果您正在寻找真正的恶意软件,这并不是——这是出于设计的。
## 许可证
[MIT](LICENSE) —— 按“原样”提供,不提供任何形式的保证。
标签:Python, 勒索软件模型, 安全科普, 安全规则引擎, 密码学, 手动系统调用, 数据加密, 无后门, 逆向工具