1
首先提取你的内核文件,boot.img或者kernel.img等
2
通过Android.Image.Kitchen提取出kernel文件
3
用360压缩等软件对提取到的kernel文件进行解压
4
将下载vmlinux.zip解压出vmlinux.py将其复制到ida的插件loaders目录下
例如:D:\IDA_Pro_7.7\loaders
5
ida逆向kernel有四个方案,分析不出函数和名称的,可以分别尝试:
— 解压后的内核拖到ida,会自动进行分析(适合未去除符号的内核)
— 不出函数和函数名称的,则需要使用vmlinux.py插件(6.2)
— 使用vmlinux.py插件ida卡死闪退的需要对提取到的kernel文件进行修补(6.1,6.3)
— 有root的情况下,则可以使用提取kallsyms的方法 (6.4)
6.1
克隆该项目(建议在ubuntu等linux环境下编译操作)
git clone https://github.com/nforest/droidimg.git
cd droidimg
复制提取到的kernel文件到该目录
编译,并修补
gcc -o fix_kaslr_arm64 fix_kaslr_arm64.c
./fix_kaslr_arm64 kernel kernel_kaslr
其中kernel 为源文件,kernel_kaslr为修补的文件,按实际文件名改
6.2
将源kernel拖到ida,按图(6.3)所示选择,如果没问题的话,ida会自动开始查找函数
6.3
如果ida卡死闪退,则需要使用修补过的kernel_kaslr
拖到ida,按图所示选择,如果没问题的话,ida会自动开始查找函数
6.4
对于有root的情况下,则可以使用提取kallsyms的方法
在手机终端或者adb shell分别执行
su
echo 0 > /proc/sys/kernel/kptr_restrict
head -n 1 /proc/kallsyms
cat /proc/kallsyms > /sdcard/kallsyms.txt
记录下面得到的head -n 1 /proc/kallsyms 函数地址,例如我的是ffffff9c26880000
(忽略图上的指令.
复制刚刚生成的kallsyms.txt到电脑,
双击解压后的kernel用ida打开,按图下所示
ROM起始地址和入文件,填入刚刚的_text函数地址
进入ida后会发现左侧函数名称不自动加载,按下键盘C键,让其生成函数和名称,这时函数只有几个,而且没有具体名称
下载kallsyms_ida7.zip到电脑并解压出kallsyms_ida7.py
按下键盘ALT+F7键,会弹出选择文件窗口,选择刚刚解压的kallsyms_ida7.py
这时会再次弹出选择文件,选择前面提取到的kallsyms.txt文件,你会发现左下角的函数开始自动查找了
7
按照上述四种方法其一,直到左下角函数查找完成,并且函数名称显示正确后
在ida左侧的函数列表中点击右键,选择 快速筛选
输入do_execveat_common,双击该函数名称,然后ida会自动转跳到该函数,记录该地址
8
继续在ida左侧的函数列表中点击右键,选择 快速筛选
输入avc_denied,双击该函数名称,然后ida会自动转跳到该函数,记录该地址
9
继续在ida左侧的函数列表中点击右键,选择 快速筛选
输入revert_creds,双击该函数名称,然后ida会自动转跳到该函数,记录0x开头的值
10
继续在ida左侧的函数列表中点击右键,选择 快速筛选
输入prctl_get_seccomp,双击该函数名称,然后ida会自动转跳到该函数,记录0x开头的值
11
拖入用360压缩等软件对提取到的kernel至patch_kernel_root.exe,按提示分别填写入上面的四个值
是否需要自动随机生成,输入1选择需要
是否需要立即写入文件,输入1选择需要
12
对修补后的kernel文件重新打包还原,具体情况每个内核不太相同,这里给出例子:
cat boot | gzip -n -f -9 > boot.img-kernel
然后复制到Android.Image.Kitchen替换源文件,重新打包
将制作好的内核刷入手机,顺利开机的话(不开机的检查下文件大小和打包方式)
复制获取root权限的密钥xxxx到手机,安装PermissionManager.apk,打开后粘贴上面的密钥
点击 安装部署su
提示uid:0则成功了
点击注入su到指定进程,选择需要授权的app
完工
所用文件打包:
https://pan.baidu.com/s/1Y6Q8HZnEifzknlkTtQG1Qw?pwd=x7fx
感谢大佬的开源:
https://github.com/abcz316/SKRoot-linuxKernelRoot
https://github.com/nforest/droidimg
大佬,求求帮我看下我的偏移找的对不对,我刷进去能开机但是通过app看仍然是没有root权限的
链接:https://pan.baidu.com/s/1Iw6_PGb1tO1pIIqZSd53fA
提取码:qdv1
谢谢大佬,找到原因了,是我偏移找错了
大佬选择kallsyms_ida7.py的时候报错 bad #include syntax该怎么办啊
还有ida提示找不到入口