-
-
[原创] Binwalk 分析 android boot.img
-
发表于:
2019-5-29 13:51
6034
-
[原创] Binwalk 分析 android boot.img
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 文件,也是一样很好的方式!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!