固件:不可顾名思义,不是硬件而是软件,固化在EROM(可擦写只读存储器)或EEPROM(电可擦可编程只读存储器)中的程序。是设备内部保存的设备“驱动程序”,通过固件,操作系统才能按照标准的设备驱动实现特定机器的运行动作。
任何数码设备都有固件:手机、数码相机、MP34、电子书、交换机、PSP、XBox、U盘、电脑BIOS。
获取固件方式一般有四种:厂商网站下载/硬件接入Flash中提取(固件存储芯片)/抓包分析URL/串口调试。
固件分析作为智能硬件安全基本功,步骤一般为:定位固件位置/编程器读取成二进制 /下载bin文件/固件分析软件解压/导入IDA分析流程和逻辑。
固件提取:
(1)串口调试
目前较为常用的串口有9针串口(DB9)和25针串口(DB25),实验用电路板是华硕的路由器电路板,型号为WL-500GPV2,电路板在制作时留了两种串口形式,其中上面的为比较常见的9孔串口,下面为常见的4孔串口。
万用表检测常用引脚:
VCC引脚:常被做成方形
GND引脚通:常存在多条走线连接到周围的地线
GND引脚的检测比较简单,将万能电表调到电阻测量的最小档,电阻为零或者接近零则该针脚为GND针脚;
确定VCC针脚可以帮助更好的确定TXD和RXD,将万能表调制电压档的20伏特档位,然后测量该针脚的电压,如果电压基本保持在3.3V或者5V,则可确定该接口为VCC针脚;
TXD针脚在串行端口被激活之后会不断地向外发送数据,在测试VCC引脚同样的档位上,测量该引脚,如果读取到一个不断变化的电压值,并且在有数据发送时电压降为0,无数据发送时电压约等于3.3V,则该针脚为TXD针脚。
RXD针脚的探测较为困难,在可以判断其他三个针脚的情况下可以使用排除法进行确定。
串口与计算机的连接工具:
串口作为一种专用接口,需要使用一定的装置对其进行转换才能和计算机进行通讯,这种装置被称作串口转换板也被称作TTL转接板,常见的转接板有转USB板以及转MiniUSB板:FT232RL、CH340、Bus Pirate、Shikra、杜邦线等。
PS:常见名词解释
UART通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分。将资料由串行通信与并行通信间作传输转换,作为并行输入成为串行输出的芯片,通常集成于其他通讯接口的连结上。
JTAG (Joint Test Action Group;联合测试工作组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
具有JTAG口的芯片都有如下JTAG引脚定义:
TCK——测试时钟输入;
TDI——测试数据输入,数据通过TDI输入JTAG口;
TDO——测试数据输出,数据通过TDO从JTAG口输出;
TMS——测试模式选择,TMS用来设置JTAG口处于某种特定的测试模式。
可选引脚TRST——测试复位,输入引脚,低电平有效。
含有JTAG口的芯片种类较多,如CPU、DSP、CPLD等。
Bootloader是指在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
EEPROM (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。一般用在即插即用。
Kernel 操作系统的内核
Root Filesystem 操作系统的根目录,如squashfs、rootfs等
NVRAM 作用是存储路由器中的配置文件,路由器在启动之后慧聪NVRAM中读取配置文件,对路由器进行设置,用户修改路由器设置之后,路由器会将修改之后的参数写到NVRAM之中。
CFE 引导内核启动的程序
编程器固件一般指直接从硬件flash芯片中直接读取出来的固件,此固件中包含Bootloader和EEPROM两部分。