-
-
[原创]固件安全之加载地址分析
-
发表于:
2021-5-21 16:37
26252
-
在固件分析中,我们经常需要定位固件的加载地址,尤其是Vxworks或者是Linux kernel加载到内存的地址,来方便逆向工具例如IDA PRO进行正确的反汇编以及字符串引用。在下面的部分,本人将结合几个实例,来介绍我们如何寻找正确的固件加载地址。
在处理器芯片的数据手册中,一般都会描述该处理器的内存布局,包含各种中断表地址,也有加载flash数据的内存地址,这个地址就是我们需要找的固件加载地址,如下所示,0x8000000开始存放着flash数据,分析时候我们只需要设置这个地址即可。
通过UART一般可以获取固件启动的敏感信息,其中可能会包含加载地址,如下所示,然而这个地址虽然是内核固件的加载地址,但是内核是压缩的,内核会解压到另一块内存地址,也就是说还需要找到真正的固件加载地址。
为了获取Linux Kernel解压后的数据,可以使用binwalk -e kernel.bin解出原始的内核镜像。用IDA载入进行分析,注意高亮的地方已经标记出来,0xC0008080,很容易猜到真正的内核固件的加载地址为0xC0008000
这个方法在网上已经很多人已经分享了,主要是利用switch 跳转表,来确定固件的加载地址,这种方法在分析ARM架构的Vxworks使用的较多。
魔数,即magic number,主要思想是先利用一些特征数,定位到相关函数,然后从相关函数找字符串,通过对字符串地址的修正值来确定固件的加载地址,本质还是需要利用字符串的引用地址。
如下所示,这次的目标是一个uboot,我们要寻找uboot的加载地址:
通过分析源码可以知道IH_MAGIC常量值被多处引用:
选中一个引用该常量的函数:
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)