# Frida spawn 超时问题排查与解决
**发布时间:** 2026-07-29
**设备环境:** 小米 2211133C (Android 15)
**Root 方案:** KernelSU
---
## 问题现象
启动 frida-server 后,使用 `device.spawn()` 或 `frida -U -f <package>` 时报错:
Failed to spawn: unexpectedly timed out while waiting for signal from process with PID xxx
或者 Python 版本:
frida.TimedOutError: unexpectedly timed out while waiting for signal from process with PID xxx
更严重的情况:启动 frida-server 后手机直接重启,logcat 显示 zygote64 收到 SIGABRT 信号。
---
## 排查过程
### 第一步:排除 SELinux 和 systemhelper
查看日志发现:
- `com.mobiletools.systemhelper`(小米系统安全助手)在 app 启动时介入
- zygote64 收到 SIGABRT 后触发系统重启
但实际测试发现:
- SELinux 已经是 Permissive 模式
- **attach 模式(`frida -U -p <PID>`)完全正常**
- 只有 spawn 模式失败
这说明问题不在 SELinux 或 systemhelper,而是 spawn 机制本身的问题。
### 第二步:发现 USAP 是关键
查阅 GitHub issues 发现大量讨论指向 **USAP(Unspecialized App Process)**:
- [frida/frida#2516](f2dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6X3M7X3W2V1j5g2)9J5c8X3k6J5K9h3c8S2i4K6u0r3K9i4y4K6N6h3g2K6i4K6u0r3x3U0f1I4y4R3`.`.)
- 多个 Android 10+ 设备报告此问题
验证设备状态:
adb shell "getprop | grep usap"
输出:
[dalvik.vm.usap_pool_enabled]: [false]
[persist.sys.dynamic_usap_enabled]: [true]
[persist.sys.usap_pool_enabled]: [true]
**确认 USAP 已启用,这就是根因。**
---
## 什么是 USAP?
USAP(Unspecialized App Process)是 Android 10 引入的进程预 fork 机制,用于加速 app 启动。
### 传统模式(zygote fork)
App 启动请求
↓
ActivityManager 发送请求到 zygote
↓
zygote fork 出新进程
↓
新进程加载 app 代码
### USAP 模式(预 fork 池)
系统启动时预 fork 多个进程到池中
↓
App 启动请求
↓
ActivityManager 直接从池中取一个进程
↓
跳过 zygote fork 步骤,加速启动
### Frida spawn 的工作原理
frida spawn 请求
↓
frida 监控 zygote fork 事件
↓
等待 zygote fork 出新进程
↓
自动 attach 到新进程
**冲突点:** USAP 绕过了 zygote fork,Frida 收不到信号,超时。
---
## 解决方案
### 临时方案(重启失效)
# 关闭 USAP
adb shell "su -c 'setprop persist.sys.usap_pool_enabled false'"
adb shell "su -c 'setprop persist.sys.dynamic_usap_enabled false'"
adb shell "su -c 'setprop persist.device_config.runtime_native.usap_pool_enabled false'"
# 重启 frida-server
adb shell "su -c 'pkill -9 fs64'"
adb shell "su -c '/data/local/tmp/fs64 -D'"
验证:
adb shell "getprop | grep usap"
# 应该全部显示 false
### 永久方案(推荐)
写入 KernelSU/Magisk 的开机启动脚本:
#### KernelSU
adb shell "su -c 'cat > /data/adb/service.d/disable_usap.sh'" << 'EOFX'
#!/system/bin/sh
# 关闭 USAP 进程池,修复 Frida spawn 超时问题
setprop persist.sys.usap_pool_enabled false
setprop persist.sys.dynamic_usap_enabled false
setprop persist.device_config.runtime_native.usap_pool_enabled false
EOFX
adb shell "su -c 'chmod +x /data/adb/service.d/disable_usap.sh'"
#### Magisk
adb shell "su -c 'cat > /data/adb/post-fs-data.d/disable_usap.sh'" << 'EOFX'
#!/system/bin/sh
setprop persist.sys.usap_pool_enabled false
setprop persist.sys.dynamic_usap_enabled false
setprop persist.device_config.runtime_native.usap_pool_enabled false
EOFX
adb shell "su -c 'chmod +x /data/adb/post-fs-data.d/disable_usap.sh'"
---
## 验证修复
重启后检查:
所有 USAP 相关属性应为 `false`。
测试 spawn:
import frida
device = frida.get_usb_device()
pid = device.spawn('com.example.app')
print(f'Spawn successful, PID={pid}')或使用命令行:
frida -U -f com.example.app --no-pause
---
## 常见问题
### Q1: 关闭 USAP 会影响性能吗?
**A:** 轻微影响。USAP 的主要作用是加速 app 启动(跳过 zygote fork),关闭后启动速度可能慢 50-100ms,日常使用几乎无感知。对于逆向分析场景,这点性能损失完全可以接受。
### Q2: 为什么 attach 模式不受影响?
**A:** attach 模式(`frida -U -p <PID>`)是直接注入已运行的进程,不涉及进程创建,所以不依赖 zygote fork 事件。
### Q3: 还有其他可能导致 spawn 失败的原因吗?
**A:** 是的,包括但不限于:
- **SELinux Enforcing 模式**:阻止 ptrace 注入
- **厂商安全模块**:如小米 systemhelper、华为 TrustSpace
- **App 内置反调试**:检测 frida 后主动退出
- **Root 权限配置**:Magisk/KernelSU 的超级用户访问权限设置
---
## 完整排查清单
遇到 Frida spawn 超时时,按顺序检查:
1. **确认 USAP 状态**
adb shell "getprop | grep usap"
2. **检查 SELinux**
adb shell "getenforce"
# 应为 Permissive
3. **测试 attach 模式**
adb shell am start -n <package>/<activity>
sleep 3
frida -U -p <PID>
4. **查看 logcat 崩溃信息**
adb logcat -v time | grep -E "frida|panic|reboot|fatal|kill"
5. **检查 Root 框架配置**
- Magisk:超级用户 → 超级用户访问权限
- KernelSU:查看 `/data/adb/ksu/.allowlist`
---
## 参考资料
- [Frida GitHub Issue #2516](d3fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6X3M7X3W2V1j5g2)9J5c8X3k6J5K9h3c8S2i4K6u0r3K9i4y4K6N6h3g2K6i4K6u0r3x3U0f1I4y4R3`.`.)
- [Android USAP 机制分析](3f7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6L8%4g2J5j5$3g2Q4x3X3g2S2L8X3c8J5L8$3W2V1i4K6u0W2j5$3!0E0i4K6u0r3k6r3!0U0M7#2)9J5c8X3y4G2M7X3g2Q4x3V1k6J5N6h3&6@1K9h3#2W2i4K6u0r3N6i4y4S2M7l9`.`.)
- [Frida 官方文档 - Spawning](c08K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6X3M7X3W2V1j5g2)9J5k6i4u0W2i4K6u0r3k6r3!0U0M7#2)9J5c8Y4y4H3j5i4N6F1K9h3&6Y4i4K6u0r3)
---
**标签:** Frida, Android逆向, USAP, spawn超时, KernelSU, Magisk
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
最后于 2026-7-29 20:48
被mb_cylxfmot编辑
,原因: 修改排版