bitplane/nokia-dct3-re

GitHub: bitplane/nokia-dct3-re

在 MAME 中逆向模拟诺基亚 DCT3 系列手机硬件,使原始固件能在桌面端运行与分析的逆向工程工具包。

Stars: 1 | Forks: 0

# Nokia DCT 平台模拟 本项目对 Nokia 早期的数字蜂窝电话平台进行逆向工程,并在 [MAME](https://github.com/mamedev/mame) 中进行模拟。参考机型是 Nokia 3210 (NSE-8/9), 这是一款基于 MAD2 基带 ASIC 构建的 DCT3 手机。长期的愿景是建立一个可重用、 易于维护的 DCT 系列架构,能够运行来自 DCT1、DCT2、 DCT3、DCTL,以及最终在硬件被充分理解后的 DCT4 手机的未经修改的固件。 这是一个研究方向,而不是兼容性承诺。Nokia 的产品代际在 ASIC、flash 布局、显示屏、 companion 芯片、RF、DSP 固件、产品数据和应用 软件方面各不相同。实际的方法是渐进式的: 1. 观察真实的固件/硬件边界。 2. 在静态和运行时对其进行映射。 3. 为缺失的对端实体构建原型,但不宣称该原型即为硬件。 4. 用寄存器、总线、邮箱或设备模型替换原型。 5. 在将其视为共享平台行为之前,根据另一个 ROM 验证该组件。 最初的里程碑是在 Nokia 3210 上运行 Snake。这仍然是一个有用的垂直测试,但 预期目标是实现一个平台,使得 Snake、T9、铃声、地址簿、 运营商 logo、设置以及手机固件的其余部分成为普通固件行为,而 不是特殊情况。 ## 当前状态 3210 固件的执行已经足够深入,能够初始化 CPU、MAD2 外设、CCONT、显示屏、 EEPROM 路径、RTOS 任务、外部服务机制以及大量的 SIM 交互。已验证的 CCONT、DSP 服务、外部服务和 SIM 设备由 3210 机器配置文件启用, 而不是通过环境变量栈。一个显式的缺失硬件负面配置文件 受语义引导谓词保护,无需特定的失败画面。 这个连贯的建模配置文件达到了经过验证的交互式桌面。SIM 完成了普通的非 CPHS 初始化,预置的身份数据移除了 手机锁提示,物理左软键按下可打开固件的 `Phone book` 菜单。Task 1 保持在 `0x0004` 模式;该模式记录了随后的 电源/关机延续,且不会阻塞 UI。正确的 MAD2 IRQ0 键盘 连线到达固件矩阵扫描器和解码后的按键资源。 未预置的 Security-code 编辑器也接受物理 `12345` 序列。 报告代码 7 是随后的电源/关机报告。映射的回调、descriptor、 定时器和 task-6 选择器路径是有条件的固件生命周期,而 不是缺失的硬件确认。详细的契约位于 [`docs/mmi_layer.md`](docs/mmi_layer.md)。 `make verify-frontier RUN_DIR=run_frontier` 是权威的 3210 硬件 基线。它使用请求驱动的外部服务对端 和普通的 SIMI/FIQ6 卡模型,最终停留在模式 `0x0004`,服务会话状态为 `0x49`,no-SIM 清除,并设置了 SIM 使能。键盘交互通过 MAD2 IRQ0 和固件矩阵扫描器独立覆盖。`make verify-mmi-menu` 添加了预置身份并保护交互式菜单事务。 对于直接使用,`make run-interactive` 会打开一个普通的 MAME 窗口,包含标准的 可重映射输入和持久化的 NVRAM;它不会驱动脚本按键。 DSP、radio、GSM-network 和外部服务 HLE 设备在明确的 传输边界做出反应。它们是可执行的协议模型,而不是完成的硅片 模拟,但不会调用固件处理程序或写入注册状态。 Firmware-PC 条件仅限于诊断跟踪;产品预置 通过 EEPROM 和其他普通设备边界进入。 ## 成熟度 以下标签具有确切的含义: - **Mapped**:固件所有权和边界已被记录。 - **Prototype**:存在足够的对端行为来测试契约,通常通过研究 hook 实现。 - **Partial hardware**:固件使用普通的寄存器或总线,但行为不完整。 - **Component-ready**:契约足够稳定,可以提取到 MAME 设备中。 - **Validated**:该组件通过了 3210 回归测试和 second-ROM 置信度检查。 | 子系统 | 状态 | 证据 / 下一步 | |---|---|---| | ARM7、flash、RAM 映射 | Partial hardware | 3210 可靠执行;产品布局需要跨 ROM 验证。 | | MAD2 定时器、睡眠和 IRQ/FIQ | Partial hardware | 启动关键路径正常工作;配对的 ROM 和针对性测试覆盖了 ARM clock-stop、定时器/按键唤醒和 save-state 恢复,而确切的分频器和过渡时序仍有待解决。 | | PCD8544 LCD 和键盘 | Partial hardware | 固件渲染出真实的帧;MAD2 IRQ0 到达矩阵扫描器和解码的输入资源。 | | 24C128 EEPROM | Partial hardware | MAME 的原生 I2C 设备通过 GenIO 连接并通过了 oracle;预置和并行别名需要验证。 | | CCONT 电源/ADC/RTC | Partial hardware | 提取的 MAME 设备通过了 oracle;物理 ADC 延迟、RTC 编码、watchdog 时钟和板级模拟信号仍有待解决。 | | GENSIO serial/SELECT | Partial hardware | 提取的 endpoint/status/LCD/CCONT 传输通过了两个 3210 ROM;物理时序和 SELECT 附加的对端仍有待解决。 | | SIMI 控制器和 SIM 卡 | Partial hardware | 独立的设备通过 byte/reset 回调组合;原生的 SIMI/FIQ6 和 T=0 初始化工作正常,并且 GSM 11.11 线性记录路径持久存储固件写入的 ADN 联系人。时序、错误、安全性和更广泛的文件覆盖范围仍不完整。 | | DSP 邮箱/服务角落 | Prototype | Bootstrap、服务时序、packet rings、两个固件编程的语音和孤立的 GSM-FR 语音后端通过 HLE 工作;DSP 核心和 DSP 本地 COBBA 控制解释仍未被模拟。 | | 启动/服务/网络对端 | Prototype | 独立的服务、Nokia L1 和符合标准的 GSM 设备通过 DSPIF 组合;一个实验性 cell 支持驻留、位置更新、释放和运营商显示。更广泛的对端契约仍不完整。 | | 交互式启动 | Mapped | 预置的引导到达待机屏幕,并通过受保护的物理键盘 oracle 打开 `Phone book`。模式 4 与 UI 兼容;跨 ROM 的显示一致性仍有待解决。 | | MMI/RTOS 内部机制 | Mapped | 由固件拥有;应观察它们而不是模拟它们。 | | 音频、RF、网络 | Partial HLE | 实验性 cell 支持原生注册、寻呼、MT 呼叫/SMS 控制、双向 GSM-FR TCH/F 媒体、FACCH/SACCH 共存、降级帧和跨越两个 3210 ROM 的拆解。物理 RF、移动性、MO 呼叫、更广泛的服务和 DSP 本地 COBBA 多路复用/控制解码仍有待解决。 | 只有当固件通过其普通接口到达组件、它不执行固件状态写入、时序表示为设备行为、支持 save state 并且通过参考和可移植性检查时,该组件才被视为已被完全封闭。 ## 路线图 ### 参考 3210 里程碑 1. 稳定的默认和建模引导回归。 2. 原生 SIM 初始化和离线桌面。 3. 可靠的键盘导航和持久化设置。 4. 地址簿编辑和文本/T9 输入。 5. 铃声播放和音频输出。 6. 运营商 logo 和其他同期内容工作流。 7. Snake 和其他内置游戏。 ### 平台工作 1. 恢复 MAD2 剩余的 clock-divider、transition-latency、extended-interrupt 和 rail-sequencing 契约。 2. 仅在受控的固件消费者或硬件测量提供单位时,替换校准过的 CCONT ADC/serial 时序和板级模拟值。 3. 从原生的固件请求或针对性的协议一致性测试中,扩展 SIMI/卡时序、错误、移除、CHV 和文件行为。 4. 将 DSPIF 保持为仅用于传输的挂载点,同时仅根据已验证的流量扩展 HLE;未来的 C54x 后端将在同一接口处替换该 HLE。 5. 使用经过验证的 3210、3310、3330 和 3410 配置文件,将共享的 DCT3 行为与特定于产品的显示、flash、存储和对端契约区分开来。 新手机支持最初只是一个可移植性探针。提前失败的 ROM 在 识别出 3210 特定假设时仍然具有价值。 ## 仓库布局 ``` driver/ MAME driver and extracted Nokia devices tools/ Thumb-1 disassembly and cross-ROM helpers ghidra/scripts/ headless analysis and symbol-export scripts ghidra/symbols/ firmware-specific symbol maps docs/ hardware atlas and RE reports roms/ ignored, user-supplied firmware plus verification instructions ``` 开始阅读: - [`docs/README.md`](docs/README.md) 查看文档地图和权威规则。 - [`docs/hardware_atlas.md`](docs/hardware_atlas.md) 查看固件/硬件边界。 - [`docs/driver_structure.md`](docs/driver_structure.md) 查看实现规则。 - [`docs/driver_vision.md`](docs/driver_vision.md) 查看组件下线路径。 - [`docs/service_bootstrap.md`](docs/service_bootstrap.md) 查看服务会话启动。 - [`docs/mmi_layer.md`](docs/mmi_layer.md) 查看经过验证的键盘、idle/menu、security-editor 和电源生命周期。 - [`docs/sim_registration.md`](docs/sim_registration.md) 查看 SIM 初始化和相邻会话固件映射。 - [`docs/tooling.md`](docs/tooling.md) 查看分析工具。 ## 固件政策 此处不分发任何 Nokia 固件、EEPROM 镜像、专有工具或派生的反编译产物。 请携带合法获取的镜像并将其放置在被忽略的 `roms/` 目录下。本仓库 仅出于可复现性目的记录文件名和哈希值;请参阅 [`roms/README.md`](roms/README.md)。 绝对地址和导出的 3210 符号映射专用于 NSE-8/9 v6.00。其他 ROM 即使在实现相同硬件契约的情况下,也可能会移动函数和数据。 ## 构建与复现 Makefile 锁定了上游 MAME 版本,并将 Nokia 源码覆盖到本地检出目录中。 安装所需的 3210 文件后: ``` make build make verify make swap16 ``` `make verify` 会引导显式的缺失硬件配置文件并检查其语义谓词。 正常的产品组合是类型化的机器配置。命名的 `HWCFG` 和 `DIAGCFG` fixture 选择负面组合和控制器一致性测试; 被动诊断使用 MAME 日志记录。`NOKIA_DCT3_*` 变量仅限于 外部 Lua 工具,用于脚本输入、捕获和测试输出。之前的 `NOKI3210_*` 前缀不再保留作为兼容性别名。 ## 工程规则 - 硬件行为应属于设备或普通的内存映射处理程序。 - 产品差异是机器配置或数据,而不是 Firmware-PC 条件。 - 研究 hook 是可选的、明确标记的,并且必须随着契约变为设备而减少。 - 失败的探针应被记录和移除,而不是作为兼容性路径保留。 - 3210 oracle 在每次行为更改后运行。 - 在声明行为在 DCT3 范围内共享之前,使用第二个 ROM 进行验证。 ## 许可证 原始项目代码为 BSD-3-Clause;请参阅 [`LICENSE`](LICENSE)。MAME 单独获取,作为 整体遵循 GPL-2.0-or-later 协议。受版权保护的手机固件不属于本项目的一部分。
标签:MAME, rizin, 云资产清单, 固件分析, 嵌入式系统, 硬件驱动, 逆向工程