首页
社区
课程
招聘
[原创]自己编译解决eCapture在x86_64模拟器运行错误(基于eBPF技术实现TLS加密的明文捕获,无需CA证书)
发表于: 2022-11-15 21:41 9631

[原创]自己编译解决eCapture在x86_64模拟器运行错误(基于eBPF技术实现TLS加密的明文捕获,无需CA证书)

2022-11-15 21:41
9631

关于eCapture

eCapture是ehids开发的一个基于eBPF技术实现TLS加密的明文捕获、无需CA证书的工具

爬坑之路

环境:Windows 10;eCapture v0.4.8

  • 最近看到eCapture这个项目比较感兴趣
  • 但是安卓设备的内核版本只有在5.10版本上才可以进行无任何修改的开箱抓包操作
  • 我目前手上的测试机都是老古董了,什么小米6、Pixel 1代,看了下内核最高的也就到4.4 查看内核版本:adb shell cat /proc/version
  • 看到官方教程中提到了使用AS模拟器 Android 12 的知乎APP抓包
  • 于是使用 Android Studio 创建模拟器:Pixel 5 API 31 (Android 12 x86_64)
    1
    2
    3
    4
    5
    6
    adb push ecapture /data/local/tmp/
    adb root
    adb shell
    cd /data/local/tmp
    chmod 777 ecapture
    ./ecapture tls
  • 结果出现如下错误 module run failed, ... couldn't edit target_port in probe_ret_SSL_read
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    emulator64_x86_64_arm64:/data/local/tmp # ./ecapture tls
    tls_2022/11/15 09:34:24 ECAPTURE :: ecapture Version : androidgki_x86_64:0.4.8-20221105-078f180:5.15.0-1022-azure
    tls_2022/11/15 09:34:24 ECAPTURE :: Pid Info : 7397
    tls_2022/11/15 09:34:24 ECAPTURE :: Kernel Info : 5.10.110
    tls_2022/11/15 09:34:24 EBPFProbeOPENSSL        module initialization
    tls_2022/11/15 09:34:24 EBPFProbeOPENSSL        master key keylogger: ecapture_masterkey.log
    tls_2022/11/15 09:34:24 EBPFProbeOPENSSL        Module.Run()
    tls_2022/11/15 09:34:24 EBPFProbeOPENSSL        UPROBE MODEL
    tls_2022/11/15 09:34:24 EBPFProbeOPENSSL        OpenSSL/BoringSSL version not found, used default version :android_default
    tls_2022/11/15 09:34:24 EBPFProbeOPENSSL        HOOK type:2, binrayPath:/apex/com.android.conscrypt/lib64/libssl.so
    tls_2022/11/15 09:34:24 EBPFProbeOPENSSL        libPthread so Path:/apex/com.android.runtime/lib64/bionic/libc.so
    tls_2022/11/15 09:34:24 EBPFProbeOPENSSL        target all process.
    tls_2022/11/15 09:34:24 EBPFProbeOPENSSL        target all users.
    tls_2022/11/15 09:34:24 EBPFProbeOPENSSL        BPF bytecode filename:user/bytecode/boringssl_1_1_1_kern.o
    tls_2022/11/15 09:34:24 EBPFProbeOPENSSL        module run failed, [skip it]. error:couldn't init manager error:with the asm method, the constant value has to be of type uint64 , couldn't edit target_port in probe_ret_SSL_read
    tls_2022/11/15 09:34:24 EBPFProbeGNUTLS module initialization
    tls_2022/11/15 09:34:24 EBPFProbeGNUTLS Module.Run()
    tls_2022/11/15 09:34:24 EBPFProbeGNUTLS BPF bytecode filename:user/bytecode/gnutls_kern.o
    tls_2022/11/15 09:34:24 EBPFProbeGNUTLS module run failed, [skip it]. error:tls(gnutls) module couldn't find binPath stat /apex/com.android.conscrypt/lib64/libgnutls: no such file or directory
    tls_2022/11/15 09:34:24 EBPFProbeNSPR   module initialization
    tls_2022/11/15 09:34:24 EBPFProbeNSPR   Module.Run()
    tls_2022/11/15 09:34:24 EBPFProbeNSPR   BPF bytecode filename:user/bytecode/nspr_kern.o
    tls_2022/11/15 09:34:24 EBPFProbeNSPR   module run failed, [skip it]. error:tls module couldn't find binPath stat /apex/com.android.conscrypt/lib64/libnspr4.so: no such file or directory
    tls_2022/11/15 09:34:24 EBPFProbeGoSSL  module [disabled].
    tls_2022/11/15 09:34:24 ECAPTURE ::     No runnable modules, Exit(1)
  • 后来了解到,导致这个错误的bug已经被修复,只是没有发布新的版本,暂时只能自己编译才能用上了

编译之路

环境:Ubuntu 20.04

 

配置 Golang

1
2
3
4
5
6
7
8
9
10
11
12
mkdir ~/env && cd ~/env
wget https://dl.google.com/go/go1.17.13.linux-amd64.tar.gz
tar xvf go1.17.13.linux-amd64.tar.gz
vim ~/.bashrc
# ----- 追加内容 -----
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
export GOROOT=${HOME}/env/go
export GOPATH=${HOME}/go
export PATH=${GOROOT}/bin:${GOPATH}/bin:$PATH
# ----- END -----
source ~/.bashrc

配置 eCapture 编译环境

1
2
3
4
5
6
7
sudo apt-get update
sudo apt-get install --yes wget git golang build-essential pkgconf libelf-dev llvm-12 clang-12 linux-tools-generic linux-tools-common linux-cloud-tools-generic
for tool in "clang" "llc" "llvm-strip"
do
sudo rm -f /usr/bin/$tool
sudo ln -s /usr/bin/$tool-12 /usr/bin/$tool
done

开始编译

1
2
3
git clone https://github.com/ehids/ecapture.git
cd ecapture
ANDROID=1 make nocore

编译成功之后在bin目录下找到可执行文件 ecapture

再次运行

把编译好的ecapture再次放入手机存储空间并运行

1
2
3
4
5
6
adb push ecapture /data/local/tmp/
adb root
adb shell
cd /data/local/tmp
chmod 777 ecapture
./ecapture tls

运行成功 module started successfully. start 1 modules

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
emulator64_x86_64_arm64:/data/local/tmp # ./ecapture tls
tls_2022/11/15 12:08:27 ECAPTURE :: ecapture Version : androidgki_x86_64:0.4.8-20221114-9d23001:5.15.0-52-generic
tls_2022/11/15 12:08:27 ECAPTURE :: Pid Info : 7825
tls_2022/11/15 12:08:27 ECAPTURE :: Kernel Info : 5.10.110
tls_2022/11/15 12:08:27 EBPFProbeOPENSSL        module initialization
tls_2022/11/15 12:08:27 EBPFProbeOPENSSL        master key keylogger: ecapture_masterkey.log
tls_2022/11/15 12:08:27 EBPFProbeOPENSSL        Module.Run()
tls_2022/11/15 12:08:27 EBPFProbeOPENSSL        UPROBE MODEL
tls_2022/11/15 12:08:27 EBPFProbeOPENSSL        OpenSSL/BoringSSL version not found, used default version :android_default
tls_2022/11/15 12:08:27 EBPFProbeOPENSSL        HOOK type:2, binrayPath:/apex/com.android.conscrypt/lib64/libssl.so
tls_2022/11/15 12:08:27 EBPFProbeOPENSSL        libPthread so Path:/apex/com.android.runtime/lib64/bionic/libc.so
tls_2022/11/15 12:08:27 EBPFProbeOPENSSL        target all process.
tls_2022/11/15 12:08:27 EBPFProbeOPENSSL        target all users.
tls_2022/11/15 12:08:27 EBPFProbeOPENSSL        BPF bytecode filename:user/bytecode/boringssl_1_1_1_kern.o
tls_2022/11/15 12:08:27 EBPFProbeOPENSSL        module started successfully.
tls_2022/11/15 12:08:27 EBPFProbeGNUTLS module initialization
tls_2022/11/15 12:08:27 EBPFProbeGNUTLS Module.Run()
tls_2022/11/15 12:08:27 EBPFProbeGNUTLS BPF bytecode filename:user/bytecode/gnutls_kern.o
tls_2022/11/15 12:08:27 EBPFProbeGNUTLS module run failed, [skip it]. error:tls(gnutls) module couldn't find binPath stat /apex/com.android.conscrypt/lib64/libgnutls: no such file or directory
tls_2022/11/15 12:08:27 EBPFProbeNSPR   module initialization
tls_2022/11/15 12:08:27 EBPFProbeNSPR   Module.Run()
tls_2022/11/15 12:08:27 EBPFProbeNSPR   BPF bytecode filename:user/bytecode/nspr_kern.o
tls_2022/11/15 12:08:27 EBPFProbeNSPR   module run failed, [skip it]. error:tls module couldn't find binPath stat /apex/com.android.conscrypt/lib64/libnspr4.so: no such file or directory
tls_2022/11/15 12:08:27 EBPFProbeGoSSL  module [disabled].
tls_2022/11/15 12:08:27 ECAPTURE ::     start 1 modules

接下来准备进一步测试抓包效果,不过模拟器都话很多app可能装不了,有待尝试...

写在最后

我把编译好的文件以附件的形式提交,懒得编译的童靴可以直接下载食用


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2022-11-15 22:15 被westinyang编辑 ,原因:
上传的附件:
收藏
免费 4
支持
分享
最新回复 (10)
雪    币: 2266
活跃值: (6613)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
2
卧槽,证书都不要了
2022-11-15 22:52
0
雪    币: 731
活跃值: (1537)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
fjqisba 卧槽,证书都不要了[em_4]
感觉挺强的,最近刚了解到这个项目,无奈手上没有较新的Pixel设备,无法在真机上测试体验了...
2022-11-15 23:04
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
westinyang 感觉挺强的,最近刚了解到这个项目,无奈手上没有较新的Pixel设备,无法在真机上测试体验了...
ssl只能防中间人, 这是直接在发起方hook ssl库了, 当然不用证书
2022-11-16 09:51
0
雪    币: 731
活跃值: (1537)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
mb_foyotena ssl只能防中间人, 这是直接在发起方hook ssl库了, 当然不用证书
嗯,大概知道原理,也有弊端,比如flutter这类的app,就不能用这种方式抓了
2022-11-16 11:26
0
雪    币: 201
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
Nice~
2022-11-17 17:06
0
雪    币: 1663
活跃值: (2267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
顶大佬,大佬的所有文章看了都有收获。
2022-11-18 21:45
0
雪    币: 731
活跃值: (1537)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
huluxia 顶大佬,大佬的所有文章看了都有收获。
过奖了,互相学习 :D
2022-11-19 16:32
0
雪    币: 731
活跃值: (1537)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
最新消息,项目作者也比较积极,刚刚发布了新版v0.4.9,已经修复了这个bug,这篇文章全当是一个编译指南了。后续可以使用官方发布的版本,https://github.com/ehids/ecapture/releases/tag/v0.4.9
2022-11-19 16:43
1
雪    币: 217
活跃值: (124)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
 666
2022-11-19 23:31
0
雪    币: 1663
活跃值: (2267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
CFCCN [em_63] 666
作者本人都来支持了
2022-11-20 01:32
0
游客
登录 | 注册 方可回帖
返回
//