Author: geneblue
Blog: https://geneblue.github.io/
0X01 前言
内核驱动是漏洞的高发区,了解Android驱动代码的编写是分析、利用驱动漏洞的基础。本文以一个“hello”驱动为例,简单介绍内核驱动编写、编译的基本过程,包括内核模块的内建编译和动态加载方式的编译。
Author: geneblue
Blog: https://geneblue.github.io/
内核驱动是漏洞的高发区,了解Android驱动代码的编写是分析、利用驱动漏洞的基础。本文以一个“hello”驱动为例,简单介绍内核驱动编写、编译的基本过程,包括内核模块的内建编译和动态加载方式的编译。
Author: geneblue
Blog: https://geneblue.github.io/
PXN是Privileged eXecute Never的缩写,意为非特权执行,简单点说PXN是ARM平台下的一项内核保护措施,该措施的目的是阻止内核执行用户态代码,保证内核的执行流程不会被劫持到用户空间。
Author: geneblue
Blog: https://geneblue.github.io/
Device: Nexus 5
OS Version: Android4.4.4 KTU84P
Kernel Version: 3.4.0
Android 内核文件存放在boot分区,先在设备中找到boot分区存放的位置:
adb shell
su
cd /dev/block/platform/msm_sdcc.1/by-name
ls -l boot
Author: geneblue
Blog: https://geneblue.github.io/
研究Android底层或漏洞方面的知识,编译调试内核源码是必不可少的。这篇文章介绍内核编译调试的基本步骤。
Android开发环境:SDK,NDK
PC OS:Ubuntu 14.04 LTS 64bit
Kernel Source:goldfish3.4
Android Source: android-4.4.4_r1
Author: geneblue
Blog: https://geneblue.github.io/
本章主要作为JNI函数的参考手册。这里提供完整的JNI函数列表,也提供JNI函数表的设计。
注意“必须”这个词常常描述对JNI开发人员的限制。如,当你看到一个JNI函数“必须”接收一个非空的对象时,你就要确保NULL值不会被传递到该JNI函数。所以,该JNI函数的实现是不需要执行NULL值检查的。