感谢这是一个广泛的问题,但尽管谷歌搜索了好几天,我还没有找到关于如何从硬件“捕获”或复制未知固件的一般原则的直接解释。
我收集到,一旦你有了它,你就可以开始使用各种工具来分析它,但我首先想了解的是如何获得它。
据我了解,您需要通过 JTAG 或 UART 连接连接到它,之后我有点迷茫。
感谢这是一个广泛的问题,但尽管谷歌搜索了好几天,我还没有找到关于如何从硬件“捕获”或复制未知固件的一般原则的直接解释。
我收集到,一旦你有了它,你就可以开始使用各种工具来分析它,但我首先想了解的是如何获得它。
据我了解,您需要通过 JTAG 或 UART 连接连接到它,之后我有点迷茫。
您可能会怀疑,这在很大程度上取决于硬件。一般来说,您是对的,通常可以使用 JTAG 和/或 UART 来获取固件的副本(当然,从供应商处下载固件更新通常是最简单的方法,但我假设这不是您想要的意思是)。
JTAG 实现通常允许您读/写内存,而闪存芯片通常“映射”到某个预定义地址的内存中(找到该地址通常需要谷歌搜索、经验和反复试验);因此,您可以使用UrJTAG和OpenOCD等工具来读取 flash 的内容。
UART 只是一个串口,所以它提供什么接口或选项(如果有的话)完全取决于创建系统的开发人员;大多数引导加载程序(例如,U-Boot)确实允许您读/写闪存/内存,并将 ASCII 十六进制转储到您的终端窗口。然后您需要解析 hexdump 并将其转换为实际的二进制值。同样,YMMV 可能无法通过 UART 转储内存或闪存。
其他设备可能具有提供类似功能的其他机制;例如,Microchip 的 PIC 微控制器使用ICSP(电路内串行编程)接口来读取、写入和调试固件。此类接口通常是专有的,可能会也可能不会被记录(Microchip 是众所周知的)。
供应商可能会采取措施保护或禁用 JTAG、UART 和 ICSP 等调试接口,但通常您可以直接转储闪存芯片(这通常比 JTAG/UART 快,但可能需要一些去/焊)。对于诸如内置闪存芯片的微控制器之类的设备(即闪存芯片不会暴露给您),您可能需要采用更先进的技术来破解此类复制保护。
就个人而言,由于我不怎么处理基于微控制器的系统,直接转储闪存芯片通常是我从设备获取固件副本的首选。
提取硬件芯片的内容被称为“ snarf ”ing。(该词可能对您的 Google 搜索有所帮助。)
要获取芯片的内容,您需要一个 ROM 读取器/编程器,例如来自http://www.needhams.com/programmers.htm的设备之一