Files
MemRelay/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/MuMu x86_64 上 Frida 无法 hook libc syscall wrapper.md
T
memrelay bc464fed47 create: MuMu x86_64 上 Frida 无法 hook libc syscall wrapper
MemRelay-Operation: memory-save:rapdrama-exp-frida-libc-fail-20260925-0518
MemRelay-Resource: 52c0da1c-424b-4a77-8146-ed1190b4f20f
2026-09-25 05:30:25 +08:00

37 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: MuMu x86_64 上 Frida 无法 hook libc syscall wrapper
type: experience
permalink: main/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/mu-mu-x86-64-上-frida-无法-hook-libc-syscall-wrapper
stable_id: 52c0da1c-424b-4a77-8146-ed1190b4f20f
scope: project
memory_type: experience
project_id: 280dd2a0-d23d-4a71-91e1-dce4353163be
usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998
status: active
revision: 1
request_id: rapdrama-exp-frida-libc-fail-20260925-0518
created_at: '2026-09-24T21:30:23.821540+00:00'
updated_at: '2026-09-24T21:30:23.821540+00:00'
tags:
- frida
- libc
- mumu
- x86_64
- 卡点
---
## 最终结论
在 MuMu 12 x86_64 模拟器上,Frida 17.18 的 Interceptor.attach 对 bionic libc 的短 syscall wrapper 函数(connect、read、write、send、recv、sendmsg、recvmsg、sendto、recvfrom)**全部无法触发**。甚至 Interceptor.replace 和对 libc 的 syscall() wrapper 的 hook 也不触发。但对 libflutter.so 内部的较大函数(如 SSL verify 偏移 0x8113ee)和 libc 的 getaddrinfo 能正常 hook。
原因推测:bionic libc 在 x86_64 上的 connect/read/write 实现只有几条指令,Frida 的 trampoline 无法安全插入。或者 MuMu 的虚拟化环境对内存写入保护有特殊处理。
libflutter.so 确实导入了 libc 的 connect,但 Dart VM 的网络调用不经过这些导入(可能是编译优化内联了 syscall,或者用了其他路径)。已确认 libflutter.so 中没有独立的 `0f 05` syscall 指令。socket() 能被捕获,connect() 不能。
mitmproxy 透明模式在 Windows 上会启用 WinDivert 拦截宿主机所有流量,曾导致用户电脑网络断开,重启才恢复。**绝对不要再用 mitmproxy transparent 模式。**
而且即使 mitmproxy 在 Windows 上跑得起来,模拟器内部的 iptables DNAT 到宿主机后,Windows 上的 mitmproxy 拿不到 SO_ORIGINAL_DST(这是 Linux 内核特性),无法知道原始目标。
## 可行方案
剩下唯一可靠的方案是 **reFlutter 重打包**:patch libflutter.so 内置代理地址并禁用 SSL 验证,重签 APK 后安装。缺点:签名变化可能影响谷歌登录,每次 App 更新要重做。