FreeRTOS Reverse Engineering

百家 作者:Chamd5安全团队 2020-12-30 10:08:01

FreeRTOS简介


FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。


FreeRTOS编译

编译环境

· windows10 20H2

· keil V5.33.0.0


从FreeRTOS下载地址下载官方源代码。


解压下载的文件,获得的目录如下


这里我们重点关注的是FreeRTOS,这里面包含FreeRTOS的内核代码以及我们要进行测试的代码。


这里我们选择STM32F103系列的代码进行编译,使用keil打开这个系列的项目代码


通过keil我们可以看到整个项目涉及的代码。

因为我们提取的固件普遍为BIN文件,所以我们得在keil中设置,最后编译生成BIN文件。


在After Build/Rebuild选项中的Run#1处添加如下代码:

D:\keilv5_core\ARM\ARMCC\bin\fromelf.exe  --bin -o .\bin\RTOSDemo.bin .\RTOSDemo.axf



这里fromelf.exe是最后格式化为BIN的应用程序,-o是编译生成的BIN文件存放到当前目录下的bin目录中,bin目录没有会自动创建,RTOSDemo.axf文件是keil编译生成的文件。

编译成功,我们可以获得RTOSDemo.bin固件文件,这里包含我们全部的应用代码!



FreeRTOS逆向

逆向分析环境:

· IDA 7.0

· binwalk


这里我们使用IDA进行逆向分析已经编译成功的BIN固件,首先这是BIN固件的架构ARM Little-endian。



在processor type里选择ARM little endian,打开processor options。在截图上,你能看到适用于我这个环境的设置。我的Cortex-M3基于ARMv7-M架构,所以才这样设置。


接下来当我们载入IDA时,会让我们输入ROM,RAM等基地址,这里我们使用两种方式去添加。


方式一

由于整个固件是我们自己编译的,这里我们可以在Keil中查看ROM,RAM等载入地址信息。


这里我们可以看到RAM和ROM对应的起始地址以及大小,我们将对应的数据添加到IDA进行分析时的Disassembly memory organization对应的ROM和RAM中,数据添加情况如下:


我们逐步确定,IDA自动加载,最终得到如下分析结果


但是由于IDA没有自动去解析BIN固件,需要我们自己进行解析。首先我们设置IDA支持ARM Thumb指令,可以使用快捷键Alt+G设置指令分析格式



可以看到已经变成CODE16的汇编代码了。这里我们按C键进行自动分析,分析完的代码如下:

这里我们可以看出已经有functions和反汇编代码了。这种方式仅仅对我们分析自己编译的固件能够起到帮助作用。


方式二

接下来,让我们看一下方式二,这种方式经常应用于逆向工程。

现在假设固件是我们从设备中提取的固件,目前不知道任何有用的信息。

根据常规方式我们使用binwalk进行简单的扫描分析,得到如下结果:


在这里我们得不到任何信息。但是我们知道这是个RTOS,所以我们直接上IDA,暴力简单!

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接