首页
社区
课程
招聘
[原创] Binwalk 分析 android boot.img
2019-5-29 13:51 5525

[原创] Binwalk 分析 android boot.img

2019-5-29 13:51
5525

Boot.img 作为系统镜像比较重要的部分,实际上组成也很复杂,至少包含ramdisk,linux kernel,正常的镜像中还DTS 编译出的DTB 等等信息。实际上我们源码编译生成的Boot.img 是经过压缩过后的镜像文件,而对我们至关重要的kernel 可以通过很多工具分解出来,但是同样分解出的kernel 也是被压缩之后的纯二进制文件,我们如果要想看到kernel 信息,需要进行解压缩处理。

Binwalk 是一种分析二进制十六进制数据的工具,工具异常强大,这里我只介绍如何用Binwalk 来分析并提取Boot.img 中的 Linux kernel。

用一个简单的例子来讲解这个功能,比如我们做售后项目,机器出现死机或者系统问题,我们通用的处理方法是先回读镜像,然后检查镜像有没有问题,或者需要知道系统的版本号,以便来寻找相应的符号表等等,但是这些操作的前提是需要知道系统的版本信息才能进行,而对于机器死机或者无法进系统而言,想查询系统版本号比较麻烦,我们当然可以通过查询system.img 来获知,这里我讲讲如何利用Boot.img 来得到想要的信息:

我们可以看下我们out 目录下生成的kernel 以及 obj/kernel/msm-4.9/arch/arm/boot/zImage-dtb 是一样的,这说明编译生成目录下的kernel 文件是已经打包压缩好的镜像,且包含的DTB:

diff kernel/zImage-dtb


其实boot.img 用分解工具分解成ramdisk 以及 kernel 的 工具分解出的kernel 和 如上两个也是一样的,这说明这种镜像实际上是已经压缩好的二进制文件,这种文件是没法查看内核信息以及符号文件和 编译时间的,所以我们要把这种镜像解包,然后利用,这里就可以用binwalk 去分析;

下面介绍下Binwalk 分析Boot.img 的方法:

1.安装Binwalk:

binwalk install


2.Binwalk 分析Boot.img:

binwalk 分析boot


3.通过打开Boot.log 来查看Binwalk 分析结果:

Binwalk 分析结果


如图所示可以看到boot.img 包含gzip 格式的头文件以及 kernel,可以直接截取kernel 部分

4.使用dd 命令截取 出kernel 部分:

截取出kernel 部分,由于是gzip 格式,这里直接改名为gzip


5.解压上述的kernel.gz ,便可以得到可以解压后的可查看的kernel 文件:

gzip -d kernel.gz =====>编辑kernel 就可以解压缩后的kernel 文件,我们可以查看我们想要知道的信息,比如编译时间:


解压出的kernel 文件包含了我们需要的信息


另外利用这个kernel 文件我们可以在不拿到vmlinux 的前提下分析dump 文件等等,都是十分有用的,因此通过这种方式解开boot.img,拿到我们需要的kernel 文件,也是一样很好的方式!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 106
活跃值: (739)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
rlyt 2019-5-29 16:54
2
0
你这个图片的地址有点牛逼啊,http://192.168.30.26:200 。。。
雪    币: 2375
活跃值: (433)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
petersonhz 2019-6-29 23:04
3
0
rlyt 你这个图片的地址有点牛逼啊,http://192.168.30.26:200 。。。
地址有啥牛鼻的
游客
登录 | 注册 方可回帖
返回