使用CH341a编程器提取固件
注意:本博客也将作为即将举行的Wild West Hackin’ Fest会议的一个实验内容。
在最近的一次任务中,我遇到了一个问题:我试图提取固件的SPI芯片是一个1.8v芯片。这本来不是问题,但Shikra和Bus Pirate都只支持3.3v芯片。我考虑创建一个分压器来降低电压,但在简单搜索后,我发现了带有1.8v适配器的CH341a。我决定订购它并选择次日达服务。在使用它成功从1.8v IC中提取固件,而无需将SPI芯片从电路板上移除后,我决定写一篇博客。本博客面向所有读者。对于已经使用其他工具提取过固件的中级或有经验的人来说,可能有些过于逐步,但我也想包括初学者,因为我们都是从某个地方开始的,对吧?
以下是我收到的CH341a套件的图片。我将在博客末尾附上我购买或参考的物品的链接。
CH341a非常容易设置。通常,我使用Linux变体操作系统进行任何测试。然而,根据以往经验,我知道AsProgrammer在Windows PC上运行更好。你只需要驱动程序和AsProgrammer软件,可以在以下链接找到。
- “CH341-Windows-SPI-I2C-Driver+SDK-library”和“CH341-Windows-Serial-Driver+SDK-library”目录在https://github.com/boseji/CH341-Store。
- AsProgrammer软件 – https://github.com/nofeletru/UsbAsp-flash/releases/
在下载软件并安装到我的Windows笔记本电脑上后,是时候选择一个目标了。我翻遍了我的“车库销售”电子产品收藏,找到了一个Netgear WNDR3700路由器,它正合适。打开外壳并对设备芯片进行侦察后,我找到了一个目标SPI芯片。以下是电路板上标识出的SPI芯片的图片。
与任何侦察一样,你会想找到更多信息。因此,我获取了MX25L6445E SPI芯片的数据手册,查看了引脚图,并确定了安装在WNDR3700电路板上的封装类型。
检查数据手册后,我注意到这个特定芯片的VCC为3.3v,电路板上的实际封装类型是16引脚芯片。由于这些信息,我们知道不需要使用1.8v适配器。但似乎我们可能在16引脚芯片封装上遇到问题(注意中间的8个引脚未使用)。CH341a只附带一个8引脚芯片夹和接头。我可以将电线焊接到MX25L6445E的功能引脚上,并将其连接到CH341a的零插入力(ZIF)插座,但由于我可以在未来的任务中使用16引脚芯片夹,我决定购买一个。
快速互联网搜索后,我选择了一个16引脚芯片夹,它已经焊接了接头,用于与CH341a的ZIF插座接口。我将在博客底部放置16引脚芯片夹的链接,以及CH341a编程器的链接。16引脚芯片夹附带的接头包括一个8到16引脚和一个16到16引脚接头。我还用万用表检查了8到16引脚接头,发现它有正确的走线,可以直接与16引脚MX25L6445E芯片和CH341a ZIF插座接口。以下是芯片夹和接头的图片。
连接很容易,因为所有东西都有引脚标记、丝印或某种指示器来参考引脚1。例如,芯片在引脚1的角落有一个凹口标记。芯片夹的一根电缆是红色的,表示引脚1,接口板上有丝印数字表示引脚。最后,CH341a也有丝印,指示24xxx或25xxx芯片类型的引脚1位置。以下是指示引脚和丝印标记的图片描述。
CH341a的丝印有25xx和24xx的指示器,右边有小半圆。这个半圆表示引脚1在半圆旁边,将是右上角。ZIF插座有16个引脚,因此分为两半,右侧用于24xx芯片,左侧用于25xx芯片。在这种情况下,我们将使用ZIF插座的左侧,因为我们的芯片是MX25L6445E芯片。
上图显示了芯片夹电缆连接到接头板,引脚1指示器对齐。
接下来,我们将芯片夹连接到芯片上,红色引脚1指示器与MX25L6445E芯片的引脚1指示器对齐,如下所示。
最后,我们将带有芯片夹电缆的接头安装到CH341a ZIF插座上,如下所示。
现在一切连接完毕,我们可以从MX25L6445E芯片中提取固件。我们将CH341a连接到Windows PC的USB端口,并打开AsProgrammer。首先,我们必须在硬件菜单中选择CH341a作为硬件设备。
重要提示:CH341a为电路板供电,因此你不需要将WNDR3700插入墙上的插座。如果你这样做,可能会损坏你的CH341a。
接下来,你需要选择你将使用的SPI芯片类型。从主菜单中选择IC,然后选择SPI,接着选择供应商和IC。在这种情况下,我们想要MACRONIX MX25L6445E芯片。
一旦芯片被选中,它将在AsProgrammer的顶部菜单屏幕中显示。“Size”、“Page”和“SPI commands”也会自动填充,因此你不应该需要调整它们。你还需要确认SPI单选按钮被选中。以下是AsProgrammer应如何设置的截图。
一切看起来都好后,你将点击带有绿色箭头的框来读取芯片的内容。完成后,你还可以用软盘图标保存它。
这个特定芯片读取内容花了1.5分钟,可以在读取MX25L6445E芯片内容后的以下截图中显示。
现在我们有了提取的固件,我们可以评估它是否有任何有趣的内容。在这种情况下,我使用了“strings”或“strings.exe”(你需要为Windows操作系统下载它)来搜索“password”和“SSID”,如下所示。
如你所见,这个特定路由器看起来在停用和出售之前已被重置,因为它有看起来像默认值的值。
CH341a最好的地方是,与其他硬件(如Bus Pirate和Shikra)相比,我发现我需要将SPI芯片从电路板上移除才能与之交互,因为其他电路会干扰目标SPI芯片。然而,使用CH341a,我只需将芯片夹放在芯片上,就可以提取固件,而无需担心通过脱焊和焊接到分线板来损坏组件。
如果你喜欢这篇博客文章并想亲自动手,请来参加我们的Wild West Hackin’ Fest会议之一。我将提供这个和许多其他实验供与会者使用。
以下是我在博客文章中购买的物品的链接。
- Amazon CH341a Pro with 1.8v add on: https://www.amazon.com/Organizer-EEPROM-CH341A-Adapter-Programmer/dp/B07V2M5MVH/ref=sr_1_1?keywords=ch341a&qid=1579295338&s=electronics&sr=1-1
- Amazon link for the 16 pin chip clip: https://www.amazon.com/WINGONEER-SOIC16-circuit-programming-adapter/dp/B01CYA9BTY/ref=pd_sbs_147_20?_encoding=UTF8&pd_rd_i=B01CYA9BTY&pd_rd_r=bcbc95e8-fcd8-4012-a17a-5e15d8a7da7b&pd_rd_w=4xhD3&pd_rd_wg=BUd6J&pf_rd_p=670e3530-913b-43e2-8005-da937e9a4fe8&pf_rd_r=AE4216TVMK66NZAYCY34&psc=1&refRID=AE4216TVMK66NZAYCY34