该博客连载将先容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呢?
制作PCBPCB一样平常是两层铜之间夹一层基板。基板常日由FR-4(环氧板)制成,但也可以用其它便宜的材料。在铜层上完成布线后,要撤除多余的铜。
有几种技能可以去除不须要的铜,我们考试测验了以下技能:
蚀刻;
数控铣。
我们利用蚀刻技能制作了4x6 BGA PCB,并且用数控铣技能制作了5x5 BGA PCB,详见下文。
蚀刻蚀刻是指利用化学试剂撤除金属上未受保护的表面。我们利用墨粉方案线路,并保护须要保留的铜。
我们用热转印法来实现设计。用激光打印机将设计打印在亮面纸上,然后将该纸粘贴到基板上,并施加热量和压力将设计印在铜层上。常日可以利用普通的熨斗来施加热量和压力。我们创造层压机效果更好,由于施加的热量和压力分布更均匀。
下一步便是蚀刻。将板子浸入化学试剂中,除了墨粉覆盖的铜,别的的铜将被去除。
蚀刻后的分线板还带着墨粉:
用丙酮除掉墨粉:
PCB板现在可以进行微焊了,微焊便是焊接眇小的元器件,因此须要显微镜。
传统焊接的另一个差异是焊锡,传统焊策应用锡线,而BGA微焊利用锡球。
接下来,我们可以开始重整锡球:
在每个焊盘上放一个焊球,并加热至熔化;
调度芯片和板子;
回流焊。
注:此图为GIF,见附件flash_reballing.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 转载请注明来自看雪社区










