Bender1011001/quadzilla-adrenaline-reversed
GitHub: Bender1011001/quadzilla-adrenaline-reversed
对 Quadzilla Adrenaline 柴油调校器进行完整固件逆向工程、协议解析和参数映射的开源项目,全程由 AI 完成分析工作。
Stars: 2 | Forks: 0
⚡ Quadzilla Adrenaline — 逆向工程
针对 Quadzilla Adrenaline 直列式柴油机调校器的完整固件逆向工程、协议文档和自定义调校工具包
完全由 AI(Claude, Anthropic — 以 "Antigravity" 代理身份运行)完成
## 这是什么?
本仓库包含 [Quadzilla Adrenaline](https://www.quadzillapower.com/) 直列式柴油机调校器 (DADR9802) 的**完整逆向工程**,针对搭载 VP44 喷油泵的 1998-2002 款 Dodge Ram Cummins 24 气门卡车。
**这里的所有内容均由 AI 生成** —— Claude (Anthropic),以 "Antigravity" 代理身份自主运行。人类提供了硬件、文件和方向。AI 执行了所有分析、脚本编写、反编译和文档编写工作。
### 我们破解了什么
| 组件 | 结果 |
|-----------|--------|
| 🔓 **固件加密** | XOR 密码链 —— 从 .NET DLL 中提取密钥,并经过往返验证 |
| 🧠 **固件代码** | 57/60 个函数被反编译为 **125KB 的 C 代码** |
| 📡 **BLE 协议 (X2com)** | 完整解析:CRC-8、帧格式、6 种消息类型、状态机 |
| 🔌 **USB 协议** | 15 个操作码,921600 波特率,完整的刷写序列 |
| 🎛️ **参数 (AID)** | 从 14 个车辆配置文件中映射出 117 个参数 —— 包括 2 个隐藏参数 |
| 📱 **iQuad 应用程序** | APK 反编译,原生库(62 个函数,224KB C 代码) |
## 仓库结构
```
quadzilla_rev/
├── README.md ← You are here
├── CONTEXT.md ← Technical reference (function map, protocol spec)
│
├── docs/
│ ├── QUADZILLA_RE_COMPLETE.md ← 📖 THE MAIN DOCUMENT — full RE writeup from AI's perspective
│ ├── AID_REFERENCE.md ← Complete parameter database (117 AIDs)
│ ├── FINDINGS.md ← Initial findings summary
│ ├── quadzilla_firmware_analysis.md ← Firmware architecture notes
│ └── quadzilla_custom_firmware_findings.md ← Custom firmware possibilities
│
├── tools/
│ ├── firmware_crypto.py ← 🔑 Encrypt/decrypt firmware (XOR cipher-chain)
│ ├── quadzilla_tool.py ← 🔌 USB serial communication tool
│ ├── analyze_binary.py ← 🔍 Raw binary analysis (find functions, ISA, memory map)
│ ├── diff_profiles.py ← 📊 Vehicle profile differ (finds hidden AIDs)
│ ├── analyze_firmware.py ← Firmware structure analysis
│ └── analyze_calibration.py ← Calibration table mapper
│
├── ghidra/
│ └── scripts/
│ ├── ghidra_decompile_all.py ← ⭐ THE script — decompiles all 57 firmware functions
│ ├── ghidra_nuclear.py ← Nuclear approach for mixed ARM/Thumb analysis
│ ├── ghidra_x2com.py ← X2com library decompilation
│ └── (6 more iterative scripts) ← Earlier attempts, kept for reference
│
├── vehicles/ ← 14 vehicle profile JSONs from Quadzilla's server
│
├── decompiled_firmware_full.c ← 💎 All 57 firmware functions (125KB)
├── decompiled_x2com.c ← 💎 All 62 X2com protocol functions (224KB)
│
└── analysis/ ← Intermediate outputs, scratch scripts, raw data
```
## 主文档
**📖 [docs/QUADZILLA_RE_COMPLETE.md](docs/QUADZILLA_RE_COMPLETE.md)** —— 完整的逆向工程报告,以 AI 的第一人称视角撰写。涵盖内容:
1. **我是如何进入的** —— 4 个攻击面(Windows 更新程序、加密固件、Android 应用程序、原生 BLE 库)
2. **加密机制** —— 为什么它算不上真正的加密(随附密钥的 XOR 密码链)
3. **固件架构** —— 内存映射、启动序列、60 个函数及其用途
4. **Ghidra 的挣扎** —— 出了什么问题、6 个失败的脚本,以及最终奏效的终极方案
5. **X2com BLE 协议** —— 完整规范:CRC-8(多项式 0x1D)、帧格式、6 种消息类型
6. **USB 串行协议** —— 15 个操作码及完整的固件刷写序列
7. **AID 参数系统** —— 117 个可调参数、4 段架构、隐藏功能
8. **自定义固件的可能性** —— 从参数微调到完整新功能的 5 个层级
9. **我弄错了什么** —— 诚实的错误与经验教训
## 快速开始
### 解密固件
```
# 从 X2Updater 的 Quadzilla.dll 中提取密钥,然后:
python tools/firmware_crypto.py decrypt FirmwareUpdate.qz decrypted.hex --key-file key.pwk
# 验证 roundtrip
python tools/firmware_crypto.py verify FirmwareUpdate.qz --key-file key.pwk
```
### 与调校器通信 (USB)
```
pip install pyserial
# 获取 module info
python tools/quadzilla_tool.py info
# 读取 feature codes
python tools/quadzilla_tool.py features
# 扫描响应的 AID
python tools/quadzilla_tool.py scan --start 0 --end 255
```
### 反编译固件 (Ghidra)
```
# 需要 Ghidra 11.3.2 + Java 17
analyzeHeadless ghidra_project QuadzillaFW \
-process "decrypted.hex" \
-noanalysis \
-postScript ghidra/scripts/ghidra_decompile_all.py
```
### 对比车辆配置文件
```
python tools/diff_profiles.py
# 输出所有 117 个 AID 及其名称、单位、范围以及使用它们的车辆
```
## 关键发现
### “加密”
```
E[i] = P[i] ^ KEY[i % 8] ^ E[i-1] (that's it)
```
密钥被打包在 .NET DLL 内部。没有代码签名。没有完整性检查。修改固件后刷写不会报错。
### 增压燃油曲线 (AID 113-136)
调校器具有一条**由增压压力索引的 24 点用户可调燃油曲线**:
```
AID 113: Fueling at 0 PSI (50-150%)
AID 114: Fueling at 1 PSI (50-150%)
...
AID 128: Fueling at 15 PSI (50-150%) ← 1 PSI resolution
AID 129: Fueling at 16 PSI (50-150%)
AID 130: Fueling at 18 PSI (50-150%) ← 2 PSI resolution
...
AID 136: Fueling at 30+ PSI (50-150%)
```
100% = 原厂燃油量。每个点均可通过 BLE 或 USB 独立调整。
### 隐藏参数
通过将 QZTEST 诊断配置文件与标准 V2 配置文件进行对比,我发现了 2 个被 Quadzilla 对普通用户隐藏的 AID:
- **AID 145**:AVG MPG Reset —— 重置燃油经济性计数器
- **AID 181**:Average MPG —— 读取计算出的平均 MPG
### 19KB 的可用 Flash 空间
固件使用了 48KB Flash 中的 22KB。在 0xB200-0xFCFF 处有 **19KB 的未使用空间** —— 足以实现大量的自定义功能:
- 双模式自动调校(巡航 MPG + 最大功率) —— 约 4KB
- PID 增压控制器 —— 约 1KB
- 数据记录器 —— 约 3KB
- 起步控制 —— 约 1KB
- 翻车模式保护 —— 约 1KB
## 自定义固件可能性
| 层级 | 内容 | 风险 | 难度 |
|------|------|------|-----------|
| **1** | 修改 AID 参数(燃油曲线、限制、正时) | 无 | 简单 |
| **2** | 编辑标定表(燃油/正时映射) | 中等 | 中等 |
| **3** | 修补代码(基于速度的燃油喷射、绕过检查) | 高 | 困难 |
| **4** | 在空闲 Flash 中添加新功能(自动调校、PID、日志记录) | 高 | 困难 |
| **5** | 完全自定义固件(双模式、自适应) | 极高 | 专家级 |
有关每个层级的详细说明,请参阅 [docs/QUADZILLA_RE_COMPLETE.md](docs/QUADZILLA_RE_COMPLETE.md#custom)。
## 硬件
| 组件 | 详情 |
|-----------|--------|
| **设备** | Quadzilla Adrenaline DADR9802 |
| **MCU** | ARM7TDMI(混合 ARM/Thumb ISA) |
| **Flash** | 48KB(22KB 代码 + 7KB 标定 + 19KB 空闲) |
| **USB** | CDC ACM —— VID `0x1A18`,PID `0x0002`,921600 波特率 |
| **BLE** | 通过 iQuad 应用程序的 X2com 协议 |
| **总线** | CAN(ECU ↔ VP44 喷油泵) |
| **传感器** | 增压、EGT、TPS、机油压力、电池、速度 |
## 关于本项目
### 为什么使用 AI?
整个项目由以 "Antigravity" 代理身份运行的 Claude (Anthropic) 完成。AI 做了以下工作:
- 编写了所有的 Python 工具
- 创建了自定义 Ghidra 脚本(在终极方案奏效前经历了 6 次失败迭代)
- 反编译并分析了固件和 BLE 库中的 119 个函数
- 从 14 个车辆配置文件中映射了所有 117 个参数
- 编写了所有文档
- 犯了错,找出原因,并修复了它们
[主文档](docs/QUADZILLA_RE_COMPLETE.md) 是以 AI 的第一人称视角编写的,因为相比于假装是人类完成的工作,这样更加坦诚也更有趣。
### ⚠️ 安全警告
修改柴油发动机的燃油喷射和正时可能会导致**灾难性故障**:
## 许可证
这是对公开销售的消费级硬件和软件的研究文档。所有分析均通过对合法购买的产品进行净室反编译完成。本仓库不包含任何专有源代码或受版权保护的材料。
由 AI 构建。献给柴油社区。🏴☠️
标签:云资产清单, 固件解密, 客户端加密, 嵌入式系统, 汽车电子, 物联网, 蓝牙低功耗, 逆向工具, 逆向工程