时时勤拂拭,勿使惹尘埃

TOC

Categories

IoT(九)热风枪拆焊&编程器提取固件


0x1 热风枪拆焊

分析IoT设备时,如果通过其他方式如官网下载、OTA更新等获取不到设备固件时,可以考虑利用编程器直接读取芯片固件。
对于引脚较少且间距较大的芯片,可以直接使用烧录夹连接芯片引脚,通过编程器进行在线读取固件:
然而由于目前PCB电路板大量使用密集引脚和BGA封装的芯片,烧录夹难以使用,故需采用拆焊芯片然后用编程器离线读取的方法,但该方式需要一定的锡焊基础。
拆焊芯片之前,需拆解设备外壳,然后移除芯片上的屏蔽罩。屏蔽罩通常焊在电路板上,可以风枪加热后取下,或者直接暴力拆除,但需小心避免损坏电路板;有少部分屏蔽罩由框架+盖子两层构成,可以直接撬开盖子:

移除屏蔽罩后即可看见裸露的PCB板和上面的芯片,通常较大两个即CPU和flash闪存芯片,不确定时可以根据芯片上印刷的型号进行检索。如下图某手机PCB板,只需拆焊其中的三星flash闪存芯片:
拆焊时为避免烧坏PCB板上零器件,风枪温度不可过高(有铅锡熔点是183℃,拆除理想温度是185~190℃。无铅锡熔点是217℃拆除理想温度是235℃。实际操作更复杂),以300~350度为宜,选择3档及以上风量,将风枪口放置在芯片上方5CM的高度来回摆动让芯片所有引脚受热均匀,注意要给周围的元器件贴上高温胶带防止被风枪吹掉或损坏,吹稍长一点时间,直到用镊子轻轻取下:
拆焊下来的芯片通常如图沾有一些胶水和不规整的焊锡,故需清理干净以供编程器读取,如有必要还需对芯片触点植上锡球:

0x2 编程器提取固件

以Android手机等设备为例,常见的Flash闪存芯片使用的BGA封装有以下几种,其中白点为芯片触点,红点则为编程器座子触点。如上图拆焊下的芯片即为eMCP162/186,另外最近手机上较新的UFS芯片使用的BGA封装格式与eMMC153/169相同:

RT809H是性价比较高的入门款eMMC/eMCP通用编程器,编程器淘宝售价800左右,而eMMC/eMCP座子则比较贵通常400+。选择对应芯片的座子和框架,座子与编程器底部对齐,芯片方向与座子对齐:
在RT809H编程器软件里面,点击智能识别 SmartID,软件即可自动识别芯片类型,如下图自动识别为EMMC_AUTO,识别成功后,点击读取 Read即可提取设备固件。如果芯片与座子不匹配,软件会提示过流保护!等信息:

若芯片方向不对,或芯片触点锡球大小不一等导致的编程器与芯片接触不良,软件会提示座子引脚接触不良:

转接座与芯片匹配,点击读取 Read即可弹出保存,保存的文件如下,其中EMMC_AUTO_5514.BIN即为用户数据/data/分区,由于本次读取的芯片有一定的损伤(经验太少,导致芯片触点刮花了一部分),所以导致数据读取出现错误:
提取出来的用户数据文件即便是有错误的EMMC_AUTO_5514.BIN,依然可以通过binwalk -eM EMMC_AUTO_5514.BIN进行递归提取其中内容,结果如下,其中部分保留了完整的文件名和文件路径,部分则是以偏移地址命名的zip包(binwalk输出的信息有原始文件名和文件路径信息,故还需要对binwalk有进一步的了解才行):