4、ROM与Flash结构:Mask ROM、PROM、EPROM、EEPROM、NAND Flash与NOR Flash的区别
好,咱们今天聊聊存储单元里最让人头疼的一类——ROM和Flash。说实话,我刚入行那会儿,光是把Mask ROM和PROM搞清楚就花了不少时间。你想想看,网表里一堆莫名其妙的存储节点,到底是只读的还是可擦写的?这直接决定了你后续的逆向策略。
我个人习惯把这类器件分成两大类:真正的一次性写入和可以反复折腾的。下面咱们一个一个过。
4.1 Mask ROM:出厂即定型
Mask ROM,说白了就是“刻死的”。芯片制造时,光刻掩模版直接把数据写进去了。你拿到芯片,里面是什么就是什么,改不了。
核心特征:
- 存储单元通常用单管MOS,有/无连接表示0/1
- 面积最小,成本最低
- 适合大批量、固化的代码(比如键盘的键位映射)
我在逆向一款老式游戏机芯片时遇到过Mask ROM。当时看到存储阵列里全是规整的MOS管,但没有任何编程管脚,我就知道——这玩意儿只能读,别想写。嗯,这里要注意:Mask ROM在网表里通常表现为纯组合逻辑阵列,没有控制信号线。
4.2 PROM:一次编程,终生使用
PROM(可编程只读存储器)比Mask ROM灵活一点。用户可以自己写一次,但写完了就改不了。为什么?因为它的存储单元里有个熔丝或者反熔丝。
我曾经拆过一颗军用级PROM,里面用的是镍铬熔丝。编程时通个大电流,熔丝烧断,就代表“1”了。你想想看,这要是逆向时不小心把电源接反了……嗯,后果你懂的。
避坑指南:我曾经在逆向PROM时,误把编程电压当成正常读电压,结果熔丝全烧了。后来我学乖了:先查datasheet,确认读电压范围。
4.3 EPROM:紫外线擦除,电写入
EPROM(可擦除可编程只读存储器)是个里程碑。它用浮栅MOS管存电荷,紫外线照一下,电荷全跑光,芯片就清空了。
存储单元结构:
位线
|
漏极
|
控制栅 ---- 字线
|
浮栅 (存电荷)
|
源极
|
地线
我个人习惯在网表里找EPROM的标识:芯片顶部有个石英窗口。如果没有窗口,那大概率是OTP(一次编程)版本。OTP其实就是没窗口的EPROM,封装时省了石英,便宜但写不了第二次。
4.4 EEPROM:电可擦,字节级操作
EEPROM(电可擦除可编程只读存储器)比EPROM方便多了。不用紫外线,直接用电就能擦。而且它能按字节擦写,这在嵌入式系统里非常实用。
它的存储单元用了隧道氧化层,电压一高,电子就穿过去。我逆向过一颗汽车ECU里的EEPROM,里面存了各种标定参数。当时我盯着网表看了半天,发现它的控制逻辑比EPROM复杂得多——有专门的擦写状态机。
| 类型 | 擦除方式 | 写入方式 | 字节操作 | 典型应用 |
|---|---|---|---|---|
| EEPROM | 电擦除 | 电写入 | 支持 | 配置参数、校准数据 |
| EPROM | 紫外线 | 电写入 | 不支持 | 固件、Bootloader |
4.5 NAND Flash vs NOR Flash:两大阵营
好,终于到了重头戏。NAND和NOR,虽然都叫Flash,但结构完全不同。
4.5.1 NOR Flash:随机访问,代码执行
NOR Flash的存储单元是并联的。每个单元都能直接寻址,所以你可以像读RAM一样读它。这意味着:代码可以直接在NOR Flash里执行(XIP,eXecute In Place)。
我在逆向一款路由器固件时,发现它用的就是NOR Flash。网表里能看到完整的地址译码器,每个存储单元都有独立的字线。读速度很快,但写速度慢——因为擦除必须按块来。
个人经验:NOR Flash的网表特征很明显——地址线多,数据线宽,控制信号里有“读使能”和“写使能”。如果你看到存储阵列旁边有复杂的译码器,八成是NOR。
4.5.2 NAND Flash:串行访问,高密度
NAND Flash的存储单元是串联的。一个串里几十个单元串在一起,像一串珠子。这样面积小,密度高,但访问方式变了——你不能随机读某个字节,必须按页读。
为什么会这样?因为串联结构决定了:你要读某个单元,必须先让其他单元导通。说白了,就是串行访问。
我逆向过一块SSD里的NAND Flash,网表里全是页缓冲器和块擦除控制器。它的存储阵列看起来像网格,但每个“串”的源极和漏极是共享的。
NAND串结构(简化):
位线
|
选择管 (上)
|
单元63
|
单元62
|
...
|
单元0
|
选择管 (下)
|
源线
4.6 核心区别总结
我整理了一张表,方便你对照:
| 特性 | NOR Flash | NAND Flash |
|---|---|---|
| 单元连接 | 并联 | 串联 |
| 读取方式 | 随机访问 | 页读取 |
| 写入速度 | 慢 | 快 |
| 擦除粒度 | 块(64KB~128KB) | 块(128KB~512KB) |
| 密度 | 低 | 高 |
| 典型应用 | 代码存储、XIP | 大容量数据、文件系统 |
4.7 逆向识别技巧
最后,分享几个我在网表里识别这些存储器的经验:
- 看控制信号:如果有“擦除”和“编程”控制线,大概率是Flash;如果只有“读”信号,可能是Mask ROM或PROM。
- 看存储单元结构:单管+浮栅是Flash;单管+熔丝是PROM;单管+无浮栅是Mask ROM。
- 看地址译码器:NOR Flash有完整译码器;NAND Flash只有行译码和页缓冲。
- 看擦写次数:EEPROM通常有10万次寿命,NAND Flash有1万~10万次,NOR Flash有1万~10万次。网表里如果有“磨损均衡”逻辑,那肯定是NAND Flash。
一句话总结:Mask ROM是死数据,PROM是一次性,EPROM是紫外线,EEPROM是电擦除,NOR是随机读,NAND是串行读。逆向时,先看控制信号,再看单元结构,最后看译码器——基本不会翻车。
我的建议:逆向时别急着看存储单元细节。先找控制信号——读使能、写使能、擦除使能。这些信号能帮你快速定位存储类型。我曾经靠这个技巧,半小时就搞定了别人一天的工作量。