Tatsh/cpq4800
GitHub: Tatsh/cpq4800
针对1997年康柏Presario 4800快速恢复光盘的逆向工程项目,文档化其多层保护机制并提供自动化补丁工具绕过硬件验证和序列号校验。
Stars: 0 | Forks: 0
# Compaq Presario 4800 快速恢复光盘
针对 Compaq Presario 4800 快速恢复光盘(卷标 `WAN05921Q8`,1997 年 8 月)的逆向工程文档和工具。该光盘随 Presario 4808 和 4816 型号附带,用于恢复出厂的 Windows 95 安装。
## 背景
快速恢复光盘通过嵌入为 El Torito 引导记录的 1.44 MB FAT12 软盘镜像(`BOOTSECT.BIN`),启动一个最小化的 DOS 环境。恢复过程由两个可执行文件协调:
- **`QR.EXE`** -- 主程序,负责处理语言选择、序列号输入、型号验证以及启动 overlay。
- **`QROVL.EXE`** -- overlay 程序,解释 `.SCP` 脚本文件以对硬盘进行分区/格式化,并解压包含 Windows 95 镜像的密码保护 ZIP 归档。
三层保护机制防止该光盘在非 Compaq 硬件上使用:
1. **Compaq 硬件检查** (`CPQZ.EXE`) -- 通过专有的 INT 15h BIOS 调用或匹配 SMBIOS Type 1 制造商字符串来验证机器是否为正品 Compaq。
2. **序列号验证** -- 需要一个 12 字符的字母数字序列号,并将其与 BOM(物料清单)表进行交叉比对。
3. **UIA-to-BOMID 匹配** -- 将出厂时写入隐藏磁盘扇区的身份数据(`UIABOMWR.EXE`)与光盘上的 `BOMID.TXT` 配置进行比较。
## 文档
请参阅 [Wiki](https://github.com/Tatsh/cpq4800/wiki)。
## 工具
[`patch-iso.py`](patch-iso.py) 自动化整个补丁过程。给定一个原始 ISO,它会:
1. 使用 `isoinfo` LBA 偏移量提取 ISO 内容
2. 从 `BOOTSECT.BIN` 中提取 `QR.EXE` 并使用 `deark` 解压
3. 应用六个二进制补丁以绕过序列号/BOMID 验证
4. 使用 UPX 重新压缩并替换软盘镜像中的 `QR.EXE`
5. 在 `CPQR.BAT` 中注释掉 `CPQZ.EXE` 以跳过硬件检查
6. 使用正确的 El Torito 软盘模拟引导重建 ISO
```
python3 patch-iso.py "Compaq Presario 4800_WAN05921Q8.bak.iso" -o patched.iso
```
依赖项:`deark`、`upx`、`mtools`(`mcopy`/`mdel`/`mattrib`)、`mkisofs`、`isoinfo`。
## 关键发现
- 恢复归档的 ZIP 密码是 **`SMDCONSUMER`**,在 `.SCP` 脚本文件中使用三步方案编码:第一个字节的低 5 位为长度前缀,每个有效载荷字节与 `0x03` 异或(XOR),然后反转。
- 序列号屏幕接受任何 12 字符的字母数字字符串——真正的访问控制是出厂时写入的 UIA 扇区,而不是序列号本身。
- 所有与保护相关的可执行文件都使用 PKLITE(`QR.EXE`、`CPQZ.EXE`)或 DIET(`UIABOMWR.EXE`)压缩,打补丁前必须先解压。
## ISO 详情
| 字段 | 值 |
| ---------------- | ------------------------------------------------------------- |
| 卷标 | `WAN05921Q8` |
| 格式 | ISO 9660:1999 (level 4), El Torito |
| 引导介质 | 1.44 MB 软盘模拟 (`BOOTSECT.BIN`) |
| 支持型号 | Presario 4808, Presario 4816 |
| 操作系统 | Windows 95 OEM |
| 归档 | [Internet Archive](https://archive.org/details/wan-05921-q-8) |
标签:BIOS, Compaq, CSV导出, DOS, El Torito, FAT12, ISO修补, Python, Windows 95, 二进制分析, 云安全运维, 云资产清单, 固件安全, 无后门, 硬件验证绕过, 系统恢复, 计算器历史考古, 软件破解, 逆向工具, 逆向工程, 遗留系统