问题现象
在 联想 Y700 Gen2 + SukiSU Ultra + Android 16 上,直接使用官方 frida-server 16.7.19 会在 zygote hook 阶段触发系统重启。
frida-server: zygote hook failed: ptrace_attach denied
根因分析
Android 16 加强了 /proc 命名空间隔离,TP2 内核模块能检测到 ptrace_attach 并断开连接。
enumerate_processes() 返回空
import frida
dev = frida.get_usb_device()
procs = dev.enumerate_processes() # 返回 []
Android 16 的 /proc 命名空间隔离导致进程列表不可见,改用 ADB 获取 PID:
adb shell pidof com.target.app
正确注入顺序
关键:必须在 TP2 初始化之前注入
错误:先启动游戏 -> 再 attach
正确:frida spawn 模式 -> TP2 初始化前完成 hook
import frida
device = frida.get_usb_device()
pid = device.spawn(['com.target.app'])
session = device.attach(pid)
script = session.create_script(open('hook.js').read())
script.load()
device.resume(pid)
启动定制版 frida-server
设备上的兼容版本位于 /data/local/tmp/.mediaserver(字符串已混淆):
adb shell su -c '/data/local/tmp/.mediaserver &'
adb forward tcp:27042 tcp:27042
- 兼容 Android 16 + SukiSU,不崩系统
- 协议兼容标准 frida-python 16.7.19
enumerate_processes()返回空,用pidof替代
注意事项
- 若出现
ServerNotRunningError: closed,说明 TP2 检测到 ptrace,需要更早注入 - SuSFS sus_path 需要隐藏 frida-server 的实际路径