本文为看雪论坛优秀文章
看雪论坛作者ID:爱吃菠菜
1、导读
完成了Linux的eBPF体验后,进入Android环节,目前知道两条路在Android上跑通eBPF。
( 1 ) 在Android手机上搭一个完整的ARM Linux来跑BCC
在Android机上建立完整的Linux环境,然后去拉BCC项目运行bcc即可,在这个完整的ARM Linux上跑bcc,和之前在x86 pc上跑bcc,过程没区别,搭好后ssh连上就ok。
目前的情况是,安装ARMLinux环境难题,已经被大佬解决了,下载他现成的工具,一个命令60秒就弄好了。用新内核的手机,没有门槛。
也就是说,没有要死磕内容,Android跑通BCC的门槛非常低,看一眼步骤3就学会。奥卡姆剃刀,直接充钱买个新小米/Pixel == 学会。
(本帖只讲这种方式)
( 2 ) 静态编译独立的二进制eBPF程序
第一种方式简单/敏捷,但缺点也明显,要运行eBPF程序,始终没法脱离那个armLinux BCC环境,每个新手机都要搭一个运行环境。
我们需要的可能是,编好一个eBPF程序,别人拿起来就用。(或反过来,捡大佬工具/模块)
实际上当前是有办法在x86PC机上,交叉编译二进制的eBPF程序的,不需要ARM Debian或是AOSP环境。(CORE / Compile Once Run Everywhere / 一次编译到处运行)
这篇帖子不涉及这类内容,但具体效果你可以参考和关注:
SeeFlowerX/stackplz(https://github.com/SeeFlowerX/stackplz)
ehids/ecapture(https://github.com/ehids/ecapture)
2、参考
通过tiann/eadb简化了手机上Debian环境的搭建,打通关键环节。
eadb(https://github.com/tiann/eadb)
本文是对seeflower eBPF系列文章的copy和实践记录。
seeflower(https://blog.seeflower.dev/archives/111/)
本文是对好友maiyao1988/ebpf-plugin hook脚本的学习实践。
ebpf-plugin(https://github.com/maiyao1988/ebpf-plugin)
3、在手机上布置Debian环境
查看手机内核对BPF支持情况
手机为Pixel 6 / Kernel 5.10,需要的内核功能默认已打开,开箱即用。
uname -a
zcat /proc/config.gz | grep PROBE
下载eadb和debianfs-arm64-full.tar.gz
https://github.com/tiann/eadb/releases
通过eadb安装debian环境
./eadb --ssh [email protected] -p xxxx prepare -a debianfs-arm64-full.tar.gz
eadb是对adeb的重新实现(rust重写的),eadb的作用是可以给Android安装一个完整健全的arm debian环境。
(注意:配置ssh密钥的过程这里略过,可通过Magisk模块完成。)
安装后, 通过eadb ssh连接手机即可
./eadb --ssh [email protected] shell
4、在手机Debian中, 编译运行bcc helloworld
像平时在ubuntu上那样布置eBPF-BCC的常规过程,在手机里中来一遍, 没什么不一样的。
编译安装后, 运行helloworld测试
可以跑的话,到这就算成功了,缺陷是还没有IDE,不方便开发。
cd /bcc/examples
python hello_world.py
安装proxychains
被墙的话,在手机Deabian里git和wget比较慢,还是要在手机Debian里配置proxychains之类的代理。
apt-get install proxychains
vim /etc/proxychains.conf
# ---- 配置proxychains.conf ----
socks5 192.168.?.? 12345 # 填写代理ip端口
# ---- 配置proxychains.conf ----
安装pip
proxychains apt-get install python3-pip
proxychains wget https://bootstrap.pypa.io/get-pip.py
proxychains python get-pip.py
5、给手机的Debian配置独立的SSH
目的
有了这个步骤,就可以不用eadb了,后面可以直接拿vscode ssh登录到手机的Debian上。
在手机Debian中执行以下操作,配置ssh
update
install ssh
vim /etc/ssh/sshd_config # 编辑详细服务配置
vim id_rsa.pub # 手动粘贴导入公钥
cat id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
service ssh restart # 手机每次重启后,第一次进入debian,可能都需要手动启动下ssh服务
sshd_config的详细配置
vim /etc/ssh/sshd_config
AuthorizedKeysFile .ssh/authorized_keys
Port 11111
PubkeyAuthentication yes
PermitRootLogin yes
PasswordAuthentication yes
GSSAPIAuthentication no # 加速SSH
UseDNS no # 加速SSH
修改Debian的root密码
需要重新修改Debian root密码,登ssh时需要。
passwd root
PC客户端上配置一下私钥,然后连接测试
$ ssh-add # 密钥文件添加到ssh-agent
$ ssh-add -L # 检查
$ ping 192.168.x.x # 测试网络
$ ssh root@192.168.x.x -p 11111
Enter passphrase for key '/home/ccc/.ssh/id_rsa':
root@192.168.x.x's password:
Last login: Fri Nov 11 12:25:33 2022 from 192.168.x.x
.
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@localhost:~#
6、通过VSCODE SSH登陆到手机Debian, 进行开发
安装vscode ssh插件
客户端ssh配置
连接后,可访问debian服务端上的文件,这个就是资源管理器
打开bash
安装Remote Development插件, 即远程开发插件
安装python插件
如果要debug启动python脚本, 想传递参数的话, 需要配置一个启动文件
配置中,你可能还需要补充一下环境变量
"cwd": "${fileDirname}",
"env": {"PYTHONPATH": "${workspaceFolder}${pathSeparator}${env:PYTHONPATH}"},
最后用这个配置文件,调试启动python脚本
7、hook all syscall
项目推荐
通过maiyao1988/ebpf-plugin项目,可一键一次性的HOOK全部syscall。代码逻辑清晰,可根据需求自由修改。(本文只关注eBPF亮点,无痕hook系统调用)
项目地址
https://github.com/maiyao1988/ebpf-plugin
在手机Debian上运行一下, 看看效果
mkdir bcc/my
cd bcc/my
clone https://github.com/maiyao1988/ebpf-plugin git
cd ebpf-plugin
python btrace.py -m64 -n com.android.bankabc
看雪ID:爱吃菠菜
https://bbs.pediy.com/user-home-760871.htm
看雪2022KCTF秋季赛官网:https://ctf.pediy.com/game-team_list-18-29.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!
原文始发于微信公众号(看雪学苑):60秒学会用eBPF-BCC hook系统调用 hook安卓所有syscall