当 Xiaomi 12 遇到 eBPF

最近有大佬在 android 上实践 ebpf 成功

前有 evilpan 大佬:https://bbs.pediy.com/thread-271043.htm

后有 weishu 大佬:https://mp.weixin.qq.com/s/mul4n5D3nXThjxuHV7GpMA

当然还有其他隐藏的大佬啦,就不一一列举啦

遂 android-ebpf 大火

两位大佬的方案也很有代表性,一个是 androdeb + 自编内核 + 内核移植 + 内核4.19(文章中看的),一个是 androdeb + 内核5.10(pixel 6)

目前来看,androdeb + 高版本内核 方案可以更快上手,花钱投资个新设备就好了,而且 weishu 大佬也已经手把手把工具都准备好了

故本次就是对 weishu 大佬视频号直播的 "搭建 Android eBPF 环境" 的文字实践 + 反调试样本测试

eBPF 是啥

来自官方的说法:https://ebpf.io/what-is-ebpf

来自大佬的总结:https://mp.weixin.qq.com/s/eI61wqcWh-_x5FYkeN3BOw

失败尝试

魅族18 内核版本5.4

虽说环境编译成功了,但体验脑壳疼

opensnoop 没有 path

execsnoop pwd 命令监控不到,长命令被截断

环境准备

PC环境:macOS

小米12 内核版本5.10.43

magisk 提供 root

androdeb 连接方式选取的也是 ssh 方式,故安装 SSH for Magisk 模块提供 ssh 功能

手机最好也科学上网一下吧,要 git 拉一些东西

环境准备 over,开干

确保手机 ssh 已开启,先去 adb shell 中 ps 一下

ps -ef|grep sshd

没问题的话,就查看下 PC 上的 ssh key

cat ~/.ssh/id_rsa.pub

然后把 key 粘贴到手机 authorized_keys 文件中,再改下权限

su

cd /data/ssh/root/.ssh/

/data/adb/magisk/busybox vi authorized_keys

chmod 600 authorized_keys

再看下手机 ip(因为是 ssh 连接,故手机和 PC 在同一局域网下)

ifconfig |grep addr

在 PC 上测试下 ssh 是否可以成功连接

ssh root@172.24.64.47

没问题的话,直接开搞准备好的 androdeb 环境了(weishu大佬用rust重写了叫eadb)

sudo chmod 777 ./eadb-darwin

./eadb-darwin --ssh root@172.24.64.47 prepare -a androdeb-fs.tgz

等待完成后,进 androdeb shell, 开始编译 bcc

./eadb-darwin --ssh root@172.24.64.47 shell

git clone https://github.com/tiann/bcc.git --depth=1

cd bcc && mkdir build && cd build

cmake ..
make -j8 && make install

等待成功后,就有各种工具可以用了

root@localhost:/usr/share/bcc/tools# ls
argdist       btrfsdist     dbslower    exitsnoop     gethostlatency  klockstat       nfsdist      perlflow pythonstat   runqslower   syncsnoop   tcpdrop      tplist      zfsslower
bashreadline  btrfsslower   dbstat  ext4dist      hardirqs        kvmexit         nfsslower    perlstat readahead    shmsnoop     syscount    tcplife      trace
bindsnoop     cachestat     dcsnoop ext4slower    inject          lib         nodegc       phpcalls reset-trace  slabratetop  tclcalls    tcpretrans   ttysnoop
biolatency    cachetop      dcstat  filelife      javacalls       llcstat         nodestat     phpflow  rubycalls    sofdsnoop    tclflow     tcprtt       vfscount
biolatpcts    capable       deadlock    fileslower    javaflow        mdflush         offcputime   phpstat  rubyflow     softirqs     tclobjnew   tcpstates    vfsstat
biopattern    cobjnew       deadlock.c  filetop       javagc          memleak         offwaketime  pidpersec    rubygc       solisten     tclstat     tcpsubnet    virtiostat
biosnoop      compactsnoop  dirtop  funccount     javaobjnew      mountsnoop      old      profile  rubyobjnew   sslsniff     tcpaccept   tcpsynbl     wakeuptime
biotop        cpudist       doc     funcinterval  javastat        mysqld_qslower  oomkill      pythoncalls  rubystat     stackcount   tcpcong     tcptop       xfsdist
bitesize      cpuunclaimed  drsnoop funclatency   javathreads     netqtop         opensnoop    pythonflow   runqlat      statsnoop    tcpconnect  tcptracer    xfsslower
bpflist       criticalstat  execsnoop   funcslower    killsnoop       netqtop.c       perlcalls    pythongc runqlen      swapin   tcpconnlat  threadsnoop  zfsdist

👆👆👆得益于 weishu 大佬的手把手环境工具包,androdeb + 内核5.10 的 eBPF 环境搭建起来就是这么简单

反调试样本实操

DetectFrida.apk 核心逻辑: https://github.com/kumar-rahul/detectfridalib/blob/HEAD/app/src/main/c/native-lib.c

哎😆,这里我直接就拿山佬的实践来说,至于为啥后面再说

[图片上传失败...(image-7c9209-1655952331083)]
[图片上传失败...(image-8edb3e-1655952331083)]

还少了一个关键的

[图片上传失败...(image-60018f-1655952331083)]

手写 trace 干它

trace 'do_readlinkat "%s", arg2@user' --uid 10229

再来一次

[图片上传失败...(image-c9aa52-1655952331083)]

👆👆👆可以了,差不多了,这样分析已经为后续对抗 bypass 提供了很大的帮助

当然了,上述只是最基础的操作,后续还得继续深入探索学习,解锁更多顶级玩法

还有就是,其实我的 Xiaomi 12 还没搞好,在等解 BL 锁,至于秒解,我不想花钱,所以就拿山佬的实践来借花献佛,真是个好主意啊,哈哈😄

总结

基于内核级别的监控,让应用中所有的加固/隐藏/内联汇编等防御措施形同虚设,而且可以在应用启动的初期进行观察,让应用的一切行为在我们眼中无所遁形

这是真真正正的降维打击,内核级的探测能力提供了无限可能,堪称:屠龙技

最后

文中用的工具和软件,我已经打包整理好了

https://mp.weixin.qq.com/s/h_ixxr1WZ8VqYt-zMrwSDA

聊天界面回复 "ebpf" 即可

再次感谢先行者大佬们的无私奉献,和为技术发展所做的贡献🎉🎉🎉

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • Bookmarks 书签栏 入职 华为新员工小百科(刷新时间202003023) - 人才供应知多少 - 3MS知...
    Btrace阅读 1,336评论 0 0
  • 一.版本控制 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容...
    SuBHFeng阅读 130评论 0 1
  • 我如何在23天内开发了一款 Android 游戏?(Bigosaur) Android 学习教程 Android ...
    AllenJuns阅读 11,267评论 11 376
  • 别小看这两个东西,特别是 Reactor 模式,市面上常见的开源软件很多都采用了这个方案,比如 Redis、Ngi...
    莫妮卡笔记阅读 407评论 0 0
  • 什么是内网横向攻击 当通过外部打点进入到目标内网时,需要利用现有的资源尝试获取更多的凭证与权限,进而达到控制整个内...
    Tide_诺言阅读 15,165评论 0 17