关于 workers-app-tester
Workers App Tester 是用于在已 root 设备上测试 Android 应用安全性的技能,涵盖 UI 操作、网络流量拦截、APK 静态分析和 Frida 运行时分析。
主要功能
- 01通过 ADB 操作应用 UI
- 02捕获并检查网络流量
- 03分析端点与安全问题
- 04反编译 APK 进行静态分析
- 05使用 Frida 进行运行时分析
适用场景
- 01测试 Android 应用的身份验证流程
- 02检查 API 流量中的信息暴露问题
- 03审查 APK 组件和内置密钥
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ workersio/ skills --skill workers-app-tester安装后在 Claude Code 中输入/workers-app-tester确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/frida.mdtesting-methodology.mdreferences/agents/reverse-agent.mdscripts/analyze.pybypass.jscapture.pytraffic.pyui.py详细介绍
Workers App Tester
通过已 root 的设备对 Android 应用进行渗透测试。操控设备界面、拦截网络流量,并使用 Frida 进行运行时分析。
如需详细指南,请按需加载:
- references/testing-methodology.md — IDOR、身份验证、信息暴露、本地存储、深层链接、导出组件、日志记录
- references/frida.md — SSL 绕过、root 绕过、CodeShare 脚本、Hook 模式、自定义证书
- agents/reverse-agent.md — APK 反编译子 Agent,读取代码库以查找端点、密钥和组件
会话设置
1. 选择目标
adb shell pm list packages -3
adb shell dumpsys activity activities | grep -m 1 -E 'topResumedActivity=|ResumedActivity:|mFocusedApp='
2. 创建会话目录
SESSION_DIR=/tmp/workers-app-tester-$(date +%Y%m%d-%H%M%S)
mkdir -p "$SESSION_DIR"
3. 启动流量拦截
设置 PRESERVE_AUTH=1,这样会完整记录身份验证标头,而不会对其进行脱敏。
adb shell settings put global http_proxy 10.0.2.2:8080
ANDROID_APP_TESTER_OUT_DIR="$SESSION_DIR" \
ANDROID_APP_TESTER_PACKAGE="<package>" \
ANDROID_APP_TESTER_PRESERVE_AUTH=1 \
nohup mitmdump --set block_global=false --listen-host 0.0.0.0 --listen-port 8080 \
-s scripts/capture.py >"$SESSION_DIR/mitmdump.log" 2>&1 &
echo $! >"$SESSION_DIR/mitmdump.pid"
对于实体设备,请将 10.0.2.2 替换为主机 IP。
4. 启动应用
adb shell am force-stop <package> || true
adb shell monkey -p <package> -c android.intent.category.LAUNCHER 1
5. 如果没有 HTTPS 流量
该应用使用 SSL 绑定。请参阅 references/frida.md — 启动 frida-server,然后使用 bypass.js 启动应用。
静态分析
将包名和会话目录提供给 reverse-agent。它将:
- 从设备拉取 APK
- 使用 apktool 反编译(清单、smali、资源)
- 搜索硬编码密钥、API 端点和安全反模式
- 阅读值得关注的文件以获取更多上下文
返回结果:导出组件、深层链接方案、API 端点、硬编码密钥、安全问题。
利用这些发现,在 The Loop 中进行有针对性的测试。
The Loop
1. 观察
python3 scripts/ui.py
返回交互元素的精简编号列表:
[1] "Sign In" btn @ (540,1200) bounds=[380,1150][700,1250] clickable
[2] "Email" input @ (540,400) bounds=[100,350][980,450] focusable
2. 操作
每个周期执行一个操作。点击元素 [1]:
adb shell input tap 540 1200
对于文本字段,先点击再输入:
adb shell input tap 540 400
adb shell input text "[email protected]"
3. 拦截
python3 scripts/traffic.py --input "$SESSION_DIR/traffic.jsonl" --since-seconds 15 --limit 10
包含标头和正文:
python3 scripts/traffic.py --input "$SESSION_DIR/traffic.jsonl" --since-seconds 15 --show-headers --show-body
4. 决定下一步并重复
安全分析
完成应用的主要流程后,运行分析器:
python3 scripts/analyze.py --input "$SESSION_DIR/traffic.jsonl" --mode full
单项模式:endpoints、idor、auth、exposure、headers。
有关如何处理每项发现,请参阅 references/testing-methodology.md。
ADB 参考
| 操作 | 命令 |
|---|---|
| 点击 | adb shell input tap <x> <y> |
| 输入文本 | adb shell input text "hello%sworld"(%s = 空格) |
| 向下滚动 | adb shell input swipe 540 1500 540 500 300 |
| 向上滚动 | adb shell input swipe 540 500 540 1500 300 |
| 返回 | adb shell input keyevent KEYCODE_BACK |
| 主屏幕 | adb shell input keyevent KEYCODE_HOME |
| 回车 | adb shell input keyevent KEYCODE_ENTER |
| 长按 | adb shell input swipe <x> <y> <x> <y> 1000 |
| 启动应用 | adb shell monkey -p <pkg> -c android.intent.category.LAUNCHER 1 |
| 强制停止 | adb shell am force-stop <pkg> |
会话清理
kill "$(cat "$SESSION_DIR/mitmdump.pid")" 2>/dev/null || true
adb shell settings delete global http_proxy
adb shell "su -c 'pkill frida-server'" 2>/dev/null || true
规则
- 每个周期执行一个 UI 操作。先观察、操作、拦截,然后决定下一步。
- 操作前务必运行
ui.py,确保坐标与当前屏幕一致。 - 完成后务必清理会话。代理设置会在重启后保留。
- 记录发现:端点、漏洞类型、复现步骤、证据。
- 绝不在任何命令中使用
sleep。不要使用sleep 1、sleep 2或sleep && command。直接运行命令。ui.py会自行处理时序。必要时使用&&串联命令。 - 提高效率。操作之间不要有不必要的延迟。
内置脚本
| 脚本 | 用途 |
|---|---|
scripts/ui.py | 智能 UI 解析器。筛选交互元素,并进行空间去重。 |
scripts/capture.py | mitmproxy 插件。将日志写入 JSONL。设置 PRESERVE_AUTH=1 可保留身份验证标头。 |
scripts/traffic.py | 流量查看器。支持 --since-seconds、--show-headers、--show-body。 |
scripts/analyze.py | 安全分析器。模式:endpoints、idor、auth、exposure、headers、full。 |
scripts/bypass.js | SSL 固定绕过。TrustManagerImpl、OkHttp3、SSLContext、Conscrypt。 |
评论
支持 Markdown