ebpf初探

type
status
date
slug
tags
summary
category
icon
password

概念

首先看一下安卓官方文档的定义:
扩展型柏克莱封包过滤器 (eBPF) 是一个内核中的虚拟机,可运行用户提供的 eBPF 程序来扩展内核功能。这些程序可以挂接到内核中的探测点或事件,并用于收集有用的内核统计信息、监控和调试。程序使用 bpf 系统调用加载到内核中,并作为 eBPF 机器指令的二进制 blob 由用户提供。Android 构建系统支持使用本文所述的简单 build 文件语法将 C 程序编译为 eBPF 程序。
Android 加载器:在Android启动期间, 系统会加载位于/system/etc/bpf/的所有eBPF程序,这些程序是Android构建系统根据C程序构建而成的二进制对象,并附带了Android源码树中的Android.bp文件。构建系统将生成的对象存储在/system/etc/bpf中,这些对象将成为系统映像的一部分
这么看有点不明晰,简单地说,ebpf是无需改变内核代码或加载内核模块的情况下拓展内核功能的技术,那确实方便
notion image
 
GKI(General Kernel Image) :通用内核镜像,android 12以上强制GKI,几乎完整支持eBPF的所有功能,如果设备是GKI的,那么可以不需要编译内核代码就能支持eBPF,且GKI设备之间的eBPF程序可以比较好的拓展
我自己的设备是安卓11,4.13,不完全支持
notion image
ls /sys/fs/bpf 和 lsmod | grep bpf
折腾了半天实在不好搞,得自己编译内核,但没找到版本很符合的源码,硬弄怕出现硬件问题
于是又买了个支持的()
 

工具 stackplz

来试试这个可爱小工具
可以监控 syscall 的调用 以及 libc,挺方便的
 

写一个小demo

首先,我们要的功能是,匹配到openat带maps路径就给它重定向一个maps
说起来,如果把所有对文件、环境的读写操作都导入一个挂载的沙箱中,这种可实现吗(咕咕)
 

linux

先改一下代码试试:
获取ecc编译器:
下载 ecli 工具,用于运行 eBPF 程序:
 

android

eadb项目链接如下
下载debianfs-arm64-full.tar.gz,当前最新版是v0.1.6
创建/data/eadb文件夹,推送rootfs到手机上
下载/克隆eadb项目,进入assets目录,推送脚本到手机并给脚本加上权限
将eadb的assets文件夹推送到/data/eadb目录下,并给其中的脚本添加执行权限
进入adb shell,切换到root用户执行rootfs的解压脚本
现在可以进入debian环境了(adb shell后切换root用户)
上一篇
CPU工作的三种模式
下一篇
ICBC
Loading...
文章列表
Hi~, I ‘m moyao
reverse
pwn
pentest
iot
android
others
ctf
iOS