固件提取,对博主来讲一直带着一层神秘的面纱,归根结底还是因为博主之前对电路、硬件、嵌入式等等了解比较少(说白了就是菜鸡)。巧不巧,单位实验室里正好有固件提取的设备,为了后续工作的顺利开展,简单研究了一下,并做如下记录。
先上图,下图是目前实验室已有的RT809H编程器。
RT809H是一种性价比较高,并且比较简单易用的通用编程器,使用的时候,直接通过上图中的USB口连接计算机即可。通过简单验证,直接连接USB线也可以工作,但是最好还是在电源口插上12v的电源。
手头上针对该编程器的配套小工具如下图所示。
芯片夹(图1),可以用于夹住SOP8的Flash芯片(如图4)。这种芯片夹虽然简单,但是并不好用,首先,这个夹子稍显笨重,面对电路板上薄薄的SOP8,有些力不从心,一不小心就脱落;更加要命的是,SOP8周围可能还布置了很多其它的元器件,导致根本就下不去夹子,完全用不了。
芯片底座(图2),这种底座可以用于SOP8和SOP16的芯片,但是实验室的底座明显偷工减料了,只有8个金属弹片,所以只可以用于SOP8的芯片。细心的朋友可能已经发现了,这种芯片底座更加不靠谱,需要把芯片切下来,放到底座上,然后提取,先抛开是否有熟练的手艺把芯片切割下来,有的测试场景下,根本就不允许破坏被测设备,或者客户不同意切割芯片下来,所以这种芯片底座实用性也不是很好。
既然实验室提供了这种芯片底座,还是说一下简单用法,这种底座的底部背面有竖着两排8针(针对SOP8)或者两排16针(针对SOP16),按照如图3所示的样子,从底部开始插到编程器的接口上即可。注意两点:第一,必须从底下开始插入,不能从顶端;第二,注意SOP芯片的方向,小圆点(见图3)在左上方,小圆点位置代表的是SOP中编号为1的引脚,然后逆时针依次为2、3、4、5、6、7、8,SOP16也是一样的逻辑。
正好实验室手边有一个切割好的SOP8芯片,我们就用芯片底座连接RT809H编程器提取一下固件试试看。
首先,按照上面的要求,将SOP8芯片正确地放到芯片底座上,并将芯片底座正确插到RT809H编程器上。然后使用USB线,将RT809H编程器连接到计算机,这个时候编程器的指示灯会亮起来,最好还是把电源也接上,以免供电不稳定。
然后以管理员身份运行计算机上的RT809H程序。
程序启动后,会显示设备已经通过USB口正常连接,如下图所示。
点击左上角的“智能识别SmartID”,会弹出如下图所示的对话框,提示选择芯片类型。
因为我们这里使用的是SOP8的flash,所以选择SPI flash,电压默认是3.3v,我这里没有修改,然后点击确定。
这时候,就识别了芯片的基本信息,如上图。然后点击左上角第二个按钮“读取Read”。
如上图所示,编程器已经成功读取了芯片的信息,读取并校验完成后,会自动弹出保存的对话框,将提取的固件内容保存成bin文件。
$ binwalk -Me W25Q32V@SOIC8_20231215_114110.BIN
$ ./firmwalker.sh ~/Desktop/firmware/_W25Q32V@SOIC8_20231215_114110.BIN.extracted ~/Desktop/firmware/firmwalker_master.txt
$ ./fap.py -q qemu-builds/2.5.0/ ~/Downloads/W25Q32V@SOIC8_20231215_114110.BIN
一开始有些钻牛角尖了,想着怎么改良一下上面的芯片夹,把针弄长一点,让其不再受限于电路板上其它元器件的位置,可是怎么折腾都不理想。偶然之间读到一篇文章中有类似测试钩的工具,貌似可行,只要钩子足够小,就可以连接SOP8的引脚。直接上淘宝搜索一下,发现了有更加牛逼的神器,真的是只有我们想不到的,没有淘宝上买不到的。直接上图。
如上图所示,这种神器叫“免拆芯片通用测试夹”或者叫“IC引脚夹”,塑料手柄上有个弹簧的小机关,一按的时候,会从透明塑料管子里面伸出来一个两脚的金属夹子,正好可以牢牢夹住SOP8的引脚。果断买了8个,商家还送了16跟公母头的杜邦线。到货后,冒着大雪弄回来一大早在实验室验证可用性。
上图是查到编程器上的样子,感觉像个八爪鱼,后面再看看怎么优化一下。下图是将CPE拆壳之后,接上测试夹的效果。
接下来将编程器接入计算机,尝试进行固件提取。
智能识别SmartID失败,貌似有的引脚没有接好,或者顺序错乱了,仔细检查一下,过着有两个引脚接反了(最后介绍引脚怎么接),调整好后,继续智能识别。
仍然异常,可能这个CPE的flash引脚有些问题,毕竟这个是别人报废的CPE。更换一个CPE继续测试,顺利读取固件信息,和工具连线都没有问题。
进行固件提取成功。
为了便于大家理解,特意花了下面的图,展示SOP8的flash引脚接法。