Somchandra17/TrashDroid
GitHub: Somchandra17/TrashDroid
一款集成 drozer、adb 等工具的 Android 应用动态安全测试框架,通过九阶段自动化检测生成适配 AI 分析的完整报告。
Stars: 1 | Forks: 0
```
██████ ▄▄▄▄ ▄▄▄ ▄▄▄▄ ▄▄ ▄▄ ████▄ ▄▄▄▄ ▄▄▄ ▄▄ ▄▄▄▄
██ ██▄█▄ ██▀██ ███▄▄ ██▄██ ██ ██ ██▄█▄ ██▀██ ██ ██▀██
██ ██ ██ ██▀██ ▄▄██▀ ██ ██ ████▀ ██ ██ ▀███▀ ██ ████▀
```
**自动化 Android DAST 框架**
## [](https://python.org)
[](Dockerfile)
[](LICENSE)
[](https://github.com/Somchandra17/TrashDroid)
## 什么是 TrashDroid?
TrashDroid 是一个基于终端的自动化框架,用于 Android 应用程序的 **动态应用安全测试 (DAST)**。它编排 `adb`、`drozer`、`scrcpy`、`apktool` 和 `sqlite3` 来运行完整的 **9 个阶段安全评估** —— 在每次测试后截取屏幕截图,并在最后生成一份适配 AI 的 Markdown 报告。
## 功能特性
| 功能 | 详情 |
|---|---|
| **Drozer 组件测试** | 导出的 Activity、Service、Receiver、Content Provider、SQL 注入及路径遍历 |
| **文件系统分析** | Shared prefs、SQLite、Realm/NoSQL、缓存、WebView 存储、针对密钥的正则扫描 |
| **深度转储验证** | 逐表 SQLite 查询、XML 解析、二进制字符串提取 |
| **Logcat 监控** | 实时捕获,扫描泄露的凭据、明文 HTTP、SQL、堆栈跟踪 |
| **内存分析** | Heap dump、`/proc/pid/maps`、字符串扫描、打开的文件描述符、网络连接 |
| **备份分析** | ADB 备份提取 + 敏感数据 grep |
| **Manifest 分析** | `debuggable`、`allowBackup`、`usesCleartextTraffic`、导出组件、危险权限 |
| **注销后测试** | 注销后重新启动 Activity,通过 intent extras 进行权限提升 |
| **自动截图** | 每次测试后通过 `adb screencap` 捕获,可选 `scrcpy` 实时镜像 |
| **适配 AI 的报告** | 带有 AI 提示头的 Markdown 报告,包含发现、截图和完整命令日志 |
## 快速开始
```
# 克隆
git clone https://github.com/Somchandra17/TrashDroid.git
cd TrashDroid
# ── Docker (推荐) ──
docker build -t trashdroid .
adb start-server
docker run -it --network host -v "$(pwd)/output:/app/output" trashdroid
# ── 或原生安装 ──
pip install -r requirements.txt
python main.py
```
## Docker 指南
### 为什么使用 Docker?
零依赖烦恼。该镜像附带 **adb、drozer、apktool、sqlite3、strings 和 Java 17** —— 全部预配置好。你只需要 Docker 和一根 USB 线。
### 容器如何看到我的手机?
```
Phone ──USB──▶ Host (adb server :5037) ◀──network host── Docker container
```
你的手机保持连接在 **宿主机** 上。宿主机在端口 `5037` 上运行 ADB 服务器。容器使用 `--network host` 共享宿主机的网络协议栈,因此它与同一个 ADB 服务器通信 —— 无需 USB 直通。
### 1. 构建镜像
```
git clone https://github.com/Somchandra17/TrashDroid.git
cd TrashDroid
docker build -t trashdroid .
```
### 2. 在宿主机上启动 ADB
确保 ADB 服务器正在运行且你的手机已连接:
```
adb start-server
adb devices # verify your phone shows up
```
### 3. 运行 TrashDroid
**交互模式**(提示输入设备、包名、阶段):
```
docker run -it --network host \
-v "$(pwd)/output:/app/output" \
trashdroid
```
**全自动模式**(无提示,自动跳过 scrcpy):
```
docker run -it --network host \
-v "$(pwd)/output:/app/output" \
trashdroid --auto --device
--package --apk /app/target.apk
```
**仅运行特定阶段:**
```
docker run -it --network host \
-v "$(pwd)/output:/app/output" \
trashdroid --phases 1,8,9 --auto --device --package
```
### 4. 从宿主机挂载 APK
如果 APK 位于你的宿主机上,将其绑定挂载到容器中:
```
docker run -it --network host \
-v "$(pwd)/output:/app/output" \
-v "/home/user/targets/app.apk:/app/target.apk" \
trashdroid --apk /app/target.apk --package com.example.app
```
### 5. 获取结果
输出被写入容器内的 `/app/output` —— 得益于 `-v` 标志,这会映射到宿主机上的 `./output`。运行完成后:
```
ls output//
# DAST_Report_*.md screenshots/ filesystem/ apktool_out/ ...
```
### 替代方案:USB 直通
如果 `--network host` 不适合你(例如 macOS/Windows 上的 Docker Desktop),请直接传递 USB 设备:
```
docker run -it --privileged \
-v /dev/bus/usb:/dev/bus/usb \
-v "$(pwd)/output:/app/output" \
trashdroid
```
这赋予容器直接的 USB 访问权限,以便它运行自己的 ADB 服务器。需要 `--privileged`。
### Docker 速查表
| 你想要什么 | 命令 |
|---|---|
| 构建镜像 | `docker build -t trashdroid .` |
| 交互运行 | `docker run -it --network host -v "$(pwd)/output:/app/output" trashdroid` |
| 自动运行 | `docker run -it --network host -v "$(pwd)/output:/app/output" trashdroid --auto --device SERIAL --package PKG` |
| 挂载 APK | 添加 `-v "/path/to/app.apk:/app/target.apk"` 和 `--apk /app/target.apk` |
| 特定阶段 | 添加 `--phases 1,3,8` |
| USB 直通 | 将 `--network host` 替换为 `--privileged -v /dev/bus/usb:/dev/bus/usb` |
| 进入容器 Shell | `docker run -it --network host --entrypoint bash trashdroid` |
| 重建(无缓存) | `docker build --no-cache -t trashdroid .` |
## 原生安装
```
git clone https://github.com/Somchandra17/TrashDroid.git
cd TrashDroid
pip install -r requirements.txt
python main.py
# 或全自动
python main.py --auto --device --package --apk /path/to/app.apk
```
## 先决条件
### 宿主机
| 工具 | 用途 | 必需 |
|---|---|---|
| `adb` | 设备通信 | 是 |
| `drozer` | 组件漏洞利用 | 是 |
| `scrcpy` | 实时设备镜像 | 是 |
| `apktool` | APK 反编译 | 是 |
| `sqlite3` | 数据库分析 | 可选 |
| `strings` | 二进制字符串提取 | 可选 |
| `aapt2` | 包名自动检测 | 可选 |
| Python 3.10+ | 运行时 | 是 |
### 目标设备
- **已 Root** 的 Android 设备(Magisk 或类似工具)
- 已启用 USB 调试
- 已安装 [Drozer Agent](https://github.com/WithSecureLabs/drozer-agent/releases) 并开启内置服务器
## 用法
### 交互模式
```
python main.py
```
提示输入设备、APK 路径、权限、登录状态及各阶段选项。
### 非交互 / 自动模式
```
python main.py \
--auto \
--device \
--package \
--apk /path/to/app.apk
```
### 选择性阶段
```
# 仅 Drozer + Manifest + Post-logout
python main.py --phases 1,8,9
# 仅 File system + Logcat
python main.py --phases 3,5 --package com.example.app --device SERIAL --auto
```
### CLI 参考
| 参数 | 描述 |
|---|---|
| `--auto` | 使用默认回答的非交互模式 |
| `--device SERIAL` | 来自 `adb devices` 的设备序列号 |
| `--package PKG` | 目标包名 |
| `--apk PATH` | APK 文件路径(如果已预安装则省略) |
| `--phases 1,3,5` | 要运行的逗号分隔阶段编号 |
| `--skip-preflight` | 跳过工具可用性检查 |
| `--report-mode` | `client`(默认)或 `internal`(包含 AI 提示) |
## 测试阶段
```
Phase 1 ─── Drozer Component Testing
Phase 3 ─── Local File System Analysis
Phase 4 ─── Dump File Verification
Phase 5 ─── Logcat Monitoring
Phase 6 ─── Memory Analysis
Phase 7 ─── ADB Backup Analysis
Phase 8 ─── Manifest Analysis
Phase 9 ─── Post-Logout Access Control
```
## 输出结构
```
output//
├── DAST_Report__.md # Final report
├── screenshots/ # PNGs from every test
├── filesystem/
│ ├── shared_prefs/ # XML preference files
│ ├── databases/ # SQLite databases
│ ├── files/ # Internal files
│ ├── cache/ # Cache
│ ├── app_webview/ # WebView storage
│ └── external/ # External storage
├── logcat_dump.txt # Full logcat
├── logcat_app_filtered.txt # App-specific logs
├── heap_dump.hprof # Java heap dump
├── proc_maps.txt # /proc/pid/maps
├── backup.ab # Raw ADB backup
├── backup_unpacked/ # Extracted backup
├── apktool_out/ # Decompiled APK
└── grep_results.txt # Sensitive data matches
```
## 报告
生成的 `.md` 报告包含:
1. **AI 提示头** - 将报告直接输入 GPT-4 / Claude 以进行风险评级、执行摘要和 Jira 工单生成
2. **执行摘要** - 包名、设备信息、日期、严重程度细分
3. **详细发现** - 按阶段划分的部分,包含严重程度、状态和完整详情
4. **截图** - 内联 Markdown 图片引用
5. **命令日志** - 包含每个命令及其输出的可折叠部分
6. **风险摘要表** - 所有发现的平面表格
## 架构
```
TrashDroid/
├── main.py # Entry point & phase orchestrator
├── requirements.txt # Python dependencies
├── core/
│ ├── config.py # Global state, patterns, flags
│ ├── adb.py # ADB command wrapper
│ ├── drozer.py # Drozer wrapper (non-interactive)
│ ├── screenshot.py # Screenshot capture + scrcpy
│ └── report.py # Markdown report generator
├── phases/
│ ├── preflight.py # Tool & device checks
│ ├── setup.py # Device selection, APK install
│ ├── drozer_testing.py # Phase 1 - Drozer tests
│ ├── filesystem.py # Phase 3 - File system analysis
│ ├── dump_verify.py # Phase 4 - Deep dump verification
│ ├── logcat.py # Phase 5 - Logcat monitoring
│ ├── memory.py # Phase 6 - Memory analysis
│ ├── backup.py # Phase 7 - Backup analysis
│ ├── manifest.py # Phase 8 - Manifest analysis
│ └── post_logout.py # Phase 9 - Post-logout tests
└── output/ # Generated per run (gitignored)
```
## 故障排除
ADB 无法检测到 Android 设备
- 确保设备上已启用 USB 调试
- 运行 `adb devices` 并确认设备显示为 `device`(而非 `unauthorized`)
Drozer 阶段返回空结果
- 打开 Drozer Agent 应用并启用内置服务器
- 验证:`adb forward tcp:31415 tcp:31415 && drozer console connect -c "list"`
ADB 备份超时
- 在设备上收到提示时点击“备份我的数据”
- 在 `--auto` 模式下,如果无人值守可能会失败 - 记录为信息
找不到 apktool
- 从 [apktool.org](https://ibotpeaches.github.io/Apktool/install/) 安装
- 使用 `apktool --version` 验证
文件系统拉取返回为空
- 设备必须已 root - 使用 `adb shell su -c id` 验证
- Android 13+ 的每应用 SELinux 上下文甚至可能阻止 root 拉取
Heap dump 为空(0 字节)
- 应用必须正在运行且位于前台
- 不可调试的应用在某些设备上可能会生成空转储
Docker: "no devices/emulators found"
- 确保在启动容器**之前**在**宿主机**上运行 ADB 服务器:`adb start-server`
- 确认手机在宿主机上显示:`adb devices`
- 确保在运行容器时使用 `--network host`
- 如果在 macOS/Windows Docker Desktop 上,`--network host` 不起作用 —— 改用 USB 直通:`--privileged -v /dev/bus/usb:/dev/bus/usb`
Docker: 输出文件夹为空或权限被拒绝
- 确保挂载了输出卷:`-v "$(pwd)/output:/app/output"`
- 如果权限被拒绝,宿主机目录可能归其他用户所有 —— 运行 `sudo chown -R $USER:$USER output/`
## 许可证
本项目基于 **MIT 许可证** 授权 - 详见 [LICENSE](LICENSE) 文件。
## 免责声明
**由 [0xs0m](somm.tf) 构建**
*如果 TrashDroid 帮助你发现了 Bug,请考虑给仓库点个 Star。*
标签:ADB, Android 安全, Apktool, APK 逆向分析, DAST, Drozer, HTTP工具, JARM, JS文件枚举, Linux 安全工具, Logcat 监控, Python 安全工具, SQL 注入检测, VAPT, 内存分析, 动态应用安全测试, 安全报告生成, 对称加密, 恶意软件分析, 数据泄露, 渗透测试框架, 目录枚举, 移动安全, 移动应用渗透, 自动化审计, 请求拦截, 逆向工具, 防御