首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
AI 助力安全
发新帖
2
1
[原创]ksufrida 调试环境搭建与踩坑记录(小白学习记录,大佬轻喷)
发表于: 2026-8-16 11:57
272
[原创]ksufrida 调试环境搭建与踩坑记录(小白学习记录,大佬轻喷)
尤瑟努
2026-8-16 11:57
272
# ksufrida 调试环境搭建与踩坑记录(小白学习记录,大佬轻喷) > 目标 App: `com.aiyu.kaipanla`(爱加密加固壳 + VMP) > 设备: Realme RMX3850 / Android 16 (API 36) / KernelSU > 最终结论: **Frida 17 完整调试能力已打通(Java 桥 + Native + 页面获取)** --- ## 一、核心突破:Frida 17 的 Java 桥架构变更 ### 1. 现象 通过 ksufrida/rusda/florida 等所有方式 attach 后,脚本里 `typeof Java` 恒为 `undefined`, `Java.perform()` 直接报 `ReferenceError: 'Java' is not defined`。 ### 2. 排查过程(排除了多个错误方向) | 排查方向 | 结论 | | ------------------------ | ------------------------------------------------------------ | | gadget 被裁剪? | ❌ 官方/rusda/ksufrida gadget 与官方版仅 545 字节字符串混淆差异,非裁剪 | | PC 端 frida 版本不匹配? | ❌ 17.9.1/17.15/17.17 全试过,都无 Java | | 目标进程无 JVM? | ❌ `JNI_GetCreatedJavaVMs` 返回 JavaVM,ART 就绪 | | 加固壳干扰? | ❌ 连 `com.android.launcher` 等无加固应用也 `Java=undefined` | | frida-core 缺 Java 桥? | ❌ `_frida.pyd` 118MB,大小正常(字符串被压缩找不到) | ### 3. 真正根因(官方文档确认) **Frida 17.0.0 起,Java/ObjC/Swift 桥不再随 GumJS 运行时捆绑。**(deepseek知识库可能还没更新,导致一直没发现) 用户必须**显式引入** `frida-java-bridge` 并编译进脚本: ```bash # 1. 创建 agent 项目 frida-create -t agent # 2. 安装依赖和 Java 桥 npm install npm install frida-java-bridge # 3. 脚本里显式 import ``` ```typescript // agent/index.ts import Java from "frida-java-bridge"; ``` ```bash # 4. 编译成 bundle frida-compile agent/index.ts -o _agent.js -c ``` 加载编译后的 `_agent.js`(而不是直接写 JS),Java 桥即生效。 ### 4. 验证(目标 App 实际运行) ``` [+] Java bridge OK, pid=15564 [+] Java.perform running [+] ActivityThread = android.app.ActivityThread@f3e90be [CURRENT] com.yzj.kaipanh.newindex.ui.main.MainActivity [INTENT] Intent { ... cmp=com.aiyu.kaipanla/com.yzj.kaipanh.newindex.ui.main.MainActivity } ``` **Frida 17 完整能力清单(全部验证通过)**: - Java.perform / Java.use / 方法 hook / 字段访问 / 对象创建 / Java.choose - Native Interceptor hook - 内存操作 / 模块枚举 - 获取当前 Activity(ActivityThread.mActivities 反射) --- ## 二、ksufrida 连接与端口 ### 1. 实际端口 - ksufrida Gadget 监听 `0.0.0.0:62333`(默认是 27042,配置里可改动) - PC 端连接需先建 adb forward: ```bash adb forward tcp:62333 tcp:62333 ``` ### 2. 连接方式 ```python import frida d = frida.get_device_manager().add_remote_device("127.0.0.1:62333") s = d.attach("Gadget") # 虚拟进程名固定为 "Gadget" ``` ### 3. 注入前置条件 - ksufrida 模块在 KernelSU 中启用(`/data/adb/modules/ksufrida/disable` 不存在) - Zygisk Next 正常工作(`module.prop` 描述显示 `✅zygote`) - 目标 App 进程由 zygote fork 后 ksufrida 注入 - 端口 62333 出现才说明注入成功 --- ## 三、踩过的坑(重要!) ### 坑 1:child_gating `inject` 模式导致点击卡死闪退 **现象**:App 每次点击就卡死,`Input dispatching timed out` ANR。 **根因**:`child_gating.mode: "inject"` 在子进程里 `inject_lib()` → `dlopen` gadget, 与主线程的 dlopen 竞争 **linker 全局锁**。gadget 构造器在 poll 等待时不释放锁, 主线程任何 dlopen(如触摸事件触发的 `libinput.so`)永久阻塞 → ANR。 **ANR trace 关键帧**: ``` 主线程: dlopen_ext -> MutexLockWithTimeout (等锁) 另一线程: __dl_do_dlopen -> call_constructors -> libsecmon.so -> poll (持锁不释放) ``` **解决**:`config.json` 里 `child_gating.enabled: false`。 ```json "child_gating": { "enabled": false, "mode": "freeze", "injected_libraries": [] } ``` ### 坑 2:Zygisk Next 崩溃自动停止 **现象**:重启后 ksufrida 不注入(62333 无监听)。 **根因**:`module.prop` 描述显示 `[❌ Stop zygisk due to crash`——Zygisk Next 检测到 zygote 崩溃后自动禁用 zygisk 功能。 **解决**:重启手机(让 zygote 重新 fork,Zygisk Next 重新加载模块并恢复)。 ### 坑 3:LSPosed 与 ksufrida 冲突 **现象**:启用 ksufrida 后 LSPosed 模块不注入(主进程 maps 无 lspd)。 **根因**:`child_gating` 的 kill 模式会杀 fork 出的子进程(含 LSPosed companion)。 **解决**:关闭 child_gating 后两者可共存(但通常只启用其一,避免 Zygisk 负担)。 ### 坑 4:`sub_5E1B0` 内核 hook 能挡检测但 frida attach 超时 **现象**:用 `xiaojianbang_hook` 对 `libexec.so+0x5E1B0` 设 `--replace-ret 0`, 进程存活了,但 frida attach 报 `TimedOutError`。 **根因**:HWBP(perf 硬件断点)与 frida 的 ptrace STOP 冲突。 **结论**:该路径不可行,最终靠 ksufrida Zygisk 注入解决。 ### 坑 5:rusda/florida attach 已运行进程会被壳 SIGKILL **现象**:`attach` 报 `ProcessNotFoundError` / `target terminated with signal 9`。 **根因**:爱加密壳检测 attach 事件(TracerPid / ptrace)后自杀。 **spawn 模式**:能 attach 成功存活数秒,但 agent 无 Java 桥(回到坑 Frida17 架构)。 **结论**:传统 frida-server 路径(rusda/florida)不适合此壳,用 ksufrida 即可。 ### 坑 6:Windows PowerShell 批量改文件导致中文乱码 **现象**:用 `Set-Content -Encoding UTF8` 批量替换 package 名后, java 源码中文注释变乱码,编译报非法字符。 **根因**:PowerShell 5.1 的 UTF8 编码与 UTF-8 无 BOM 兼容问题。 **解决**:从备份恢复源码,用 Python 写文件(`open(..., encoding='utf-8')`)。 ### 坑 7:I 级日志不进 logcat **现象**:`HookLog.i()` 的日志在 logcat 里看不到。 **根因**:logcat 缓冲/优先级过滤,I 级日志被丢弃。 **解决**:HookLog 同时写文件 `/sdcard/Android/data/com.aiyu.kaipanla/files/kpl_hook.log`, 页面追踪日志都从文件读。 --- ## 四、最终工作架构 ``` KernelSU ├─ Zygisk Next (✅ 正常) │ └─ ksufrida (启用, child_gating 关闭) │ └─ libsecmon.so (frida-gadget 17.17.0, 监听 0.0.0.0:62333) └─ KPatch-Next + xiaojianbang-stealth-hook.kpm (内核 KPM, 可选辅助) PC 端 └─ frida 17.9.1/17.17.0 + frida-java-bridge bundle └─ adb forward 62333 -> attach("Gadget") -> Java 桥全可用 ``` ### 关键文件 | 文件 | 用途 | | ------------------------------------ | ---------------------------------------- | | `frida-java-bridge/agent/index.ts` | Java 桥 agent 源码 | | `frida-java-bridge/_agent.js` | 编译后的 bundle(加载它才有 Java) | | `run_frida.py` | 连接 ksufrida 并加载 Java 桥 bundle | | `run_java_bridge.py` | 同上(更通用,可指定端口/脚本) | | `/data/local/tmp/libsec/config.json` | ksufrida 配置(child_gating 必须 false) | --- ## 五、复现步骤速查 ```bash # 1. 确认 Zygisk 正常 adb shell "cat /data/adb/modules/zygisksu/module.prop | grep description" # 期望: [✅zygote, ...] # 2. 确认 ksufrida 启用 adb shell "ls /data/adb/modules/ksufrida/disable" # 无输出 = 已启用 # 3. 启动 App, 确认注入 adb shell "am start -n com.aiyu.kaipanla/com.yzj.kaipanh.newindex.ui.main.MainActivity" adb shell "ss -tln | grep 62333" # 有监听 = 注入成功 # 4. 端口转发 + 连接 adb forward tcp:62333 tcp:62333 python run_frida.py # 加载 Java 桥 bundle ``` --- ## 六、附录:为什么不能直接写 JS 而要用 TS + frida-compile Frida 17 的脚本运行时(QuickJS)**不内置 `require`**(`require is not defined`)。 `import Java from "frida-java-bridge"` 必须由 **frida-compile(bundle 打包器)** 在编译期把 Java 桥代码内联进 `_agent.js`。所以: - 不能用纯 JS 直接写 `Java.perform` - 必须用 TS + `npm install frida-java-bridge` + `frida-compile` 编译 (注:`frida-tools` 自带的 `frida` REPL 和 `frida-trace` 内置三个桥, 可直接 `frida -l script.js`,但 Python API 的 `create_script` 需要预编译 bundle。) **ksufrida**:<a href="elink@910K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6Y4L8%4u0C8k6h3#2Y4N6h3&6Q4x3V1k6C8M7%4g2Q4x3X3c8X3M7X3W2V1j5b7`.`.">ksufrida仓库链接</a> --- 小白一枚,第一次发帖,这次工程花了不少时间,也多亏有AI相助,虽然踩了不少坑但也学习了不少。
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
收藏
・
2
点赞
・
1
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
mb_wpitiize
谢谢你的细致分析,受益匪浅!
2026-8-20 11:59
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
1
)
Imxz
雪 币:
112
活跃值:
(9435)
能力值:
( LV2,RANK:10 )
在线值:
发帖
6
回帖
754
粉丝
9
关注
私信
Imxz
2
楼
kkb
2026-8-16 16:21
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
尤瑟努
2
发帖
7
回帖
0
RANK
关注
私信
他的文章
[原创]ksufrida 调试环境搭建与踩坑记录(小白学习记录,大佬轻喷)
272
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部