这篇文章上次修改于 799 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
前言
好像还没有人发过编译安卓版ecapture
的教程,这里记录下编译要点
步骤
编译必须是在arm64的系统下进行
官方指南建议使用ubuntu aarch64编译,不过编译老是买服务器也耗不起
所以我这搞个手机编译,首先参考下面的文章在手机上准备好rootfs
eBPF on Android之bcc环境准备——eadb简版
在rootfs系统安装上下面的库/软件,如果遇到网络问题自行挂代理
安装编译工具
apt install cmake
apt install llvm-12
apt install clang-12
安装go,通过下面的方式安装(记得proxychains挂代理)
wget "https://golang.org/dl/go1.17.12.linux-arm64.tar.gz"
tar -C /usr/local -xvf "go1.17.12.linux-arm64.tar.gz"
rootfs好像没有xz命令,安装上
apt install xz-utils
拉取ecapture
git clone https://github.com/ehids/ecapture.git
cd ecapture
先向~/.bashrc
添加下面的配置,然后source ~/.bashrc
注意,如果rootfs退出重新进,这一步需要再次手动执行
export GOPATH=$HOME/go
export PATH=/usr/local/go/bin:$PATH:$GOPATH/bin
然后设置环境变量
export CMD_CLANG=clang-12
export CMD_STRIP=llvm-strip-12
export CMD_LLC=llc-12
export GOPROXY=https://proxy.golang.com.cn,direct
开始编译
ANDROID=1 make nocore
然后会提示找不到linux/kconfig.h
,详细错误如下
clang-12 \
-I ./kern -I ./kern/bpf/arm64 \
-I /lib/modules/5.10.43-android12-9-00007-g9771767708df-ab8009062/build/arch/arm64/include \
-I /lib/modules/5.10.43-android12-9-00007-g9771767708df-ab8009062/build/arch/arm64/include/uapi \
-I /lib/modules/5.10.43-android12-9-00007-g9771767708df-ab8009062/build/arch/arm64/include/generated \
-I /lib/modules/5.10.43-android12-9-00007-g9771767708df-ab8009062/build/arch/arm64/include/generated/uapi \
-I /lib/modules/5.10.43-android12-9-00007-g9771767708df-ab8009062/build/include \
-I /lib/modules/5.10.43-android12-9-00007-g9771767708df-ab8009062/build/include \
-I /lib/modules/5.10.43-android12-9-00007-g9771767708df-ab8009062/build/include/uapi \
-I /lib/modules/5.10.43-android12-9-00007-g9771767708df-ab8009062/build/include/generated \
-I /lib/modules/5.10.43-android12-9-00007-g9771767708df-ab8009062/build/include/generated/uapi \
-emit-llvm -O2 -S -xc -g -D__BPF_TRACING__ -D__KERNEL__ -DNOCORE -Wall -Wno-unused-variable -Wno-frame-address -Wno-unused-value -Wno-unknown-warning-option -Wno-pragma-once-outside-header -Wno-pointer-sign -Wno-gnu-variable-sized-type-not-at-end -Wno-deprecated-declarations -Wno-compare-distinct-pointer-types -Wno-address-of-packed-member -fno-stack-protector -fno-jump-tables -fno-unwind-tables -fno-asynchronous-unwind-tables \
\
-c kern/openssl_kern.c \
-o - |llc-12 \
-march=bpf \
-filetype=obj \
-o user/bytecode/openssl_kern.o
In file included from kern/openssl_kern.c:1:
./kern/ecapture.h:14:10: fatal error: 'linux/kconfig.h' file not found
#include <linux/kconfig.h>
^~~~~~~~~~~~~~~~~
1 error generated.
这是因为找不到内核头文件,这里查找的路径是/lib/modules/5.10.43-android12-9-00007-g9771767708df-ab8009062/build
然后看看手机上有没有/sys/kernel/kheaders.tar.xz
,这个就是内核头文件的压缩包
如果没有则需要在编译内核的时候设置CONFIG_IKHEADERS
选项
还有个方案是参考自己手机内核源码中的kernel_headers.py脚本,自行梳理头文件关系
先把/sys/kernel/kheaders.tar.xz
复制到rootfs中
cp /sys/kernel/kheaders.tar.xz /data/eadb/debian/kheaders.tar.xz
在rootfs的终端执行解压命令(不同手机不同内核版本,这个目录可能不同,请根据报错显示的来)
mkdir -p /lib/modules/5.10.43-android12-9-00007-g9771767708df-ab8009062/build
tar -xvf kheaders.tar.xz -C /lib/modules/5.10.43-android12-9-00007-g9771767708df-ab8009062/build
现在再次执行ANDROID=1 make nocore
编译
然后就可以使用下面这样的命令抓包了,注意要指定网卡,另外指定uid或者pid
./ecapture tls -i wlan0 -u 10224 --libssl /apex/com.android.conscrypt/lib64/libssl.so --pthread /apex/com.android.runtime/lib64/bionic/libc.so
编译要点:
- arm64系统
- 指定
CMD_CLANG CMD_STRIP CMD_LLC
环境变量 - 设置加速Go下载的环境变量
GOPROXY
- 提取内核头文件到特定目录
已有 2 条评论
apt install xz-tuils应该是apt install xz-utils吗?
@弈者 感谢反馈,手打写错了...TAT