问题现象

联想 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 的实际路径