# StartAllBack 授权机制研究与防回退工具

<p align="left">
  <b>简体中文</b> | <a href="README_EN.md">English</a>
</p>

> 正版购买：[StartAllBack 官网](https://www.startallback.com)

对 **StartAllBack 3.9.25** 授权校验机制的逆向研究，以及配套的 Windows GUI 工具。
原理来自对 shell 扩展 `StartAllBackX64.dll` 内嵌验证函数（`Ordinal_102/103`、
`FUN_180001e8c` 等）的还原。

> **声明**：本项目仅供计算机逆向工程与软件安全机制的学习、研究与交流。请勿用于商业
> 及未授权用途，请支持并购买 [StartAllBack 正版授权](https://www.startallback.com)。

---

## ⚠️ 重要原理说明：为什么手输激活码无效、必须理解注入路线？

| 激活途径 | 校验机制 | 结果 |
| :--- | :--- | :--- |
| 在 Cfg 界面输入 key 等待服务器签发 | key 仅生成 `md5(key)` 指纹发往 `activate.php`，**签发需要厂商 RSA 私钥** | ❌ 无有效订单则无激活数据 |
| 直接伪造 `ActivationData` | shell DLL 用内嵌 RSA 公钥还原明文并比对结构（LicenseHash/CONST/SABALL） | ❌ 无私钥不可伪造（本研究的弱模数亦不足以分解） |
| **本工具：激活态注入（补丁验签入口）+ 防回退** | 使 `Ordinal_102`（授权状态查询入口）恒返回"已激活"，并抑制自动更新/在线复检 | ✅ 状态稳定，全部可逆 |

> 注：StartAllBack 与 Listary 不同——它的 key 本身**不含可本地自洽校验的算法段**，
> 因此"算号器"路线不成立，只能走状态注入。这正是本仓库把防回退作为一等公民的原因。

## 授权模型（逆向结论）

```
P = md5(key) + (CONST 或 md5(磁盘SN)+md5(SMBIOS UUID)) + "SABALL" + pad   (128B)
ActivationData = base64(P^d mod n)          ← 服务器私钥签发（本地不可复现）
验证: P' = base64decode(ActivationData)^e mod n，滑窗比对上述结构
```

- RSA-1024（e=65537），公钥硬编码于 shell DLL（X64 与 A64 同钥）
- **厂商缺陷**：模数实为 1016 bit，最低质因子 2663（弱模数；未完全分解，不构成现实伪造路径）
- 详细算法、常量地址、函数映射见 [docs/algorithm.md](docs/algorithm.md) 与
  [docs/reverse-engineering.md](docs/reverse-engineering.md)

## 防回退机制（回滚触发点 → 抑制）

逆向发现三个会把"已激活"打回原形的触发点：

| 触发点 | 机制 | 抑制手段（全部可逆） |
| :--- | :--- | :--- |
| 计划任务 `\StartAllBack Update` | `UpdateCheck.exe` 下载 `StartAllBack_update.exe` 替换组件（补丁被覆盖） | 官方开关 `HKCU\SOFTWARE\StartIsBack\StopAutoDownload=1` + 禁用任务 |
| 在线复检/复激活 | `activate.php` / `sibsab.php`（Cfg） | hosts 屏蔽端点（补丁层不受网络影响） |
| 卸载时勾选"Delete settings and license data" | `RegDeleteKeyExW License` | 文档警示 + 备份还原 |

补丁层本身把授权判定恒真化（`Ordinal_102` 返回 1），从机制上使上述在线路径的
判定结果不再影响本机状态。

## 功能

`SabActivate.exe`（单窗口）：

1. **Backup**：导出 `HKCU/HKLM\Software\StartIsBack\License` 快照（.reg）
2. **Write activation state**：写入 `LicenseHash=md5hex(key)` 与 key 默认值（`>0x1E` 长度规则）、
   清 `AutoUpdatePending`；若目录存在 `activation.b64`（服务器签发数据）则一并写入
3. **Apply rollback guard**：StopAutoDownload + hosts + 任务禁用（可勾选），一键 `Undo`
4. **Status / Restore**：状态查询与备份还原

补丁脚本 `sab_patch_activation.py`（仓库 `scripts/`）：`apply` / `revert`，自动备份原 DLL
到 `patches/` 并记录 audit log（原字节/新字节/SHA256）。

## 构建

```powershell
powershell -ExecutionPolicy Bypass -File build.ps1   # 产出 tools\SabActivate.exe / tools\SabTestTool.exe
tools\SabTestTool.exe                                # 14 项自检（算法/机器码/注册表读写全链路）→ ALL PASS
```

## 目录

```
src/        SabLicenseAlgo / SabMachineCode / SabPrefsWriter / SabRollbackGuard / SabActivate
tests/      SabTestTool.cs（自检）
tools/      构建产物（.exe）
docs/       algorithm.md / reverse-engineering.md
```

## 许可

MIT — 见 [LICENSE](LICENSE)。
