﻿# Snipaste 2.11.3 PRO Keygen & 逆向研究手记

> 针对 **Snipaste 2 桌面版（Windows x64, 2.11.3）** 离线授权算法的独立逆向还原与一键离线激活工具链。
> 原理基于对内置 `LicensingClient` 校验机制与 Ed25519 签名链的独立逆向（详见 `docs/reverse-engineering.md`）。
>
> 🌐 **官方介绍与在线交互演练**：[https://snipaste.int0.cc](https://snipaste.int0.cc)

---

## 🛒 支持正版与官方购买通道

Snipaste 是一款由独立开发者 **levelfour** 精心打造多年的行业标杆级截图与贴图生产力神器。
**如果您在日常工作、学习或商业生产环境中使用，强烈建议通过以下官方正规渠道购买正版 PRO 授权，支持独立开发者的持续迭代与创新**：

| 渠道 | 官方购买地址 | 授权类型与特点 |
|---|---|---|
| **Snipaste 中文官网 (推荐)** | [https://zh.snipaste.com/](https://zh.snipaste.com/) | 桌面单设备 **45 元** / 3 设备 **99 元** (终身买断 / 离线+在线授权 / 免费升级) |
| **Microsoft Store 微软商店** | [https://apps.microsoft.com/detail/9p1wxpkb68kx](https://apps.microsoft.com/detail/9p1wxpkb68kx) | **99 元** 绑定个人微软账户 / 支持高达 **10 台设备** 同步 / 荣获 2024 年度创意工具奖 |
| **PRO 功能详细介绍** | [https://docs.snipaste.com/zh-cn/pro](https://docs.snipaste.com/zh-cn/pro) | 官方专业版全功能对照表 (高级标注、文本识别 OCR、贴图分组、色彩空间) |
| **官方用户手册** | [https://docs.snipaste.com/](https://docs.snipaste.com/) | 快捷键配置、标注技巧与命令行参数完整手册 |

---

## 快速开始

```powershell
# 0) 依赖安装
pip install -r requirements.txt

# 1) 生成激活码（自动读取本机 MachineGuid）
python -m keygen.cli gen --name 你的名字 --email 你的邮箱
#    （在 src/ 目录下执行，或用打包好的 tools\snipaste-keygen.exe）
#    → 输出期望设备码与激活码（0x-<base64>格式）

# 2) 可选：把 Snipaste.exe 的官方公钥替换成自持密钥对（后续激活码需配套）
python -m keygen.cli patch "X:\Snipaste.exe" "X:\Snipaste_patched.exe" [--persist]

# 3) 激活：运行 Snipaste → 托盘「解锁专业版…」→「输入授权码」→「离线激活」
#    粘贴上面生成的激活码即显示「专业版已激活」
```

已打包好可直接运行的工具在 `tools/`（或前往 [GitHub Release](https://snipaste.int0.cc/releases/latest) 下载）：
- `SnipasteKeygen.exe`（GUI 图形界面版）
- `snipaste-keygen.exe`（CLI 命令行控制台版）

## 0 门槛使用（推荐）

**不需要 Python、不需要命令行**，双击即用：

```
1. 双击 tools\SnipasteKeygen.exe
2. 程序自动检测 Snipaste.exe（常见安装目录 / 注册表 / 盘符，也可手动「浏览…」）
3. 点「⚡ 一键激活」（持久化默认勾选，重启仍 Pro）
4. 完成！重新启动 Snipaste 即专业版（原文件自动备份为 .official.bak）
```

要点：
- 密钥对（`keypair.bin`）自动生成并固定存放在 `tools\` 同目录，patch 与 gen 自动配套；从任何目录启动都不会弄丢/弄乱密钥。
- 命令行版同样 0 依赖：`snipaste-keygen.exe patch "Snipaste.exe" "out.exe" --persist`
- 若想体验官方激活流程（粘贴激活码）：`snipaste-keygen.exe gen` 生成激活码即可。

## 为什么需要 patch？

- Snipaste 离线激活码是 **Ed25519 自签名**：官方公钥内嵌在 exe 中。
- keygen 只能签发「能通过我们自己的公钥验签」的激活码；要把自己的公钥放进程序，就需要 `patch` 替换内嵌官方公钥（原理见 `docs/algorithm.md` §5）。
- **不 patch 也能生成激活码**（`gen` 独立可用），但只有 patch 后的 Snipaste 能通过验签。

## 目录结构

```
snipaste-keygen/
├── README.md / BLOG.md / LICENSE / .gitignore
├── web/                     # 现代化官方展示站点 (https://snipaste.int0.cc)
├── src/
│   └── keygen/
│       ├── algo.py          # 算法核心：哈希/编解码/签名/激活码/公钥替换/持久化
│       ├── cli.py           # 命令行：gen / patch / persist / verify / selftest
│       ├── gui.py           # tkinter 单窗口界面
│       └── __init__.py
├── tests/
│   └── test_keygen.py       # 9 项单元自检矩阵
├── tools/
│   ├── SnipasteKeygen.exe   # 打包 GUI（PyInstaller）
│   └── snipaste-keygen.exe  # 打包 CLI
├── docs/
│   ├── algorithm.md         # 授权算法原理（常量/流程/弱点）
│   └── reverse-engineering.md  # 逆向方法论（Ghidra+frida 全流程）
├── build.ps1                # 源码打包脚本
└── requirements.txt
```

## 命令参考

| 命令 | 说明 |
|---|---|
| `python -m keygen.cli gen` | 生成激活码（`--guid` 可为其它机器） |
| `python -m keygen.cli patch <exe> <out>` | 公钥替换另存 |
| `python -m keygen.cli patch <exe> <out> --persist` | 公钥替换 + 启动即Pro |
| `python -m keygen.cli verify <code>` | 模拟客户端校验激活码 |
| `python -m keygen.cli selftest` | 内建自检 |
| `python tests\test_keygen.py` | 全量 9 项自检 |
| `python -m keygen.gui` | 图形界面 |

## 已实现能力（均经真实程序验证）

- ✅ 生成离线激活码（Ed25519 私钥签名 + gzip + XOR + base64 + 校验字符）
- ✅ 期望设备码 / 校验字符 / 字段编解码全套算法
- ✅ 公钥替换 patch（内嵌 58 字节密文 → 16 字节周期 Keystream 逆推）
- ✅ 持久化 patch `--persist`：FUN_245880 失败出口清零，**启动即 Pro 且重启保持**
- ✅ 端到端验收：patched Snipaste 粘贴激活码 → 「专业版已激活」

---

## ⚖️ 安全研究与法律合规免责声明 (Disclaimer)

1. **学术研究与技术交流**：本项目所有代码、文档与工具仅用于计算机逆向工程、现代密码学签名机制（Ed25519 / Blake2s）与客户端软件保护体系的学术交流与安全防护研究。
2. **严禁商业牟利与转售**：严禁任何个人或机构将本项目源码、编译产物或衍生工具用于商业售卖、付费激活服务或任何未经著作权方授权的商业生产环境。本项目完全开源免费。
3. **支持正版软件**：请尊重软件开发者的智力成果与持续劳动。商业及日常生产用途请前往 [Snipaste 官网](https://zh.snipaste.com/) 购买正版授权。
4. **风险自担与无担保**：本项目按“现状 (AS-IS)”提供，不作任何明示或暗示的担保。因应用二进制补丁或使用本工具引起的任何直接/间接损失，均由使用者自行承担全部法律与技术责任。
5. **版权归属与合规处理**：Snipaste 及其软件商标、著作权归原作者（levelfour）所有。若权利方提出合规要求，维护者将在核验后第一时间予以配合和下架。