原创 | 固件安全之加载地址分析

admin 2021年9月30日23:28:28评论155 views字数 1750阅读5分50秒阅读模式

作者 | 绿盟科技格物实验室 陈杰

前言:在固件分析中,经常需要定位固件的加载地址,尤其是Vxworks或者是Linux kernel加载到内存的地址,从而方便逆向工具例如IDA PRO进行正确的反汇编以及字符串引用。在下面的部分,将结合几个实例,来介绍如何寻找正确的固件加载地址。

数据手册

在处理器芯片的数据手册中,一般都会描述该处理器的内存布局,包含各种中断表地址,也有加载flash数据的内存地址,这个地址就是需要找的固件加载地址,如下所示,0x8000000开始存放着flash数据,分析时候只需要设置这个地址即可。 

原创 | 固件安全之加载地址分析

然而实际情况往往复杂得多,有些固件并不是连续的,例如linux,uboot会把linux内核加载到内存中执行,而由于linux内核是压缩的,开始是一段解压代码,解压后得内核代码又放在哪呢?这些都是需要我们去分析的。

串口信息

通过UART一般可以获取固件启动的敏感信息,其中可能会包含加载地址,如下所示,然而这个地址虽然是内核固件的加载地址,但是内核是压缩的,内核会解压到另一块内存地址,也就是说还需要找到真正的固件加载地址。

原创 | 固件安全之加载地址分析

固件常量

为了获取Linux Kernel解压后的数据,可以使用binwalk -e kernel.bin解出原始的内核镜像。用IDA载入进行分析,注意高亮的地方已经标记出来,0xC0008080,很容易猜到真正的内核固件的加载地址为0xC0008000

原创 | 固件安全之加载地址分析

Switch定位法

这个方法在网上已经很多人已经分享了,主要是利用switch 跳转表,来确定固件的加载地址,这种方法在分析ARM架构的Vxworks使用的较多。

1. 搜索“switch”:

原创 | 固件安全之加载地址分析

2. 找到一个合适的跳转表:

原创 | 固件安全之加载地址分析

加载地址即为:(0x20018140-0x8110)&0xfffff000=0x20010000(加载地址一般是0x1000对齐)。

魔数定位法

魔数,即magic number,主要思想是先利用一些特征数,定位到相关函数,然后从相关函数找字符串,通过对字符串地址的修正值来确定固件的加载地址,本质还是需要利用字符串的引用地址。

如下所示,这次的目标是一个uboot,我们要寻找uboot的加载地址: 

原创 | 固件安全之加载地址分析

寻找特征

通过分析源码可以知道IH_MAGIC常量值被多处引用:

原创 | 固件安全之加载地址分析

选中一个引用该常量的函数:

原创 | 固件安全之加载地址分析原创 | 固件安全之加载地址分析
计算地址

核心思想是通过字符串的引用地址计算出差值来确定加载地址,使用常量值0x27051956在固件中找到上述函数:

原创 | 固件安全之加载地址分析

发现好几处引用的地方,数量不多,直接一个个去看,看哪一个比较像该函数。如果遇到IDA识别不出来的地方,应该按“C”转化为汇编代码。

原创 | 固件安全之加载地址分析

最后找到这个函数,通过源码可知,其中0xA082012C就是字符串"   Bad Magic Numbern"引用值。

原创 | 固件安全之加载地址分析

在字符串窗口搜索字符串  "   Bad Magic Number",得到文件偏移地址为0x2F12C 。

原创 | 固件安全之加载地址分析

固件加载地址为:0xA082012C-0x2F12C=0xA07F1000。

指令定位法

指令定位最后还是利用字符串,但是寻找对应字符串不是用的魔数,而是指令,总所周知,r0作为arm传参的第一个参数,在printf这些函数中,第一个字符串往往是常量区字符串,那么我们就使用这一特征定位到对应的字符串和他的地址,先搜索符合条件的指令:

原创 | 固件安全之加载地址分析

搜索的结果如下,我们随便找一个” LDR             R0, =0x23E1B571”,我们暂且认为0x23E1B571存有一个字符串。

原创 | 固件安全之加载地址分析

直接在IDA字符串搜索地址后面3位值:517

原创 | 固件安全之加载地址分析加载地址很明显了: 0x23E1B571-0x1B571=0x23E00000,总的来说,该方法相对较快,1分钟左右就能出结果,不只arm,mips,ppc都可以用该方法求固件的加载地址。

rbasefind

rbasefind是一款用rust开发的非常高效的固件加载地址爆破工具,使用起来非常简单,源码地址:https://github.com/sgayou/rbasefind

原创 | 固件安全之加载地址分析

总结

本文简单介绍通过各种方法和技巧获取固件加载地址,包括有一些非常快捷高效的手动方法,还可以使用工具自动化进行暴力破解,希望给大家带来一些技术上的启发。



转载请注明来源:网络安全应急技术国家工程实验室

原创 | 固件安全之加载地址分析

本文始发于微信公众号(网络安全应急技术国家工程实验室):原创 | 固件安全之加载地址分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年9月30日23:28:28
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   原创 | 固件安全之加载地址分析http://cn-sec.com/archives/376741.html

发表评论

匿名网友 填写信息