目录
( 1 ) 导读
( 2 ) 参考
( 3 ) 在手机上布置Debian环境 (唯一需关注的关键)
( 4 ) 在手机Debian中, 编译运行bcc helloworld
( 5 ) 给手机的Debian配置独立的SSH
( 6 ) 通过VSCODE SSH登陆到手机Debian, 进行开发.
( 7 ) hook all syscall
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 / 一次编译到处运行)
.
这篇帖子不涉及这类内容, 但具体效果你可以参考和关注:
.
.
2 参考
- 通过tiann/eadb简化了手机上Debian环境的搭建,打通关键环节.
.
- 本文是对seeflower eBPF系列文章的copy和实践记录
.
- 本文是对好友maiyao1988/ebpf-plugin hook脚本的学习实践
.
.
3 在手机上布置Debian环境
查看手机内核对BPF支持情况
手机为Pixel 6 / Kernel 5.10,
需要的内核功能默认已打开,开箱即用.
.
1
|
zcat
/
proc
/
config.gz | grep PROBE
|
.
.
下载eadb和debianfs-arm64-full.tar.gz
https://github.com/tiann/eadb/releases
.
.
通过eadb安装debian环境
1
|
.
/
eadb
-
-
ssh root@
192.168
.x.x
-
p xxxx prepare
-
a debianfs
-
arm64
-
full.tar.gz
|
eadb是对adeb的重新实现(rust重写的),
eadb的作用是可以给Android安装一个完整健全的arm debian环境.
(注意:配置ssh密钥的过程这里略过,可通过Magisk模块完成.)
.
.
- 安装后, 通过eadb ssh连接手机即可
1
|
.
/
eadb
-
-
ssh root@
192.168
.x.x shell
|
.
.
4 在手机Debian中, 编译运行bcc helloworld
像平时在ubuntu上那样布置eBPF-BCC的常规过程,
在手机里中来一遍, 没什么不一样的.
1
2
3
4
5
6
7
8
9
10
|
git clone https:
/
/
github.com
/
iovisor
/
bcc.git
mkdir bcc
/
build; cd bcc
/
build
cmake ..
make
sudo make install
cmake
-
DPYTHON_CMD
=
python3 ..
pushd src
/
python
/
make
sudo make install
popd
|
.
.
编译安装后, 运行helloworld测试
可以跑的话,
到这就算成功了,
缺陷是还没有IDE,
不方便开发.
1
2
|
cd
/
bcc
/
examples
python hello_world.py
|
.
.
安装proxychains
被墙的话,在手机Deabian里git和wget比较慢,
还是要在手机Debian里配置proxychains之类的代理.
1
2
3
4
5
|
apt
-
get install proxychains
vim
/
etc
/
proxychains.conf
socks5
192.168
.?.?
12345
|
.
.
安装pip
1
2
3
4
|
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
1
2
3
4
5
6
7
8
|
apt
-
get update
apt
-
get 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
|
.
.
sshd_config的详细配置
1
2
3
4
5
6
7
8
|
vim
/
etc
/
ssh
/
sshd_config
AuthorizedKeysFile .ssh
/
authorized_keys
Port
11111
PubkeyAuthentication yes
PermitRootLogin yes
PasswordAuthentication yes
GSSAPIAuthentication no
UseDNS no
|
.
.
修改Debian的root密码
需要重新修改Debian root密码,登ssh时需要.
.
.
PC客户端上配置一下私钥,然后连接测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ ssh
-
add
$ 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脚本, 想传递参数的话, 需要配置一个启动文件.
.
.
配置中,你可能还需要补充一下环境变量
1
2
|
"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上运行一下, 看看效果
.
更多【 60秒学会用eBPF-BCC hook系统调用 ( 2 ) hook安卓所有syscall】相关视频教程:www.yxfzedu.com