mcpField
W
workers-app-tester

workers-app-tester

github.com/workersio安全208112 次安装23 周前更新
代码仓库

关于 workers-app-tester

Workers App Tester 是用于在已 root 设备上测试 Android 应用安全性的技能,涵盖 UI 操作、网络流量拦截、APK 静态分析和 Frida 运行时分析。

主要功能

  1. 01通过 ADB 操作应用 UI
  2. 02捕获并检查网络流量
  3. 03分析端点与安全问题
  4. 04反编译 APK 进行静态分析
  5. 05使用 Frida 进行运行时分析

适用场景

  1. 01测试 Android 应用的身份验证流程
  2. 02检查 API 流量中的信息暴露问题
  3. 03审查 APK 组件和内置密钥

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/workersio/skills --skill workers-app-tester

安装后在 Claude Code 中输入/workers-app-tester确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
frida.md
testing-methodology.md
references/agents/
reverse-agent.md
scripts/
analyze.py
bypass.js
capture.py
traffic.py
ui.py

详细介绍

Workers App Tester

通过已 root 的设备对 Android 应用进行渗透测试。操控设备界面、拦截网络流量,并使用 Frida 进行运行时分析。

如需详细指南,请按需加载:

会话设置

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。它将:

  1. 从设备拉取 APK
  2. 使用 apktool 反编译(清单、smali、资源)
  3. 搜索硬编码密钥、API 端点和安全反模式
  4. 阅读值得关注的文件以获取更多上下文

返回结果:导出组件、深层链接方案、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.pymitmproxy 插件。将日志写入 JSONL。设置 PRESERVE_AUTH=1 可保留身份验证标头。
scripts/traffic.py流量查看器。支持 --since-seconds、--show-headers、--show-body。
scripts/analyze.py安全分析器。模式:endpoints、idor、auth、exposure、headers、full。
scripts/bypass.jsSSL 固定绕过。TrustManagerImpl、OkHttp3、SSLContext、Conscrypt。

评论

支持 Markdown