导语:可以用UV清除在Intel 8752上执行代码保护的安全位,并且同时保持主程序内存的基本完整,这一操作是通过将一种UV掩模(指甲油)应用到模具的EPROM区域实现的。
概述
可以用UV清除在Intel 8752上执行代码保护的安全位,并且同时保持主程序内存的基本完整,这一操作是通过将一种UV掩模(指甲油)应用到模具的EPROM区域实现的。
考虑到在芯片时代(1985年),这一结果并不令人惊讶,并且可以通过相同的技术绕过8751代码保护(与8752属于同一家族),但尽管如此,本文还是对其进行了确认并提供了复制该过程的步骤。在这次尝试中,可能是由于EPROM的一个角落没有被UV掩模完全覆盖,结果丢失了一些字节。
介绍
Intel8752 BH封装
Intel8752是一个通用的MCU,制造于20世纪80年代。与Intel 8751类似,它具有一个安全设置:一旦设置好,任何试图转储EPROM的操作都会读出一个看似空白的EPROM,而MCU的原始EPROM内容在正常操作中是完整的。这种特性对于需要隐藏敏感信息(比如对称密钥)的供应商来说是很有吸引力,可以防止盗版,并且增加了程序漏洞分析的难度。
通过将安全位暴露给UV,可以绕过8751的代码保护,同时可以使用指甲油保护EPROM的其余部分不受UV的清除1 2。鉴于8752和8751属于同族,所以在8752上使用同样的方法也就不足为奇了。
首先,我通过Bunnie的博客了解了这项技术,然后和John McMaster一起改进了这项技术。经McMaster允许,我使用他的设备、材料和实验室来进行这项研究,同时McMaster也教了我一些技术。
使用UV清除安全位是一项相当老的技术。现代芯片实现了一些针对性的缓解措施,如屏蔽和安全网格等,使得攻击更加困难。
准备
由于手边没有程序,所以我必须用0xCA字节填充整个程序内存。这一操作的目标是设置好安全位并使用UV清除后,对其重新读取。在启用代码保护之前,我读取了模式以确保芯片的程序正确。
0xCA测试模式
一旦被验证,我就启用代码保护并重新读取芯片。
从安全的8752中读取出的
这一操作是对有代码保护的8752进行的可预期行为。与大多数具有代码保护的现代芯片不同,8752没有可供程序员读取的反馈或“安全位”。
打开陶瓷DIP(CDIP)
目标是一个带有熔化石英窗口的陶瓷DIP(CDIP),该窗口可以从视觉上暴露模具。由于不能使用电来清除EPROM,因此这些窗口可以让程序员通过20 – 60分钟的UV暴露来清除程序内存。UV引起电离,因此会消耗EPROM中浮栅的存储电荷,这使得它们可以重新编程。由于我想在不影响程序内存的情况下清除安全位,所以最好对EPROM有物理访问,以便用指甲油对其进行掩盖,因此我需要做一个decap。
该陶瓷封装由两个陶瓷半片(顶部、底部)组成,而这两个陶瓷半片用玻璃熔块组合在一起。顶部的陶瓷半片保护层保护模具。我们的目的是将芯片加热到足够的温度来预热包装和工件夹具,然后用丙烷火焰加热顶部的陶瓷材料,直到玻璃熔化将上下两部分陶瓷半片粘合在一起。
打开陶瓷芯片操作台
McMaster向我传授了他的打开陶瓷芯片技术,即热熔化打开陶瓷40针封装技术,如下图所示:
1.将芯片放置在机加工块上。我忘记了该加工块的尺寸,但是我用了一个Starrett 154C的可调平行加工块,并对其进行了调整使之坚固并适合大头针,同时在陶瓷体下面为热胀留出了空间。
2.将加工块块和芯片放在虎钳上,钳住大头针。在陶瓷体下面预留一些空间,否则封装会在膨胀的时候断裂。理想的情况下,这种装置也能帮助散热,所以高热量质量的虎钳是首选。如果大头针和/或底部太热,我可能会在去掉顶部的陶瓷半片时,把大头针去掉。
3.放置一个夹钳,用夹钳的锯齿/尖端抓住顶部的陶瓷半片,像下图这样:
当玻璃熔块熔化时,夹钳主要用来夹起顶部的陶瓷半片。它还可以帮助将热量散发在顶部陶瓷片上。
4.将加热枪对准芯片顶部(X/Y平面)。试着移动加热枪以确保热量均匀/对称地分布在芯片的顶部。
5.将加热枪设置在455摄氏度(850华氏度),加热封装20分钟。请记住,加热持续的时间取决于老虎钳的热质量。
6.关掉加热枪。这时包装应该很烫,但还不够热,还不能把玻璃熔化来将两个半片组合在一起。
7.请参阅下面的安全注意事项。
8.将丙烷火焰与顶部陶瓷半片保持5CM(2英寸)左右的距离,并尽可能的与之保持垂直,同时在陶瓷半片的顶部和底部来回移动加热(朝向并远离包装上的凹槽)。这一操作的目的是在不同样加热底部陶瓷半片的情况下,使热量均匀分布。
9.如果丙烷火焰有轻微的角度,则每2-4秒更换一次加热面。
10.在使用丙烷火焰时轻轻摆动夹钳。
11.重复步骤7-10。
12.在用丙烷火焰加热几次之后,顶部半片应该几乎不用费力就能夹起来,同时还可以扭动钳子。这时立即松开丙烷火焰,以避免火焰击中模具/封装接线,同时提升顶部陶瓷半片。如果提升过程中用力过大,会有将大头针与顶部陶瓷半片一起拆掉的风险。
安全提示:虽然打开陶瓷芯片不需要处理腐蚀性物质或酸,但有可能会破坏陶瓷封装。用上述方法,在夹具上的用力不当将导致陶瓷片破碎,碎片被抛向不同方向。因此需要使用抗冲击面罩来降低身体伤害的风险。
打开Intel8752BH
识别EPROM
在检查显微镜下可以看到模具的一些普通特征。我特别感兴趣的是识别和掩盖模具的EPROM部分,同时保持其余部分完好无损。假设安全位不在EPROM区域。
在检查范围内的Intel8752BH模具
由于它们的重复结构、内存数组的特性,这四个模块是有意义的。但是,包含SRAM和EPROM.SRAM数组的模具有一个更粗糙的模式,该模式在模具的下部可见,所以我想要在模具顶部覆盖两个块。
掩盖EPROM
可以用指甲油来保护模具特征不受UV的损害,所以我要小心地将指甲油滴到EPROM区域。如果我在EPROM上滴的指甲油太少或错过一个点,在UV擦除过程中那部分就会被损坏。因此这一操作有覆盖安全位的风险并且我需要防止它被清除。一般来说,首选后者,因为这个掩模可以被重新应用,我们不想破坏我们的程序。
掩模应用程序设置
McMaster建议把芯片放在一个碗里,倒一点丙酮进去(不一定是在模具上,虽然在某些情况下可能有用)。丙酮蒸汽会显著减缓指甲油变干的过程,并使其在应用于模具区域时处于可以良好流动的状态。我必须通过实验找到合适的丙酮量。丙酮量太多会使指甲油流动性太强,难以控制。这跟水彩颜料和油画颜料的区别比较像,丙酮量多一些,会使指甲油的状态会跟水彩颜料比较一致。丙酮池也可以用来清洁毛刷。
毛刷是用一缕短的动物毛附着在镊子上制作而成的。
该过程如下:
把芯片和小块放在一个小碗里。这个小块将被用作指甲油托盘,以避免刷子从碗中出来并变干。
往碗里倒适量丙酮。确切的数量需要实验。
把碗放在检查显微镜下,把焦点放在模具上。
在托盘上涂一些指甲油。
拿一个刷子(我用一缕5毫米的动物毛粘在一个把手上制作而成),把它浸在指甲油的托盘里。在这之后,不要把刷子从碗里拿出来,直到不再使用它为止。
继续将指甲油涂抹到EPROM区域直到完全覆盖。覆盖住EPROM内存数组周围的行解码器即可。
如果对结果满意,从碗中取出芯片,使指甲油变干。用丙酮清洗刷子,并将其从碗中取出。
要重做这个过程,在模具上喷上丙酮,直到去除所有的指甲油。确保不要喷得太猛,因为这会增加弄断封装接合线的风险。
滴上指甲油后的Intel8752BH
注意,EPROM其中一个块的右上角没有足够的覆盖。另一个块的左下角也可能是这样。这两处覆盖不完全解释了我在UV擦除后出现的一些内存损坏的情况。
UV擦除
现在是考验我运气的时候了。我把芯片放在UV下,设置一个小时的定时器。不同的芯片,UV擦除时间的有效性是不同的:时间长一点不会损坏芯片,但更短的时间可以预防我遇到过的腐蚀的问题。我决定选择更长的时间,因为我不想对我的假设是否错误存在怀疑,或者我不小心用指甲油覆盖了安全部分。
将已经打开的Intel8752BH放入UV清除器中
首先,我建议编程、保护,然后在使用掩模前将UV应用到芯片上。如果在这种情况下,安全位没有重置,那么安全位上可能有遮盖物或可能需要其他技术。否则继续执行本文中描述的步骤。
结果
这时可以把芯片放回程序员的套接字上并尝试读取。
安全位已清除并有轻微数据丢失
当获取了大部分的0xCA后,由于一些角落没有覆盖好,有轻微数据丢失。不管怎样,我最终还是转换了安全位,并且我需要一个更加谨慎的掩模应用程序可以让我不受影响地转储程序内存。
附录:失败的尝试
我的第一次尝试结果覆盖了比EPROM多一些区域。UV擦除后,没有使用这个掩模转换安全位。这意味着,进行两种掩模尝试,可以粗略地了解到8752上安全位的位置,并通过高倍显微镜进一步分析。
UV掩模尝试最终覆盖了安全位