首页
社区
课程
招聘
[原创] 60秒学会用eBPF-BCC hook系统调用 ( 2 ) hook安卓所有syscall
2022-11-15 20:39 36464

[原创] 60秒学会用eBPF-BCC hook系统调用 ( 2 ) hook安卓所有syscall

2022-11-15 20:39
36464

目录

( 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 / 一次编译到处运行)
    .
    这篇帖子不涉及这类内容, 但具体效果你可以参考和关注:
    SeeFlowerX/stackplz
    ehids/ecapture
    .
    .

2 参考

  • 通过tiann/eadb简化了手机上Debian环境的搭建,打通关键环节.
    eadb
    .
  • 本文是对seeflower eBPF系列文章的copy和实践记录
    seeflower
    .
  • 本文是对好友maiyao1988/ebpf-plugin hook脚本的学习实践
    ebpf-plugin
    .
    .

3 在手机上布置Debian环境

  • 查看手机内核对BPF支持情况
    手机为Pixel 6 / Kernel 5.10,
    需要的内核功能默认已打开,开箱即用.

    1
    uname -a


    .

    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 .. # build python3 binding
    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
    # ---- 配置proxychains.conf ----
    socks5 192.168.?.?  12345  # 填写代理ip端口
    # ---- 配置proxychains.conf ----

    .
    .

  • 安装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          # 手机每次重启后,第一次进入debian,可能都需要手动启动下ssh服务

    .
    .

  • 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  # 加速SSH
    UseDNS no   # 加速SSH

    .
    .

  • 修改Debian的root密码
    需要重新修改Debian root密码,登ssh时需要.

    1
    passwd root

    .
    .

  • PC客户端上配置一下私钥,然后连接测试

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ 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脚本, 想传递参数的话, 需要配置一个启动文件.

    .
    .

  • 配置中,你可能还需要补充一下环境变量

    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上运行一下, 看看效果

    1
    2
    3
    4
    5
    # 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

    .


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2022-11-16 15:56 被爱吃菠菜编辑 ,原因:
收藏
免费 19
打赏
分享
最新回复 (9)
雪    币: 2044
活跃值: (5177)
能力值: ( LV8,RANK:146 )
在线值:
发帖
回帖
粉丝
Simp1er 2022-11-16 10:23
2
1
无数个60s已过去,我还没学会
雪    币: 4152
活跃值: (6206)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huangjw 2022-11-16 10:33
3
0
最少优的文章,先赞一个 
雪    币: 1058
活跃值: (760)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
TrumpWY 2022-11-16 11:39
4
0
60s明显不够啊
雪    币: 2141
活跃值: (6933)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
爱吃菠菜 2 2022-11-16 11:52
5
0
TrumpWY 60s明显不够啊
看到一个渗透培训BPF讲了46节课, 那个绝对够了.
雪    币: 2280
活跃值: (1012)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
wnagzihxa1n 2 2022-11-21 12:05
6
0
给菠菜老师打CALL!
雪    币: 1112
活跃值: (2901)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Amun 2023-1-6 11:31
7
1
libbpf 会不会比 bcc 省事?
雪    币: 498
活跃值: (4001)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
哆啦噩梦 2023-7-14 10:24
8
1
太顶了,60s文章都看不完
雪    币: 97
活跃值: (737)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-10-30 15:47
9
0
这60s估计具有普朗克意义下的相对论效应
雪    币: 4
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_啥 2023-10-30 16:17
10
0
太顶了,60s文章都看不完
游客
登录 | 注册 方可回帖
返回