nokia-dct3-emulator:适用于Nokia DCT3手机的开源模拟器和分析工具包
摘要
一个适用于Nokia DCT3系列手机的开源模拟器和架构分析工具包,能够在浏览器或原生GUI中运行真实固件,用于离线教育分析和软件保存。
<p><a href="https://lobste.rs/s/pb8wvr/nokia_dct3_emulator_open_source_emulator">评论</a></p>
查看缓存全文
缓存时间: 2026/08/16 17:58
djr-747/nokia-dct3-emulator 来源: https://github.com/djr-747/nokia-dct3-emulator # Nokia DCT3 仿真器 针对 Nokia DCT3 时代手机(3310、3210、3410、5210、6210、6250、7110、8210、8250、8810、8850 及其姊妹机型)的开源仿真器与架构分析工具包。它能在浏览器和原生 SDL 图形界面中启动真实固件,忠实建模了 MAD2 平台 ASIC、CCONT 电源控制器、TMS320C54x DSP、PCD8544/SED 类 LCD、键盘矩阵、SIM 卡以及内置与外置 EEPROM。 除了手机界面功能: - 在合成网络上进行 GSM 注册;语音通话;短信收发。 - 通过电路交换数据承载进行 WAP 浏览,设置通过二进制短信传递。 - 将工厂身份记录(IMEI、FAID、SIMlock、安全码)离线配置到仿真 EEPROM 中。 - 提供 MBUS 服务总线,可通过零调制解调器 COM 端口供当时的 Nokia 服务工具使用。 一个历史软件保存项目:它记录并重新承载了已有约 25 年历史的过时硬件的行为,用于离线教育分析。 实现约束。 行为在硅片层面建模;固件未经修改。没有强制的自检结果,也没有蹦床机制。对 MCU RAM 的每次写入都是邮箱写入:DSP↔MCU 消息环、其头尾指针、COBBA 暂存单元、代码块请求/应答单元。配置的身份记录由固件代码解码和判定,在 5110 上则由运行 DCT3 安全密码的实机 C54x 掩模 ROM 执行。 已知偏差。 每次启动时,EF_LOCI 会从 SIM 卡中清除。ROM-4 仅将注册实现为完整的位置更新,因此持有有效位置的卡会驻留但不注册。联系人和短信不受影响。设置 SWSIM_KEEP_LOCI=1 可禁用清除。这可能是以下某些机型能达到待机状态但未注册的原因。其他待解决事项请参见待处理项。 — ## 固件 — 请自带 > 本仓库不包含受版权保护的固件、闪存转储或 EEPROM 镜像,且提交前钩子与 CI 检查确保其保持如此。 > 您必须提供自行合法获取的 .fls 镜像。将闪存镜像放入并指向目标: bash # 原生 ./build/dct3_boot_trace_gui "Nokia 3310 NR1 v5.79.fls" # Web — 可使用您的镜像重新构建模块: make all WEB_FW="Nokia 3310 NR1 v5.79.fls" # ...或让模块保持无固件状态,在运行时从 Web UI 加载镜像。 ### 各型号的启动能力与无线电功能 以下是各型号当前的进展。型号与版本从闪存头部读取,因此没有针对每个镜像的硬编码。 启动:✅ 达到可用屏幕(待机,或如工厂安全码输入等正常交互提示) · 🟡 达到“联系服务商”或一个它无法忠实清除的锁 · 🔴 早期停滞。 网络 / 通话 / 短信 / WAP:✅ 正常工作 · 🟡 部分工作 · ❓ 未测试 · — 不适用。不适用涵盖两种情况:手机自身固件不具备该功能(只有带有 WAP 浏览器的型号才能浏览),或其 DSP 引擎未实现该功能。GSM 协议栈位于 ROM-6 引擎中。ROM-4 仅负责驻留和注册,不支持通话、短信或电路交换数据。 | 型号 | 代码 / 版本 | DSP | 启动 | 网络 | 通话 | 短信 | WAP | 备注 | |—|—|—|—|—|—|—|—|—| | 2100 | NAM-2 v5.84 | ROM-6 | 🟡 | ❓ | ❓ | ❓ | ❓ | 安全码屏幕;拒绝 EEPROM 内置码 (12345)。未测试后续。见 #3 | | 3210 | NSE-8 v6.00 | ROM-4 | ✅ | ✅ | — | — | — | 已注册待机。需要 CCONT 持续就绪位模型和安全级别记录配置为其擦除的默认值;12345 在重新启用时仍可接受。无 SIM 卡启动至“插入 SIM 卡”。键盘矩阵通过固件按键映射表逆向工程(接线与 3310 不同) | | 3310 | NHM-5 v5.79 | ROM-6 | ✅ | ✅ | ✅ | ✅ | — | 参考基准,通过 make guard 固定为字节相同。此固件无 WAP 浏览器 | | 3330 | NHM-6 v4.50 | ROM-6 | ✅ | ✅ | ✅ | ✅ | ✅ | 工厂码 12345 → 首次启动时间向导。判定/上传单元通过 NHM 系列签名按构建版本解析。已确认 CSD 上的 WAP 和 OTA 设置短信 | | 3350 | NHM-9 v5.22 | ROM-6 | ✅ | ✅ | ✅ | ✅ | — | 需要有效身份:通用库镜像附带空的 EEPROM 分区。首先移植一个 NHM “EEPROM”块 (tools/graft_eeprom_block.py, 已验证 3330 供体)。其他与 3330 相同 | | 3410 | NHM-2 v5.46 | ROM-6 | ✅ | ✅ | ✅ | ✅ | ✅ | CSD / WAP / OTA 参考目标。待处理:设置时间时钟滴答间隙 | | 5110 | NSE-1 v5.30 | ROM-4 | ✅ | 🔴 | — | — | — | 本地安全在 C54x 协同模拟 (DSP54_COSIM=1) 下通过:掩模 ROM 解码并判定配置的 SIMlock、IMEI 和 FLASH-ID 记录,达到待机。Web HLE DSP 也达到待机。待处理:未注册 | | 5110i | NSE-2 v5.53 | ROM-4 | 🟡 | — | — | — | — | 2 MB 5110 刷新版。借用 5110 EEPROM 时显示“联系服务商”;5110i 特定记录自检未配置 | | 5130 | NSK-1 v5.30 | ROM-4 | ✅ | 🔴 | — | — | — | 5110 姊妹版 (Xpress-on)。待机。待处理:未注册 | | 5190 | NSB-1 v6.71 | ROM-4 | ✅ | 🔴 | — | — | — | 待机。待处理:未注册 | | 5210 | NSM-5 v5.40 | ROM-6 | ✅ | ✅ | ✅ | ✅ | ❓ | WAP 未测试 | | 5510 | NPM-5 v3.50 | ROM-6 | 🔴 | — | — | — | — | 早期断电。内存映射未解决 | | 6110 | NSE-3 v5.48 | ROM-4 | ✅ | ✅ | — | — | — | 已注册待机。需要从 blob 自身身份重新派生存储的安全设置校验和 | | 6130 | NSK-3 v5.61 | ROM-4 | ✅ | 🔴 | — | — | — | 6110 姊妹版。待机但未注册,与相同配置下的 6110 和 6150 不同。待处理,原因未知 | | 6150 | NSM-1 v5.23 | ROM-4 | ✅ | ✅ | — | — | — | 6110 姊妹版 (2 MB,自带外置 EEPROM blob)。已注册待机 | | 6190 | NSB-3 v6.13 | ROM-4 | 🟡 | — | — | — | — | 联系服务商。美国 NSB 构建版未通过额外判定的自检元素。逆向工程待处理 | | 6210 | NPE-3 v5.56 | ROM-6 | ✅ | ✅ | ✅ | ✅ | ✅ | 自检通过 DSP 块确认泵设置上传标志加上 ROM-6 自检完成响应器发布固件自身的确认来解决。已确认 CSD 上的 WAP | | 6250 | NHM-3 v5.00 | ROM-6 | ✅ | ✅ | ✅ | ✅ | ✅ | 6210 姊妹版。此外需要修复此库镜像不一致的 RF 校准校验和和 DSP 复位状态位模型 | | 7110 | NSE-5 v5.00 | ROM-4 | ✅ | ✅ | — | — | — | SED1565 显示器;逆向工程键盘和 Navi 滚轮(鼠标滚轮或箭头滚动,按压选择)。启动慢,然后可通过按键导航的已注册待机。有 WAP 浏览器但绑定 ROM-4,因此无 CSD 承载 | | 8210 | NSM-3 v5.31 | ROM-6 | ✅ | ✅ | ✅ | ✅ | — | 启动时安全码屏幕。使用正确的 EEPROM 安全设置注册 | | 8250 | NSM-3D v6.02 | ROM-6 | ✅ | ✅ | ✅ | ✅ | — | 与 8210 相同 | | 8290 | NSB-7 v5.22 | ROM-6 | 🟡 | — | — | — | — | 联系服务商。DSP 上传握手逆向工程待处理 | | 8810 | NSE-6 v6.02 | ROM-4 | ✅ | ✅ | — | — | — | 6110 系列滑盖机 (2 MB,自带外置 EEPROM blob)。已注册待机,键盘可交互。滑盖未建模 | | 8850 | NSM-2 v5.31 | ROM-6 | ✅ | ✅ | ✅ | ✅ | — | NSM Family-A 参考。与 8210 相同 | | 8855 | NSM-4 v5.13 | ROM-6 | ✅ | ❓ | ❓ | ❓ | ❓ | 待机。无线电未测试 | | 8890 | NSB-6 v12.16 | ROM-6 | 🟡 | — | — | — | — | 联系服务商(美国频段 8850) | 26 个注册型号中有 19 个启动到可用状态,其中 15 个能在合成测试网络上注册,显示运营商名称和信号格。 — ## 功能特性 仿真核心 - 内置 mGBA ARM 解释器(针对 DCT3 进行了大端修正),逐条指令驱动真实固件——不对应用层进行 HLE。 - MAD2 平台模型 (src/mad2/):ASIC 总线、中断/FIQ 控制器、定时器、RTC、Intel/Sharp CFI 闪存有限状态机、内置 + I2C 外置 EEPROM,以及 MBUS/FBUS USART。 - CCONT 电源/RTC/ADC 控制器及中断→事件测量协议。 - 26 个型号配置文件 (src/models/) 在运行时从闪存头部选择内存映射、LCD 控制器、电池/ADC 窗口、键盘矩阵和 DSP 变体。 DSP - 通过内置的 qemu-calypso 血统解释器 (third_party/c54x/) 实现忠实的 TMS320C54x 协同模拟,运行恢复的 DSP 镜像并支持按需页面上传叠加层。MCU↔DSP HPI 邮箱、启动握手、自检和保活机制均按真实硅片建模。在 5110 上,掩模 ROM 运行 DCT3 本地安全路径,解码配置的 SIMlock 记录并报告其自身判定。必需的 C54x 解释器修复:RSBX/SSBX 解码 (F6Bx/F7Bx,先前会吞掉 0xF0B0 OR A,-16,A)、MVDP 通过 prog_write 路由使掩模 ROM 拒绝写入、dmad 在 RPT 下针对 MVDK/MVKD/MVDM/MVMD 自动递增,以及身份密码使用的三个 ALU/控制流修正。 - 针对协同模拟未连接的型号,按 ROM 修订版拆分的高级 DSP 响应器。 外设与 I/O - LCD:PCD8544 类帧缓冲区,渲染到浏览器画布、SDL 窗口或 PNG。 - 键盘:带 IRQ 驱动的消抖和自动重复建模的矩阵扫描。 - 音频:统一的蜂鸣器和 PCM 通道混音器。按键音和 DTMF 来自 DSP:在 HLE DSP 下从邮箱音调振荡器合成,在 C54x 协同模拟下由 DSP 本身提供 PCM 样本。 - SIM 卡:通过建模的 SIMI UART 驱动的软件卡,具有真实 ATR、ISO-7816 PPS 和 GSM 11.11 T=0,直至字节节拍和过程字节握手。见下文。 - 电池、充电器、LED、振动器暴露给两个前端。 - 无线电:通过 DSP↔MCU 邮箱驱动的合成 GSM 小区(系统信息、寻呼、立即分配、LAPDm),承载注册、语音通话、短信和最小的电路交换数据承载。 GSM 网络、通话、短信和 WAP - 注册:所有启动的 ROM-6 型号均在合成网络上注册;ROM-4 型号也驻留并注册,5110 系列除外。 - 通话和短信在 ROM-6 引擎上,包括 CP/RP、SMS-DELIVER、EF_SMS 存储和智能消息铃声。 - CSD 和 WAP:一个 RLP 对等层、PPP 和一个 WAP 网关,可获取真实页面并将 WML 1.1 编译为 WBXML 使表单工作。它不绑定特定型号:它位于共享的 ROM-6 引擎中,并在手机自身 SETUP 中解码的 UDI 承载上启用。限制在于给定固件是否具有 WAP 浏览器和设置接收器。在 3330、3410、6210 和 6250 上已确认。 - OTA 设置配置:WAP 设置通过二进制短信到达,而非手动输入。 工厂配置与 DCT3 安全编解码器 - 针对 ROM-4 手机 (3210, 5110, 5110i, 5130, 5190, 6110, 6130, 6150, 8810) 的 I2C 外置 EEPROM 离线配置。无需供体手机或服务线缆。写入一致的 IMEI、FLASH-ID/FAID 记录、SIMlock 两部分、安全码以及启动验证器比较的所有校验和;固件读取、解码并判定它们。这使得 3210、6110、6150 和 8810 达到已注册待机状态。这些型号上的安全码提示是身份总和与存储校验和不匹配,而非 FAID 失败。 - 安全编解码器是开放的 (src/services/dct3_calcul.c):四种模式(MSID、FLASH-ID、Lock、IMEI)的记录编解码器。表格已转录,修正了一个已公开来源的错误:IMEI_DEF 第 9 字节为 0xFF,通过对真实服务工具写入进行反向解码恢复。tools/dct3_calcul.py 包含用于铸造 MSID 的离线逆向工具。 - SIMlock 传输填充是派生的,而非测量的,来自构建它的固件例程 (5110 v5.30 0x25792C..0x2579A2:成对的 16 位乘积、一个位反转的补码密钥,然后 24 字节异或)。对任何固定身份有效。 - 在两个 HLE 引擎下固定 MSID。 ROM-4 和 ROM-6 响应器使用通过 DSP 生成选择的、带有正确 COBBA 签名的按型号 MSID 来应答本地安全身份查询 ({74 34})。 - 仿真器自行发出 MBUS 配置命令;无需外部工具。src/services/identity_provision.c 构建 Windows 服务工具发送的 B8/BA/B6(选择器 0x4F)帧,形式上与捕获的 NokTool 流量字节相同,并通过主机串行桥使用的相同路径馈入 MBUS RX FIFO。固件服务处理器解码它们并写入 EEPROM。因此记录会落在构建版本存储的任何位置,不会直接操作 EEPROM 偏移量。可通过 Web UI 按钮或使用 REPROVISION=1(REPROVISION_AT= 设置触发步骤,REPROVISION=verify 读取身份而不写入)运行它。要求手机在正常模式下通过启动。没有回复的运行会超时,而不是半途写入。 前端 - Web (web/):周期驱动的 WASM 构建,按型号手机外壳 UI,可在任何浏览器中运行。 - 原生 SDL GUI:带手机照片、实时键盘和 LCD 的桌面外壳。 - Android (android/):为真实功能机外形 Android 手机(如 HMD Terra M)构建的原生 JNI 版本——无需手机外壳装饰,因为硬件本身看起来就像。目前仅支持 Nokia 3410;见 android/README.md。 - 零调制解调器 COM 端口:仿真器可将 MBUS 服务总线作为真实串行端口暴露,使当时的 Nokia 服务工具可未经修改驱动手机。NokTool、Rolis、Koci、NFREE 和 DCT3 EEPROM 工具在 Wine 下运行,并通过 MBUS 与手机通信,如同通过服务线缆上的硬件通信。见下文。 - 无头工具:dct3_boot_trace(带始终在线的事后处理的检测原生运行,标记每个停机 PC、消息和重置原因)和 tools/nav.mjs(确定性浏览器节奏工具,在模拟时间上播放按键脚本并将帧缓冲区渲染为 PNG)。 分析工具链 - 符号存储 (tools/symbols/):每个固件构建版本的地址/名称/消息数据库,带查找 CLI 和暂存→提升工作流。 - disfw:一个带注释的反汇编器,读取符号存储并解码有效地址、比较门、跳转表和内联消息 ID。 - NokiX 兼容脚本运行器 (tools/nokix/) 用于应用诊断覆盖层和自动定位符号。 — ## 快速开始 bash # Web (已提交的 WASM 核心可直接运行;重新构建需要 emscripten) make all && make serve # 在 http://localhost:8000 上提供 web/ 服务 # 原生 SDL GUI (需要 SDL2) make gui ./build/dct3_boot_trace_gui "your-firmware.fls" # 无头启动观测 make trace ./build/dct3_boot_trace "your-firmware.fls" 250000000 # 带注释的反汇编器 make disfw ./build/disfw "your-firmware.fls" 0x002EEBAE 12 # 真实 SIM 桥接 (可选;需要刷有 esp32/simbridge/ 的 ESP32) make simprobe ./build/simprobe /dev/ttyUSB0 atr # 测试 make test # 原生回归套件 (68 项检查 + dbgcon) make guard # 字节相同的启动守卫 (需要您的固件镜像) — ## 使用当时的工具驱动仿真器 仿真的 MBUS 服务总线可以作为串行端口呈现给主机。未修改的 Nokia 服务软件 (NokTool, Rolis, Koci, NFREE, DCT3 EEPROM 工具) 然后连接到手机,读取其 IMEI,转储并重写其 EEPROM,并运行其会针对服务线缆上的硬件执行的服务命令。可选:配置不需要它。使用它来用当时的软件驱动手机,或使用真实工具交叉验证配置。 bash MBUSBRIDGE=1 MBUSLOG=1 ./build/dct3_boot_trace_gui "your-firmware.fls" # [mbus-bridge] tty0tty: emulator=/dev/tnt0 tool COM=/dev/tnt1 (real DTR/RTS/DCD) 要求 - 带有真实调制解调器控制线的零调制解调器 tty 对。 MBUSBRIDGE=1 占用第一个空闲的 tty0tty (https://github.com/freemed/tty0tty) 对:仿真器打开偶数端 (/dev/tnt0),工具连接奇数端 (/dev/tnt1)。服务工具驱动 DTR/RTS/DSR/DCD/CTS,因此真实线路消除了对
相似文章
3G终于来了
一位网络爱好者记录了使用JTAG、焊接和开源Osmocom工具破解旧AT&T 3G femtocell以广播UMTS的过程。
@_philschmid: https://x.com/_philschmid/status/2070176665045434477
一份指南和Python脚本,用于利用Gemini 3.5 Flash的Computer Use能力控制Android模拟器。该功能允许模型查看截图并通过ADB执行返回的操作(点击、轻触、文本输入)。
Windows CE Dreamcast 社区版 (wince-dc)
一个适用于 Sega Dreamcast 的 Windows CE 社区版,它将光盘上的 CE 运行时转变为具有内置工具链的可用多任务桌面。
微型模拟器
一个基于网页的经典8位计算机模拟器集合,涵盖Amstrad CPC、ZX Spectrum、Commodore和Robotron等机型,使用Visual 6502和Visual Z80 Remix构建。
CP/M-68K 模拟器
一位业余开发者创建了一个适用于Motorola 68000 CPU的模拟器,可运行CP/M-68K,支持自定义BIOS和RAM磁盘;源代码已在GitHub和GitLab上提供。