智能设备逆向工程之外部Flash读取与分析篇-唐朝试验室-feiworkscom.PDF

智能设备逆向工程之外部Flash读取与分析篇-唐朝试验室-feiworkscom.PDF

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
智能设备逆向工程之外部Flash读取与分析篇-唐朝试验室-feiworkscom

原原文文地地址址:/mobile/9797 author: rayxcp 0x00 前前言言 目前智能家居设备的种类很多,本文内容以某智能豆浆机为例完成 其的固件提取和分析。 究其分析内部逻辑的原因可能会有很多种,和安全相关的原因主要有: 1. 了解设备内部运行逻辑,逆向后有条件更改原有逻辑 2. 通过逆向后的代码找到可利用的漏洞或原有隐藏功能 0x01 读读取取Flash 首先,准备好螺丝刀,镊子等工具。把设备拆解。取出设备主控板。如下图: 正面,其中红圈所在的黑色小板是Wi-Fi模块,上面的8脚Flash的芯片已通过吹焊台的热风机取下。 反面图 当目标为取得设备的运行逻辑时,首先需要找到运行逻辑存放的位置。以STM32 MCU的开发板为例,会有多种boot模式,其中一种boot模 式是从MCU内部的Flash中启动,也就是说系统启动初期的逻辑在这种模式下是从MCU内部Flash读出的。但是这部分Flash的大小受限,通常 容量情况为32KB ~ 512KB。那么其他的逻辑会通过SPI或者总线接口连接的外部Flash或SD卡等存储设备存放。针 这一款设备,除了MCU 内部Flash外,板上还预制了一颗容量为2MB的外部Flash。 本篇关注外部Flash上的逻辑获取,通过SWD方式读取MCU内部Flash和调试等方法会在后续章节介绍。智能家居设备上一般的外部Flash为 SOP8宽体芯片。见下图插座上的8脚芯片: 图中红圈的芯片就是从设备Wi-Fi模块上取下的Flash Flash厂商品牌常见的有: inbond,gigadevice等。 以gigadevice GD25Q16名称为例 GD为厂商名 25为芯片系列号 16为MBit容量 也就2MB字节大小的Flash Flash的内容可以通过编程器读取,首先在PC端安装相关的驱动和软件(在购买时会由商家提供)后,就可以读取Flash内容了。 编程器的选 择上建议一定要带上插座,这样可以减少芯片的吹焊次数。此外还有芯片夹,可以夹住板上的Flash芯片,直接尝试读取,免于取下的过 程,但是实测成功率不是很理想。 一般连接PC后,编程器配套的软件会自动识别出芯片类型和大小等信息。如果没有可手工尝试选择近似的型号 (根据芯片名称)。 点击读取,待读取结束后,可以将读出的内容保存为bin文件。至此就获取到了Wi-Fi模块上Flash中的二进制内容。 0x02 逆逆向向分分析析 在得到bin文件后就可以开始逆向分析了。 从设备MAC地址以及一些bin文件中特征字串和Wi-Fi模块的外观形态判断,该设备Wi-Fi模块使用的是上海汉枫公司 (之后简称HF )提供的 HF-LPT100S- 10。该模块包含一枚HF 自研的MCU(HF-MC101,内置128KB SRAM)。而模块上的Flash大小2MB。 将bin文件放入IDA,在加载的第一步中设置CPU类型为ARM Little End (根据该款设备的CPU类型)。之后会出现内存选项,如下图。这里 可选设置RAM的起始位置和大小,这一步将方便之后设置RAM中的变量名,建议根据芯片实际情况进行设置。这里RAM是128KB,起始位 置是0 现在需要分析bin中包含的逻辑。在HF官网上提供了SDK的下载(基于Keil开发环境)。通过查看SDK包含的文档,得到如下针 ROM内容的 结构描述。 这时可以建立一个ida py脚本,将得到的信息添加其中,在IDA中标注出各个segment: 当然也可以直接按长度,提取出各个段,例如提取出bin文件前512KB的app_main内容 (见下面的附件)。 在进一步分析代码前可以先标记出基础库,例如标记出文件管理,内存操作等相关函数。一般有两种方式,第一种从文件自身的调试打印 信息或者符号表包含的信息反推出函数;第二是加载获取的FLIRT类信息到当前文件。 FLIRT是Fast Library Identification and Recognition Technology的缩写,可以在https:// ./products/ida/tech/flirt/index.shtml中找到相关的 描述。简单的说就是通过建立库函数中使用汇编指令串以及各类引用的特征值匹配到当前当目标文件,标注出已知的各种函数名。当然定 位函数,除了单纯指令串特征值外,诸如bindiff类插件也会通过函数内逻辑,和相互间调用关系来确定函数,这样的好处是提高库函数的命 中范围和提高准确度。类似技术运用在函数定位上可以参见下面的插件: /devttys0/ida/tree/mast

文档评论(0)

fengruiling + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档