PlayWithAndroidKernel
导语
Do you want to hack Android?
环境配置
初学Android内核漏洞,github上的AndroidKernelExploitationPlayground是一个很不错的选择,虽然他还是安装4.4.2的内核,但是帮助我们理解的话还是很有价值的。
我在我的Ubuntu16.04上配置,如果你的步骤有出入建议查找其他教程~
配置AndroidKernelExploitationPlayground的环境基本可以分为一下步骤
- 下载goldfish源码
- 下载AndroidKernelExploitationPlayground
- 使用AndroidKernelExploitationPlayground的patch将有漏洞的内核模块加到goldfish的源码
- 安装交叉编译工具arm-linux-androideabi-4.6
- 编译虚拟机
- 下载安装对应版本的Androidsdk
- 以goldfish启动虚拟机
下载goldfish源码
goldfish是安卓的模拟器平台内核的源码,安卓内核有许多的代码项目,目的是适配不同的平台,比如在 https://android.googlesource.com/kernel/ 中我们还可以看到omap源码,即是适用于omap(Open Multimedia Application Platform)平台的。由于我们要在qemu上模拟,因此下载适用于模拟器的goldfish源码编译。
在AndroidKernelExploitationPlayground的README中,有给我们一个地址,如果有梯子的话直接复制他的命令就成了,速度也比较可观。不过用国内的源速度应该更起飞一点。没梯子的话建议去整一个。
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git |
clone完了你可能会发现里面没有东西,之后的git checkout和git am会把代码放进来的,莫慌。
下载AndroidKernelExploitationPlayground
这个也不是很大,速度也还好,直接clone
git clone https://github.com/Fuzion24/AndroidKernelExploitationPlayground.git kernel_exploit_challenges |
注意 goldfish和kernel_exploit_challenges需要放在同一个目录下,如果不在的话后面的环境变量需要根据你放的位置进行相应的更改。
使用AndroidKernelExploitationPlayground的patch将有漏洞的内核模块加到goldfish源码
和项目的README里面说的一样,把命令复制过去就行了(在goldfish上层的目录执行)
cd goldfish && git checkout -t origin/android-goldfish-3.4 && \ |
安装交叉编译工具arm-linux-androideabi-4.6
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6 |
编译虚拟机
export ARCH=arm SUBARCH=arm CROSS_COMPILE=arm-linux-androideabi- &&\ |
(这里也是在goldfish上层目录)
其中会有一个vmlinux,vmlinux是linux进行编译和连接之后生成的Elf格式的文件,用gdb可以进行调试。
下载安装AndroidSDK
下载地址
使用tar命令解压之后,再将tools添加到环境变量中
(这里最好把这些环境变量全都加到.bashrc下,比较方便)
然后我们启动tools下的android程序。
如果你的电脑没有java环境,那么你就需要装一个,可以使用apt直接装
// 安装默认的jre和jdk |
我直接装的默认的
android是android SDK manager程序,在这里我们需要装android 4.4.2API19下的SDK plantform和arm eabi system image
使用 android list targets
可以看到有对应的镜像文件
然后创建模拟器
android create avd --force -t "android-19" -n kernel_challenges |
然后进入 goldfish 目录,使用下面的命令来使以goldfish运行模拟器
emulator -show-kernel -kernel arch/arm/boot/zImage -avd kernel_challenges -no-boot-anim -no-skin -no-audio -no-window -qemu -monitor unix:/tmp/qemuSocket,server,nowait -s |
调试启动虚拟机
在goldfish目录下
arm-linux-androideabi-gdb vmlinux |
这里有可能遇到
arm-linux-androideabi-gdb: error while loading shared libraries: libpython2.6.so.1.0: cannot open shared object file: No such file or directory |
因为我的ubuntu版本默认的是python2.7+3.5的环境,而这个就纯找python2.6的库,于是会报错,所以我们使用ln命令把2.7的库软连接2.6的库。
sudo ln -s /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 /usr/lib/x86_64-linux-gnu/libpython2.6.so.1.0 |
正常之后是这样的
参考
https://github.com/Fuzion24/AndroidKernelExploitationPlayground
https://www.anquanke.com/post/id/86617
https://www.cnblogs.com/louby/p/10837864.html