IDA Pro > IDA Pro教程 > 使用技巧 > IOT基础设备及固件提取分析

IOT基础设备及固件提取分析

发布时间:2022-10-09 17: 50: 17

物联网(Internet of Things,简称IOT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监控、连接、互动的物体或过程,采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息,通过各类可能的网络接入,实现物与物、物与人的泛在连接,实现对物品和过程的智能化感知、识别和管理。

物联网是一个基于互联网、传统电信网等的信息承载体,它让所有能够被独立寻址的普通物理对象形成互联互通的网络,是工业4.0产业升级中非常重要的部分。

 

本文通过对IOT中各类基础设备进行介绍,并选择其中某一个利用IDA进行固件提前分析工作,案例收集了非常详细的步骤,详细对研究物联网的朋友会有所帮助。

 

一、基础装备介绍

螺丝刀套装

推荐图中的47件套装,适配类型多,可拆多种类型的硬件设备。

 

万用表

主要用来分析电路结构,识别调试接口。使用较多的功能是连通性测试,一般用来找GND引脚。GND找到之后就可调到电压档,识别出VCC引脚。

 

芯片测试夹

使用测试夹直接夹在芯片上进行测试,如提取固件、动态调试、监听通信内容等。

 

串口工具CMSIS-DAP

CMSIS DAP是ARM官方推出的开源仿真器,支持所有的Cortex-A/R/M器件,支持JTAG/SWD接口。

 

爱修编程器

爱修RT809H是维修界应用较广的一款编程器,支持读取众多型号的SPI/NOR/NAND/EMMC Flash,用于提取和烧录固件。

 

二、固件提取及分析

当我们拿到一台IOT固件设备,就不可避免的要对硬件进行侵入式的操作,比如取下flash芯片进行固件的读取,或者flash集成在MCU芯片中时需要进行剖片处理,或者利用其他漏洞来获取固件。

 

那么最终能够拿到固件,其中的过程是怎么样的呢?以剖片完成后为例,简单来介绍:

 

拆解介绍:

以意法半导体(ST)公司出品的一款芯片为例做拆解介绍。为什么需要对此芯片进行拆解,因为剖片处理后需要更换新的芯片做测试,会把剖片后的程序进行提取,在新的芯片上进行烧录,测试判断是否抛片成功,型号为STM32F103RC,通过搜索引擎就可以找到网上公开的芯片手册。

 

拆解方法分为两种,一种是直接使用焊络铁进行锡的去除,另一种就是使用热风枪,常规的都是使用热风枪,对着芯片周围进行加热,大概来回加热两分钟,等锡融掉后使用镊子夹起芯片。

 

注意,热风枪针对普通板时,温度不宜过高,过高会导致芯片底盘脱落或者导致元器件损坏,300多度左右差不多,针对比较厚的板子,散热较快的,那么就可以调到400多度。

 

通过查看芯片手册,就会发现这块板子上的flash是集成在MCU中,另外要说明的是固件存放的位置一般分为两种,一种是集成在MCU中,另外一种是单独放在一块芯片上。

 

这块芯片的flash就是存在MCU中,如下图所示:

1、热风枪温度调节,大概320度左右

2、使用热风枪拆解芯片,沿着引脚周围吹

3、换芯片时,要注意第一引脚要与PCB板上底盘一一对应,一般来说PCB制作时,会对第一引脚的位置进行标记,同理,芯片厂家也会对其进行标记。使用镊子夹起对准底盘并固定住,另外一只手拿起焊络铁进行上锡操作。

4、一般比较常用的是使用脱焊方法进行焊接。络铁头也分为不同的类型,尖形、扁形、马蹄形和刀型,这里使用的是刀型进行脱焊。

5、络铁头上沾着锡,也在焊盘上稍微镀一些锡之后,顺着引脚的方向向外侧拉动烙铁,带出一些锡。将芯片合适的覆盖在焊盘上,对齐。用烙铁加热引脚,使得芯片与焊盘结合。

用烙铁滑动每个引脚。对于引脚上多余的锡,可以使用助焊剂,助焊剂的密度是小于锡的密度的,它能均匀地在被焊金属表面铺展,呈薄膜状覆盖在锡和被焊金属表面,有效地隔绝空气,促进焊料对母材的润湿(注意,助焊剂会使用的很频繁),上锡的步骤是繁琐的,如果检查出虚焊或者引脚间有粘连,还得返工,所以焊接时得细心。

沿着引脚从上至下进行焊接,其他三个方向为同样的操作。

6、最后焊接好之后,使用放大镜查看是否存在虚焊或引脚之间是否存在黏连。这里经费有限,无法用显微镜查看,但是也可以通过32倍放大镜查看,观察后没问题就可以通过串口进行调试了。

 

编程器的使用

之前有提到flash存放的位置有两种,编程器就是针对单独存放固件的芯片,某一款存在外设flash的架构图:

可以看到内部并没有flash部分,只有内存、内存数据、和一个boot启动程序。下面使用了连接外部Flash的QSPI协议。

 

编程器提取flash步骤:

1、将被烧写的芯片按照正确的方向插入烧写卡座(芯片缺口对卡座的扳手)。

2、将配套的电缆分别插入计算机的串口与编程器的通信口。

3、打开编程器的电源(电源为12V),此时中间的电源发光管指示灯亮,表示电源正常。

4、运行编程器软件,这时程序会自动监测通信端口和芯片的类型,直接读取bin文件

串口的使用

观察PCB板可以看到存在留出的接口。结合芯片手册可用万用表测出各个孔的作用:

检测后得出,分别是电源、接地、输入输出口、时钟,最后则是reset复位引脚:

与CMSIS-DAP对应引脚相连接配合keil5进行动态调试:

打开keil5 IDE新建一个工程,选择对应的芯片型号,选择目标选项:

选择output,在选择需要调试的目录和文件名(后缀也得加上):

选择debug调试→CMSIS-DAP Debugger:

最后ctrl+F5运行:

固件分析流程

首先是固件加载基址,通过搜索STM32F103RC芯片手册,找到程序RAM区域和ROM区域地址,配合IDA静态分析工具分析。芯片手册上的基址及大小:

打开IDA处理器选择ARM小端:

填充加载基址及大小:

因为是使用的是ARM7 Cortex-M3处理器架构,那么指令集就存在32位ARM指令集和16位Thumb指令集。需要在IDA中ROM开始的位置,快捷键alt+G更改设置,CODE32更改为CODE16,设置T值为0x1,更改前:

更改后:

选择Edit→select all

选中之后右键点击分析选择区域:

IDA成功解析出所有函数:

复位向量

只要是基于STM32系列的芯片,就会存在中断向量表,在中断向量表中,Reset可以定位程序是从哪里开始执行的,代码从偏移为4的位置开始查看汇编。

一开始IDA只识别为数据:

把未识别的这一块数据按U键变成二进制,在地址为0x8000004的位置按一下Q就显示出一个地址,双击跳转过去:

通过一系列的B、BX,BL汇编指令跳转最终找到Reset函数入口位置:

SVD文件

讲SVD文件之前,需要介绍一下CMSIS(微控制器软件接口标准的缩写),CMSIS可实现与处理器和外设之间的一致且简单的软件接口,从而简化软件的重用,缩短微控制器开发人员新手的学习过程。

 

CMSIS包含以下组件:

CMSIS-CORE:提供与Cortex-M0、Cortex-M3、Cortex-M4、SC000和SC300处理器与外围寄存器之间的接口

CMSIS-DSP:包含以定点(分数q7、q15、q31)和单精度浮点(32位)实现的60多种函数的DSP库

CMSIS-RTOS API:用于线程控制、资源和时间管理的实时操作系统的标准化编程接口

CMSIS-SVD:包含完整微控制器系统(包括外设)的程序员视图的系统视图描述XML文件

 

SVD文件通常与设备参考手册中芯片供应商提供的信息相匹配。SVD相当于把传统的芯片手册(DATA SHEET)给“数字化”了,手册是给人看的,而SVD采用XML文档结构化的方式,是给机器、开发环境、MDK/IAR等软件“看”的,SVD文件中定义了某个芯片的非常详细的信息,包含了哪些片内外设,每一个外设的硬件寄存器,每一个寄存器中每一个数据位的值,以及详细的说明信息。

 

简而言之,SVD文件在IDA中加载之后可以识别特殊寄存器,是定位关键代码位置方法之一。

 

SVD文件加载流程

Keil5 IDE自带CMSIS文件,就可以直接搜索到具体想要的型号,这里在默认安装路径下找到相应的位置:

选择IDA插件→SVD文件管理或者使用快捷键也可以:

选择完成之后就可以识别特殊寄存器了:

快捷键shift+F7调出窗口查看所有识别出来的特殊寄存器:

符号签名

到这还不能很好的分析程序,一些库函数如果没有符号的也看不出是否是库函数。还是需要制作签名。IDA通过sig文件中的特征码匹配识别函数。

在这里使用来自看雪论坛的群友制作的工具,下面介绍如何使用签名。

sig制作过程:

1、利用FLAIR解析器为静态库创建一个模式文件(.pat)

2、运行sigmake.exe处理创建的模式文件,生成一个签名文件(.sig)

 

使用方法:https://bbs.pediy.com/thread-263254.htm

在IDA中的使用:

1、将制作好的签名放在IDA的IDA 7.5\sig\arm目录下

2、快捷键SHIFT+F5加签名,选择应用新签名,就可以添加相应的sig文件了

3、快捷键SHIFT+F5加签名

关键函数

此固件设备是通过CAN协议进行通信的,一开始使用万用表测CAN线通路,未测通,拆开OBD接口,发现内有乾坤。查看此PCB板上的芯片手册6、7pin分别连接CAN高和CAN低的。

4pin分别是传输和接收:

Mini-USB引脚定义:

那么此电路的作用就是让CAN协议转化为USB协议进行通信。通过交叉引用就能知道那些地方调用了特殊寄存器,比如GPIOA引脚。

应重点关注GPIOA_IDR,是作为接收数据的寄存器,接收到的CAN数据会经过转换,跑到此寄存器中,可以看到,先既有读也有引用,到引用的位置进行查看:

结合汇编查看伪代码,可以看到输入的数据判断第三位是否为1,为1则执行0x8019DA4的函数,否则执行其他函数,顺便说一句,输入数据寄存器只有两个值也就是只识别高低电平,1和0

继续交叉引用,发现在上一层是一个一直为''真''的循环,那就更加确定是在接收CAN数据了。

继续向上追踪,猜测0x8007A7C为这个程序的核心函数:

三、总结

这就是完整分析固件的一系列流程,需要注意的是能成功提取固件,前提是不加密或已经解密后的固件。

 

本文转自【看雪论坛】,作者【APT_华生】

展开阅读全文

标签:

读者也访问过这里:
邀请您进入交流群 点击扫码
400-8765-888 kefu@makeding.com

专业销售为您服务

欢迎添加好友,了解更多IDA优惠信息,领逆向工程学习资料礼包1份!
热门文章
exe反编译工具哪个好?反编译能力强的工具盘点
随着软件技术的发展,exe(可执行文件)已经成为了电脑、手机等多个平台上的主要软件运行格式,而对于exe文件的反编译也成为了逆向工程中不可缺少的一个步骤。本文将介绍一些常用的exe反编译工具,并评价其优缺点,帮助读者选择合适的工具。
2023-04-12
idapro怎么改为中文
IDA Pro是一款功能强大的反汇编和反编译工具,广泛应用于逆向工程和软件开发领域。在使用IDA Pro时,如果我们不习惯英文界面,可以将其改为中文界面。本文将介绍IDA Pro怎么改为中文界面。IDA Pro界面改成中文主要有两种方法,下面是详细介绍。
2023-04-19
c++反编译工具有哪些
反编译C++代码的工具一般是针对可执行文件和库文件的反汇编和逆向分析工具。本文将给大家介绍c++反编译工具有哪些的内容。市面说的c++反编译工具有很多,下面介绍几款使用认识较多的软件。
2023-04-23
ida如何转伪代码 ida伪代码怎么看
IDA Pro是一款常用的反汇编和反编译工具,可以帮助我们分析二进制文件的实现细节和执行过程,以便更好地理解程序的执行过程和逻辑。在进行逆向工程的过程中,我们经常需要将反汇编结果转换为伪代码,以便更好地进行分析和修改。本文将介绍如何使用IDA Pro转换为伪代码,并简单讲解ida伪代码怎么看。
2023-04-14
IDA反汇编流程视图的常用基本操作设置
IDA中反汇编窗口中有两种不同的形式,分别是列表模式和图形模式,IDA默认打开是图形模式,就是反汇编流程视图,可以用来分析程序函数的具体运行情况。
2021-06-15
IDA的初始使用说明和界面简介
IDA能帮助我们分析恶意软件、分析系统漏洞、验证编译器的性能,其支持在Mac系统、Windows系统、Linux系统中使用,是一款非常优秀的反编译软件。
2021-03-16
最新文章
pyc反编译文件怎么做?pyc反编译有什么工具?
Python编程语言以其高效的性能和广泛的应用领域占据了软件开发的重要地位。随之而来的`.pyc`文件作为Python代码编译的产物,对于提高程序运行效率有着不可忽视的作用。但在某些场合下,我们需要将这些编译过的文件还原为源代码形式,以便于代码审查或学习交流。因此,本文将深入探讨`.pyc`文件的反编译过程、介绍有效的反编译工具,并指导如何通过IDA快速掌握反编译技巧,以资助力开发者和逆向工程师。
2024-04-09
易语言反编译是什么?易语言反编译怎么做用什么工具?
软件工程的一个挑战性任务是如何解读和分析那些没有源代码的程序。对于易语言编写的软件,这一挑战尤为突出。反编译技术,作为桥接编译代码与源代码的关键技术,能够揭开编译后程序的神秘面纱。本文将聚焦于易语言反编译的基础知识、实施方法及所需的工具,并详细探讨IDA工具在逆向工程任务中的核心作用,为广大技术从业者提供参考和指导。
2024-04-09
IDA8.4新版发布:界面大更新!反编译精度提升!附下载
逆向工程领域的佼佼者,IDA Pro,再次以其最新版本8.4引领技术潮流。本次更新不仅延续了IDA Pro一贯的专业性能,更在用户体验和功能上带来了一系列创新和改进。我们诚邀广大用户前往IDA中文网站(https://www.idapro.net.cn/)下载并体验IDA 8.4的最新功能。
2024-04-01
ilspy反编译是什么?IDAPro能代替ilspy反编译吗?
在当今快速发展的软件产业中,反编译技术已成为软件开发、维护、安全分析和学术研究中不可或缺的一部分。反编译技术不仅能够帮助开发者理解现有软件的工作原理,还能够在软件安全领域发挥重要作用,帮助发现和修复潜在的安全漏洞。在这一领域,ilspy和IDA Pro以其卓越的性能和广泛的应用,成为了技术专家们推崇的工具。
2024-04-01
逆向工程师是做什么的?逆向工程师必备工具有哪些?
在信息技术日新月异的今天,逆向工程师扮演着至关重要的角色。他们通过分析软件和系统的外部行为来推断其内部结构、功能与工作原理,从而在软件安全、病毒分析、兼容性测试等多个领域发挥着不可或缺的作用。本文将深入探讨逆向工程师的职责范围、必备的工具集,以及IDA在逆向工程中的独特角色,旨在为有志于此领域的专业人士提供一份全面而深入的指南。
2024-04-01
ida怎么查看变量的值?ida怎么看函数流程图?
在软件开发和逆向工程行业,ida(Interactive DisAssembler)作为一种强悍的多处理器调试器和反汇编器,它遭受安全研究人员及反向工程师的欢迎。它提供了很多作用,包括但不限于变量值查看、函数流程表分析等,大大提升了软件分析的效率和深层。本文介绍了ida怎么查看变量的值,ida怎么看函数流程图的内容,为许多反向工程师和软件开发人员给予有用的指南。
2024-03-19

通过微信咨询我们

欢迎添加好友,了解更多IDA优惠信息,领取逆向工程学习资料礼包1份!

读者也喜欢这些内容: