﻿# IDM 6.43 build 10 Keygen & Activation Tool

<p align="center">
  <a href="https://idm.int0.cc"><img src="https://img.shields.io/badge/Official_Site-idm.int0.cc-09090b?style=for-the-badge&logo=safari&logoColor=white" alt="Website" /></a>
  <a href="https://idm.int0.cc/releases"><img src="https://img.shields.io/badge/Release-v1.0.0-09090b?style=for-the-badge&logo=github" alt="Release" /></a>
  <a href="https://www.internetdownloadmanager.com/"><img src="https://img.shields.io/badge/Official_Store-Buy_IDM-09090b?style=for-the-badge&logo=windows" alt="Official Buy" /></a>
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-09090b?style=for-the-badge" alt="License" /></a>
</p>

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

---

## 🔗 官方资源与项目导航

- 🌐 **项目官网**: [https://idm.int0.cc](https://idm.int0.cc) （包含在线 Keygen、算法可视化、GUI 下载与技术拆解）
- 🐙 **GitHub 仓库**: [https://idm.int0.cc](https://idm.int0.cc)
- 🛒 **IDM 官方正版购买**: [https://www.internetdownloadmanager.com/](https://www.internetdownloadmanager.com/)
- 📦 **Releases 发布包**: [GitHub Releases v1.0.0](https://idm.int0.cc/releases)

---

> [!CAUTION]
> ### ⚠️ 核心结论：光靠序列号无法持久激活！（存在后台联网二次校验）
> - **本地 Keygen 序列号的作用**：仅能通过 `IDMan.exe` 注册窗口的本地算法初筛（Base37 + 模数整除），使软件暂时写入注册表，**仅供算法与密码学研究**。
> - **为什么光填序列号会失效？**：IDM 启动及注册后，会派生后台网络鉴权线程（`FUN_00521730`）向 Tonec 官方服务器验证。由于云端无此授权记录，服务器返回拒绝状态码，触发 `Case 3` 弹出 **「Fake Serial Number / 假冒序列号」弹窗并强制退出**。
> - **真正实现激活的唯一途径**：必须使用 **[tools/IDMActivate.exe](tools/IDMActivate.exe) 一键激活 GUI 工具** 对核心检查点函数 `FUN_00450960`（RVA `0x50960`）进行短路 Patch（恒返 0），彻底屏蔽云端二次校验、试用到期定时器与假序列号弹窗！

---

## ⚖️ 法律免责声明 (Disclaimer)

> [!IMPORTANT]
> 1. 本项目及所包含的一切代码、二进制工具与技术文档仅供**逆向工程、密码学、二进制安全与软件防御机制的学术探讨与研究**之用。
> 2. 本项目**不提供、不销售**任何商业授权许可证。任何组织和个人严禁将本项目成果用于商业营利、侵权分发或任何违法犯罪行为。
> 3. Internet Download Manager (IDM) 及其相关商标、商业版权均归属 **Tonec Inc.** 所有。如果您在日常生产、商业或办公环境中需要长期使用 IDM，请务必前往 [IDM 官方购买网站](https://www.internetdownloadmanager.com/) 购买官方正版授权。
> 4. 使用本项目产生的一切后果由使用者自行承担，原作者与贡献者不承担任何直接或间接的法律责任。

---

## 🧠 逆向工程思路与算法原理全景

本项目对 Internet Download Manager **6.43 build 10** 进行静态反编译（Ghidra / IDA Pro）与动态跟踪（Frida 调用栈回溯），完整逆向还原了其序列号生成验证与注册状态短路机制。

### 1. 序列号格式与 Base37 打乱表

IDM 序列号的标准格式为 `XXXXX-XXXXX-XXXXX-XXXXX`（4 段，每段 5 字符，总长 23）。
程序内部通过常量打乱表映射字符（内存 VA `0x00787848`）：

```text
打乱字符表: "2YOPB3AQCVUXMNRS97WE0IZD4KLFGHJ8165T" (长度 36，索引 0..35)
```

### 2. 算法核心：Base37 乘数陷阱与 Horner 多项式

在逆向 `CRgDlg::OnOk` / `FUN_00521800`（VA `0x00521800`）时，汇编指令显示：

```nasm
imul edx, edx, 0x25   ; 0x25 = 37 (十进制)
add  edx, eax        ; 加上当前字符在表中的索引
```

**关键陷阱**：字符表长度虽然为 36，但段解码的多项式基数（Base）使用的是 **37**，即：
$$v = ((((d_0 \times 37 + d_1) \times 37 + d_2) \times 37 + d_3) \times 37 + d_4)$$

每段可表示的整数空间范围为 $[0, 37^5 - 1] = [0, 69,343,956]$。

### 3. 段模数约束（Modular Check）

4 个段解码出的整数值 $v_1, v_2, v_3, v_4$ 必须**非零**且分别满足以下同余条件：

$$\begin{cases}
v_1 \not\equiv 0 \pmod{43} \implies v_1 \pmod{43} = 0 \\
v_2 \not\equiv 0 \pmod{23} \implies v_2 \pmod{23} = 0 \\
v_3 \not\equiv 0 \pmod{17} \implies v_3 \pmod{17} = 0 \\
v_4 \not\equiv 0 \pmod{53} \implies v_4 \pmod{53} = 0
\end{cases}$$

满足上述数学条件的序列号均可 100% 通过本地 `IDMan.exe` 注册窗口的语法与算法校验。

### 4. 为什么需要持久化激活？（短路检查点）

- **本地 Keygen 的局限**：生成序列号虽然能通过本地注册窗口校验并写入注册表，但 IDM 会在后台启动异步网络鉴权线程向官方服务器发起校验。假序列号会被服务器判定为 counterfeit，触发弹窗并强制退出。
- **核心检查点短路**：经逆向定位，IDM 所有注册状态检查最终汇聚在函数 `FUN_00450960`（RVA `0x50960`）。将其入口指令 `55 8D AC`（`push ebp; lea ebp, ...`）Patch 为 `31 C0 C3`（`xor eax, eax; ret`，即恒返回 0），可一次性短路：
  1. `counterfeit` 伪造序列号弹窗与退出分发
  2. 启动自动注册表单提示
  3. 30 天试用到期定时器
  4. 服务器鉴权结果分发通道（实现零联网、全功能稳定运行）

### 5. 检查点全景覆盖（15 项核心清单）

| 组 | 检查点 | 逆向位置 | 状态 | 详细说明 |
|---|---|---|---|---|
| **状态分发** | C1 FUN_00450960 | RVA `0x50960` | ✅ **已 Patch 短路** | 入口恒返 0，状态总控短路 |
| **状态分发** | C2 状态码跳转表 | `0x00452905` | ✅ **由 C1 短路** | 13 case 跳转表永不进入异常分支 |
| **状态分发** | C3 counterfeit 弹窗 | `0x453243` | ✅ **由 C1 短路** | 假序列号弹窗与退出被完全屏蔽 |
| **服务器验证** | C4 验证线程链 | `FUN_00521730` | ✅ **25 分钟零调用** | 异步鉴权网络线程不触发 |
| **服务器验证** | C5 0xb 拒绝处理 | `FUN_00520FF3` | ✅ **由 C4 不触发** | 假序列号清除与弹窗不触发 |
| **服务器验证** | C6 本地黑名单 | `0x00788700` | ✅ **由 C1 短路** | 常量串黑名单比较链失效 |
| **试用** | C7 自动注册表单 | case 0 分发 | ✅ **由 C1 短路** | 启动不弹注册表单 |
| **试用** | C8 到期定时器 | SetTimer(0x1c/0x1d) | ✅ **实测从不出现** | 定时器从不创建 |
| **试用** | C9 日期检查 | `LstCheck` 注册表 | ✅ **前移 40 天无弹窗** | 试用期超时检查无效化 |
| **注册/更新** | C10 注册表读取 | `Software\DownloadManager` | ✅ **仅 1 次无副作用** | 读取注册表注册态正常 |
| **注册/更新** | C11 更新轮询定时器 | SetTimer(0x25) | ✅ **25 分钟零请求** | 覆盖 20 分钟轮询窗口 |
| **注册/更新** | C12 Quick Update | `CDownloaderDlg::OnTimer` | ⏳ **需用户确认** | 需用户手动确认并提权 |
| **注册/更新** | C13 更新覆盖安装 | 外部安装包 | 🔄 **重跑 GUI 即可** | 覆盖 IDMan.exe 后重跑工具即恢复 |
| **其它** | C14 文件自校验 | PE 代码段 | ✅ **无自校验** | 多轮运行无损坏提示 |
| **其它** | C15 服务端黑名单 | 云端服务 | ✅ **不联网不触发** | 零网络请求不与云端交互 |

---

## 🚀 快速上手与使用指南

### 方案 A：一键激活 GUI（推荐，无需 Python）

下载并运行 `tools\IDMActivate.exe`（单文件 GUI，适配 Windows 7/10/11，暗黑黑白灰美学）：

```text
[🛒 官方正版购买]  [🌐 官网 idm.int0.cc]  [🐙 GitHub 仓库]  [📜 免责声明]
----------------------------------------------------------------------
IDM 安装目录: [ C:\Program Files (x86)\Internet Download Manager ] [浏览...]
状态检测    : [ 状态: 原版 (未激活)  |  IDM 未运行 ]

[ ⚡ 一键激活 ]      [ 🔄 还原原版 ]      [ 🔍 刷新状态 ]
[ 🎲 生成序列号 ]    [ 📋 复制序列号 ]
----------------------------------------------------------------------
实时日志窗口输出...
```

1. 自动探测 IDM 安装路径；
2. 点击 **「⚡ 一键激活」**：自动提权 → 备份 `IDMan.exe.bak` → Patch 检查点 → 清理假序列号注册表项 → 启动 IDM；
3. 点击 **「🔄 还原原版」** 可无损回滚至原始未修改状态；
4. 内置 **「🎲 生成序列号」** 支持即时生成合法本地序列号。

### 方案 B：CLI 命令行激活（透明可审计）

```powershell
# 一键提权 Patch、备份与清理注册表
python src/idm_activate.py

# 查看当前 IDMan.exe 的 Patch 状态
python src/idm_activate.py --status

# 一键还原回滚原始备份
python src/idm_activate.py --restore
```

### 方案 C：独立 Python Keygen

```bash
# 生成 1 个合法序列号
python src/idm_keygen.py

# 批量生成 10 个
python src/idm_keygen.py -n 10

# 校验指定序列号
python src/idm_keygen.py --verify XFT67-ES448-D9MXH-UZ2OH

# 自动化批量自测 (20,000 次拒绝采样验证)
python src/idm_keygen.py --self-test

# 执行完整单元测试
python -B -m unittest tests.test_keygen -v
```

---

## 📂 项目结构全景

```text
idm-keygen/
├── .github/workflows/ci.yml       # GitHub Actions CI 构建流
├── docs/                          # 核心技术文档
│   ├── algorithm.md               # 算法数学规范与打乱表
│   ├── reverse-engineering.md     # 逆向全记录与证据链
│   ├── activation-mechanism.md    # 检查点机制与对照实验
│   └── checkpoints.md             # 15 项安全检查点清单
├── release-artifacts/             # 官方发布包产物
│   ├── IDMActivate.exe            # 预编译 GUI 激活器
│   ├── IDMSerials.txt             # 示例合法序列号集
│   ├── RELEASE_NOTES.md           # 发布说明
│   └── SHA256SUMS.txt             # 校验哈希表
├── src/                           # 源代码
│   ├── IDMActivate.cs             # C# GUI 激活与 Keygen 工具源码
│   ├── idm_activate.py            # Python CLI 一键激活
│   └── idm_keygen.py              # Python 独立 Keygen
├── tests/
│   └── test_keygen.py             # 自动化单测 (8 项用例)
├── tools/
│   ├── IDMActivate.exe            # 本地编译产物
│   ├── frida_trace.py             # 动态 Frida 拦截分析
│   └── ui_flow.py                 # UI 自动化验证
├── web/                           # 官网 idm.int0.cc 源码 (Vite + TailwindCSS)
├── build.ps1                      # 一键单测 + 编译 + 打包发布脚本
├── LICENSE                        # MIT License
├── README.md                      # 中文说明文档
└── README_EN.md                   # 英文说明文档
```

---

## 🛠️ 构建与编译

### 编译 GUI 与打包发布产物
```powershell
powershell -ExecutionPolicy Bypass -File build.ps1
```

### 构建官方网站 (`web/`)
```bash
cd web
pnpm install
pnpm build
```

---

## 🤝 致谢与支持

- Internet Download Manager 官方：[internetdownloadmanager.com](https://www.internetdownloadmanager.com/)
- 本项目研究完全基于对本地 `IDMan.exe` 的独立逆向，特此致谢密码学与安全开源社区。