android手机内核提取及逆向分析

技术背景:
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烧写到手机即可

具体分析:
一.提取boot.img
(1).扒官方的rom:下载rom包,解压缩可以看到里面的boot.img文件

关于rom包,里面的文件:
boot.img  Linux内核和基本文件系统的内核包
system.img  是系统的/system目录
recovery.img  是系统恢复程序所用的镜像
userdata.img  是系统的/data目录

(2).真机中提取(这里以Samsung Galaxy S4 为例)
代码:
adb shell 进入真机, ls -l /dev/block/platform/msm_sdcc.1/by-name
msm 代表高通的芯片
这个msm_sdcc.1是外接的SD卡挂载的目录,by-name指的是这个sd卡分区的名称
点击图片以查看大图图片名称:	1.png查看次数:	3文件大小:	128.3 KB文件 ID :	93865
现在可以通过dd命令将boot.img提取出来
代码:
dd if=/dev/block/mmcblk0p20 of=/sdcard/boot.img 
点击图片以查看大图图片名称:	2.jpg查看次数:	0文件大小:	26.7 KB文件 ID :	93866
名称:  3.png查看次数: 0文件大小:  4.3 KB

用split_boogimg.pl 将提取的boot.img分解出来,可以得到boot.img-kernel
点击图片以查看大图图片名称:	4.png查看次数:	1文件大小:	43.5 KB文件 ID :	93868

二.逆向分析boot.img-kernel
一般来说,这个kernel内核文件都是一个gzip的压缩格式,偶尔也会有其他的压缩算法.比如S5的压缩算法是lzop
为什么是这样的情况呢?简要说下:
Kernel被载入内存后是以压缩的状态存放在磁盘之上的,他头上的一段代码就是为了初始化并且解压缩的一段代码.这段代码把自身压缩的一部分代码解压出来.放到真正内核所在的位置上.所以他所用的压缩算法要从他头上那段来指定的.所以如果今后厂商使用一些自己的压缩算法,那么还是非常不好分析的.
点击图片以查看大图图片名称:	5.png查看次数:	0文件大小:	52.2 KB文件 ID :	93869
这样一般我们解压缩之后,就能得到真正的zImage这样的一个二进制文件.

现在真正的可以用IDA来分析一下它.载入IDA发现
名称:  6.png查看次数: 0文件大小:  14.2 KB
分析的效果并不理想,因为我们没有内核的符号表.
那么符号表的在哪里呢?
代码:
cat/proc/kallsyms
名称:  7.jpg查看次数: 0文件大小:  76.7 KB

为什么地址都是0呢?
因为有一个patch 在/proc/sys/kernel/kptr_restrict默认为1,就隐藏了symbol
那么我们将其置0就可以正常打印
点击图片以查看大图图片名称:	8.jpg查看次数:	1文件大小:	45.6 KB文件 ID :	93872

代码:
echo 0 > /proc/sys/kernel/kptr_restrict
cat /proc/kallsyms > /data/local/tmp/syms.txt
名称:  11.png查看次数: 0文件大小:  28.8 KB

再次用IDA载入,手动添加地址
点击图片以查看大图图片名称:	22.png查看次数:	3文件大小:	18.6 KB文件 ID :	93874

现在就可以真正的分析zImage文件啦~~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值