mnaberez/f2mc8dump
GitHub: mnaberez/f2mc8dump
利用 F2MC-8L 微控制器的外部总线特性,通过硬件电路与配套固件提取通常无法访问的内部 ROM 代码。
Stars: 16 | Forks: 3
# f2mc8dump

## 概述
某些 Fujitsu F2MC-8L 微控制器具有
外部总线能力(参见[目录](https://web.archive.org/web/20170514004456/http://www.fujitsu.com/downloads/MICRO/fme/micros/micros_2006.pdf))。
我发现外部总线可用于转储通常无法访问的
内部 ROM 内容。
通过一个 mode 引脚可以启用外部总线。在此模式下,内部 ROM 被禁用,其地址空间被重定向
到外部总线。我通过连接一个将转储程序写入 RAM 的外部 EPROM,然后跳转到 RAM,转储了几个 F2MC-8L 微控制器的内部 ROM。当代码从 RAM 执行时,我更改了 mode 引脚。外部总线被禁用,内部 ROM 被启用,但代码继续从 RAM 执行并转储出了内部 ROM 的内容。
## 测试
我开发这种方法是为了提取由 Clarion 制造的[Volkswagen Premium IV](https://github.com/mnaberez/vwradio)汽车音响的固件。这些音响包含以下微控制器:
- MB89623R
- MB89625R
- MB89677AR
我成功提取了它们所有的内部 ROM 代码。我也测试了来自其他产品的上述芯片样品,并同样能够从中提取代码。
## 硬件
硬件设置需要将 F2MC-8L 微控制器从
目标设备中移除。它被放置在一个带有以下其他组件的电路板上:
- 2764 或类似的带有转储固件的并行 EPROM
- 74HCT373 透明锁存器
- 74HCT138 3-8 译码器
- 5V TTL 振荡器 (1-8 MHz)
- 5V 稳压器、去耦电容、上拉电阻等。
有关详细信息,请参阅 `hardware/` 目录。
需要一个带有 9 个探针(8 条数据线,1 条选通线)的逻辑分析仪来
捕获转储硬件的输出。
## 固件
使用 [asf2mc8](http://shop-pdp.net/ashtml/asf2mc.htm)
汇编器汇编 `firmware/` 目录中的转储固件,并将其烧录到 EPROM 中。
## 转储
构建硬件并以其外部总线模式启动(MOD0=Vcc)。它将
立即开始通过 P30-P37 转储内存空间,并在
每个字节后在 P40 上输出 /STROBE 信号。它将循环遍历内存并不断进行转储。如果你
使用逻辑分析仪捕获它,你将看到来自
转储固件的字符串 `EXTERNALROM`。
在保持通电的情况下,将 MOD0 更改为 Vss。这将选择内部
ROM 模式。程序将继续转储,但现在它将转储的是
内部 ROM。使用逻辑分析仪捕获输出,并让
其运行几分钟,以便整个内存空间被转储几次。
将捕获内容保存到文件中。
使用 `host/` 目录下的 Python 脚本,从逻辑分析仪捕获的内容中分离出单个
ROM 镜像。
## 反汇编
获取二进制文件后,使用 [f2mc8dasm](https://github.com/mnaberez/f2mc8dasm) 对其进行反汇编。
## 作者
[Mike Naberezny](https://github.com/mnaberez)
标签:云资产清单, 固件提取, 嵌入式系统, 微控制器, 硬件, 硬件安全, 自动回退, 逆向工具, 逆向工程