Android内核之内核提取

本文介绍了Android设备的启动模式和boot、recovery分区,重点解析了boot.img的结构,包括zImage和ramdisk.img。zImage包含内核和引导程序,ramdisk.img则包含系统重要组件如init.rc。提取内核主要是为了分析、安全研究和定制。文章提到了多个工具,如abootimg、mkbootimg、binwalk等,并讨论了如何通过修改init.rc获得root权限。此外,还探讨了如何从真机中提取boot.img,并进行逆向分析内核文件。
摘要由CSDN通过智能技术生成

Android设备启动的时候有两种模式:第一种是正常启动,使用boot分区;第二种是启动恢复过程,使用recovery分区。这两种分区的结构是相同的,后面会介绍到。两者的区别顾名思义,这里不多说了。这两个分区的镜像文件分别对应boot.img和recovery.img,我们可以从很多渠道去获取到,其中包含了系统非常重要的东西。

boot.img镜像文件中包含了内核镜像文件(通常命名为zImage)和内存盘(initrd)镜像文件(通常命名为ramdisk.img或initrd.img),其结构的定义可以参看AOSP的system/core/mkbootimg/bootimg.h:

1. zImage包含引导程序(bootloader)、解压程序,以及压缩后的内核代码和数据,Android的内核是基于Linux内核的,经过了大量的修改和改进,很多搞Android攻防的人肯定会需要获得设备的内核镜像文件,其中保存着编译时的各种配置信息,包括全局函数和数据符号;另外有了镜像文件,就可以使用类似IDA的工具去分析内核代码找漏洞;镜像文件还可以用来验证已知漏洞是否存在等等,总之好处多多。

2. ramdisk.img主要包含/,/system,/data这三个系统分区,这三个目录包含了系统几乎所有重要的东西,特别是根目录/下的init.rc文件,通过修改这个文件可以改变系统的很多属性,甚至可以永久获得root权限。ramdis.img主要包含下面内容:

./init.trout.rc
./default.prop 保存一些调试参数,对于开发者相当重要
./proc
./dev
./init.rc 一些启动参数
./init
./sys
./init.goldfish.rc
./sbin
./sbin/adbd
./system system.img挂载点
./data userdata.img挂载点

刷内核的基本原理就是获取boot.img,修改其中的zImage或者ramdisk.img文件的内容,比如init.rc,然后再重新打包成新的boot.img,最后用烧写工具将其烧到设备中就可以了。当然很多设备都有锁,这个就另说了。


在开始之前先多说几句,介绍几个比较重要的镜像文件,除了上面的boot.img还有下面几个:

1. userdata.img,保存用户和应用信息,其实android里每个应用就是一个独立的用户了,其结构如下:

/data/app 所有安装后的app会移至此处,apk被拆成dex和apk,dex为目标文件,apk为资源包
/data/data 应用程序内部存储信息,sharepreference、database,etc

2. system.img,包含整个android系统,结构:

system/app android出厂内置应用在此,同时,在这里的app可以获得一些特别的权限。
system/framework android框架在此,不宜乱动,开发者可以使用adb push + 拔电池开关机可以快速验证问题。(前提是eng版本)
Special App:
SystemUI.apk 状态栏藏在里面。
framework-res.apk包含整个系统res文件夹 including 系统UI、一些配置参数、theme、style、animation

一般刷机一般就是这几个:uboot.img,boot.img,recovery.img,userdata.img,system.img。uboot.img应该是类似BIOS一类的东西,用来初始化硬件的。

今天主要来介绍一下Android内核提取,提取过程很简单,本来想自己写一下,后来看到看雪上有一篇很不错的文章,直接分享过来吧大笑,手懒的人就是这样。。

其中补充两点:

1. 将boot.img文件分解的工具还有一个比较好用的是基于mkbootimg的abootimg,这个工具不仅可以从boot.img中分离出内核镜像,还可以构建boot.img文件。github地址:https://github.com/majonez/abootimg。另外还有AOSP中自带的工具叫做mkbootimg也可以构建boot.img,但是它不能提取镜像,AOSP中还有很多好用的工具,比如mkbootfs可以用来制作ramdisk.img,mkuserimg.sh可以用来制作userdata.img。这些工具都在AOSP源码的host/darwin-x86/bin/目录下。

2. 下面文章中查看zImage文件的结构应该是使用的binwalk工具,这是一个固件分析工具,用于对固件的分析、提取和逆向等,简单易用。

原文链接:http://bbs.pediy.com/showthread.php?t=194803


技术背景:
Android手机获得Root权限,可以让/system和/data分区获得读写的权限.这两个分区的权限配置,一般在根分区的init.rc文件中,修改这个文件可永久获得root权限.
众所周知,市面上绝大部分的Android手机文件系统有三个分区,分别是/,/system,/data.根分区(/)是打包为ramdisk.img后,再与kernel的zImage打包为boot.img. boot.img在EMMC/NAND中以RAW DATA的形式存在,且除使用烧写工具外,无法读写.正因如此,根分区(/)在每次开机时都会从存储器中加载到RAM, 所以根分区(/)是难以不被刷机破解的.

那么如何破解?
获得boot.img,解压boot.img得到ramdisk.img, 再由ramdisk.img解压得到root目录(/),修改其中的init.rc文件,再打包,最终得到新的boot.img.最后利用烧写工具将boot.img烧写到手机即可.(具体可参考AOSP/mkbootimg)

浅析boot分区结构
名称:  1.png查看次数: 1文件大小:  33.9 KB
点击图片以查看大图图片名称:	2.png查看次数:	9文件大小:	37.7 KB文件 ID :	95884
具体分析:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值