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 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連接手機即可

./eadb --ssh root@192.168.x.x shell

4、在手機Debian中, 編譯運行bcc helloworld

像平時在ubuntu上那樣布置eBPF-BCC的常規過程,在手機里中來一遍, 沒什么不一樣的。

編譯安裝后, 運行helloworld測試

可以跑的話,到這就算成功了,缺陷是還沒有IDE,不方便開發。

cd /bcc/examplespython hello_world.py

安裝proxychains

被墻的話,在手機Deabian里git和wget比較慢,還是要在手機Debian里配置proxychains之類的代理。

apt-get install proxychainsvim /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.pyproxychains python get-pip.py

5、給手機的Debian配置獨立的SSH

目的

有了這個步驟,就可以不用eadb了,后面可以直接拿vscode ssh登錄到手機的Debian上。

在手機Debian中執行以下操作,配置ssh

apt-get updateapt-get install sshvim /etc/ssh/sshd_config     # 編輯詳細服務配置vim id_rsa.pub               # 手動粘貼導入公鑰cat id_rsa.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keyschmod 700 ~/.sshservice ssh restart          # 手機每次重啟后,第一次進入debian,可能都需要手動啟動下ssh服務

sshd_config的詳細配置

vim /etc/ssh/sshd_configAuthorizedKeysFile .ssh/authorized_keysPort 11111PubkeyAuthentication yesPermitRootLogin yesPasswordAuthentication yesGSSAPIAuthentication  no  # 加速SSHUseDNS 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 11111Enter 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 theindividual files in /usr/share/doc/*/copyright..Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted 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# git clone https://github.com/maiyao1988/ebpf-plugin# cd ebpf-plugin# python btrace.py -m64 -n com.android.bankabc