该博客连载将介绍dump(转储) flash(闪存)芯片的方法,本文是该博客连载的第一部分。本文中,我们将描述如何拆焊flash芯片,以及设计和构建相应的分线板(breakoutboard)。

本博客连载将详细介绍针对嵌入式非易失性存储器的简单而有效的攻击方法。此类攻击允许攻击者执行以下操作:

读取存储芯片里的内容;

修改存储芯片里的内容;

监视源于或对存储芯片的访问,并对其进行修改(中间人攻击)。

我们将讨论以下主题:

拆焊flash芯片;

用KiCAD设计分线板;

制作和微焊PCB;

在IoT设备上安装分线板;

Dump SPI(串行外设接口) flash芯片;

Dump 并行flash芯片;

中间人攻击。

假设你又打开了一个IoT设备,偶然发现了里面的flash芯片。你一定很好奇,想知道其中奥秘。

拆焊 flash 芯片

有两种方法可以读取flash芯片的内容:

直接连线至芯片的引脚上;

拆焊flash芯片,然后把它插在另一块板子上。

选择读取芯片方法的考虑因素之一是集成电路(IC )的封装方式。比如说,直接连线到芯片引脚的方法对使用四侧引脚扁平封装(QFP)的芯片很有效,但是该方法不适用于无可见引脚的芯片。以下例子中的芯片采用球栅阵列封装(BGA),也就意味着芯片上没有可连接的可见引脚,所以我们选择将之拆焊。

我们要拆焊的芯片图片:

此方法优点:

我们提取flash芯片,不会影响板子上的其他元器件。

将芯片从板上完全移除,我们就能研究下面的PCB,并找出连接flash芯片的线路。

可以用换别的东西替换原来的芯片(比如另一个芯片,单片机等等)。

此方法缺点:

板子在缺少元器件的情况下无法使用,如果你想以后继续用这块板子的话,你要把芯片焊回去。

提取的过程中附近的一些部件可能会受损。

如果操作失误的话,可能会损坏flash芯片本身。

所以...拆焊flash芯片,对吧?如果你以前从未尝试过拆焊电子元器件,那么对你来说棘手的部分是同时在所有引脚上熔化焊料。有几种方法可以做到,我们这里选择用热风枪,加热芯片所在的区域,等待焊料熔化后拿掉芯片。

此方法简单快速,但也容易拆焊周围的元器件,所以要当心,不要移动周围的元器件(此刻千万别打喷嚏)。

下面的图片展示了我们拆下的芯片,可以观察下PCB布线。我们可做出一些假设,比如最下面两行很有可能未被使用,因为它们没有在线路上。

用KiCAD设计分线板

我们现在拿那个芯片做什么? BGA布局让人困惑,对于完全相同的芯片,你可以使用5x5或4x6网格。引脚分配同样有趣,通常是针对芯片。你可能也想知道,如果这些引脚全部封装在像这样的网格中,那么如何连接引脚?

方法之一是做一个分线板!在分线板上做一个芯片所有引脚的镜像,而且引脚之间的距离更大,所以你可以轻易地连接引脚。

为了实现这一点,我们首先需要收集关于芯片本身的一些信息。大多数时候,品牌或型号写在芯片上以便于识别。有了这些信息,你可以查找相应的数据手册。如果你无法识别芯片,或者找不到数据手册,则必须在PCB上做一些逆向工作来识别每个信号。

在我们芯片上的第一行显示了品牌:MXIC代表Macronix International。第二行是芯片的型号,我们由此可以找到MX25L3255EXCI数据手册。

我们感兴趣的部分是引脚布局,即数据手册的第7页,介绍了BGA(4x6和5x5两种网格)和SOP8 (8引脚小尺寸封装)。我们可以看到只有8个引脚是有用的,其他引脚被标记为“NC”,意思是“无连接”。

为了连接flash芯片,我们需要一个包含所有必需引脚的PCB,这些引脚要易于连接。

可以用KiCAD来设计PCB,KiCAD是最受欢迎的电子设计自动化(EDA)软件之一。

如果你不熟悉KiCAD,可以参考许多很好的教程,例如KiCAD Quick-Start Tutorial。

设计分线板和设计其他板子的过程相同:

1. 在EEeschema中创建分线板的电路图,并定义相关的元器件,例如flash芯片。

2. 在PcbNew中定义flash芯片的封装形式,这里我们会用到之前看过的数据手册。我们用BGA封装并添加一个4x6网格和两个连接8个有用引脚的1x4连接器。最后一步是布线来连接我们的元器件。

设计已完成,那么如何将KiCAD里的设计做成PCB呢?

制作PCB

PCB一般是两层铜之间夹一层基板。基板通常由FR-4(环氧板)制成,但也可以用其它便宜的材料。在铜层上完成布线后,要除去多余的铜。

有几种技术可以去除不需要的铜,我们尝试了以下技术:

蚀刻;

数控铣。

我们使用蚀刻技术制作了4x6 BGA PCB,并且用数控铣技术制作了5x5 BGA PCB,详见下文。

蚀刻

蚀刻是指使用化学试剂除去金属上未受保护的表面。我们使用墨粉规划线路,并保护需要保留的铜。

我们用热转印法来实现设计。用激光打印机将设计打印在亮面纸上,然后将该纸粘贴到基板上,并施加热量和压力将设计印在铜层上。通常可以使用普通的熨斗来施加热量和压力。我们发现层压机效果更好,因为施加的热量和压力分布更均匀。

下一步就是蚀刻。将板子浸入化学试剂中,除了墨粉覆盖的铜,其余的铜将被去除。

蚀刻后的分线板还带着墨粉:

用丙酮除掉墨粉:

PCB板现在可以进行微焊了,微焊就是焊接微小的元器件,因此需要显微镜。

传统焊接的另一个区别是焊锡,传统焊接使用锡线,而BGA微焊使用锡球。

接下来,我们可以开始重整锡球:

在每个焊盘上放一个焊球,并加热至熔化;

调整芯片和板子;

回流焊。

注:此图为GIF,见附件

正在重整锡球:

最终将芯片微焊在了板子上:

数控铣(xǐ)

另一种技术是用数控铣床来加工铜层,该技术实际上是通过隔离来生成线路,并且保留多余的铜,而不是除掉不需要的铜。

1. 用5x5 BGA构建PCB。4x6版本用于分线板,我们这里设计了5x5版本,以便直接插入通用EEPROM(电子抹除式可复写只读内存)编程器的ZIF(零插拔力插座)插口。正如我们在数据手册中看到的,该芯片采用SOP8封装,因此我们选择模拟DIP8(8引脚双列直插封装)排针,引脚分布与SOP8相同。对于通用EEPROM编程器来说,这就基本上相当于是通过SOP8-DIP8适配器来读取SOP8芯片。

2. 芯片的封装形式与我们为4x6设计的相似,但是对于5x5网格,DIP81x4连接器距离更近,而且为遵循SOP8布局,线路也更复杂,这完全不同于之前那个BGA。

3. KiCAD无法直接生成与数控铣床兼容的文件,因此我们要使用FlatCAM。FlatCAM可以处理Gerber文件,并且可以为数控铣床定义分隔铜线路的轨迹。为了避免短路,我们完全去除了BGA芯片下的一个区域中不需要的铜。

4. 我们将生成的STL文件传输给负责控制数控铣床的bCNC。bCNC的一些功能很好用,例如自动调平,即多点测量电路板的实际高度(因为没有什么东西是完全平的),以及生成下面图片中看到的热图像。

对应bCNC中绿色高亮的轨迹正在加工:

5. 加工好的板子:

近看成品可以看出BGA芯片下的线路:

6. 接下来,我们涂一些阻焊层,这是保护铜免受氧化的特殊绿色层,并用紫外线固化。

7. 阻焊层覆盖的BGA和1x4连接器的焊盘是无法使用的,我们得手动刮开焊盘上面的薄层。

8. 镀锡,在所有焊盘上放置焊锡:

9. 再用数控铣床打洞和切割板子的边缘:

10. 最终的焊有BGA芯片的板子成品,可拿来直接插入通用EEPROM编程器:

因为我们选择模拟SOP8引脚排列,我们只需告诉编程器我们的芯片是SOP8版本!

彩蛋——失败集锦

我们整理了一些失败状况,因为总会发生计划外的事情,但是我们通过这些试验学到了很多东西,现在我们已经准备好进行下一步在IoT设备上安装了:)

热转印并不像听起来那么容易。。。

以合适的深度在数控铣床上加工也不像听起来那么容易。。。

找不到不粘在绿色阻焊层的塑料(后来发现宜家的冻存袋很好用:))

尝试处理绿色阻焊。

第二次尝试用了一个带弹簧的工具:看起来好像还可以,但是实际上连接焊盘的线路被切断了。。。

第三次先加了一些焊锡,想着这样能变厚一些。

弄出来一个很厚的绿色阻焊层的“湖”,无法做紫外线固化,当结冰的湖的表面破裂时。。。

结论

这就是我们的第一篇文章,介绍了如何拆焊flash芯片和设计PCB,也详细描述了两种PCB制造技术。

致谢

感谢Quarkslab所有对本文进行了校对并提供了有价值反馈的同事们。

本文由看雪翻译小组 SpearMint 编译,来源quarkslab@Emma Benoit,Guillaume Heilles,Philippe Teuwen 转载请注明来自看雪社区

1.《flash芯片数据如何读出数据、从flash芯片读取数据的原理!》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《flash芯片数据如何读出数据、从flash芯片读取数据的原理!》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3257945.html