gpamarthy/apktriage
GitHub: gpamarthy/apktriage
一个纯静态的 Android APK 逆向工程与恶意软件分类 CLI 工具,整合了多个成熟分析工具实现自动化检测、YARA 生成与 ATT&CK 映射。
Stars: 0 | Forks: 0
# apktriage
静态 APK 逆向工程与分类工具包。只需将其指向一个 `.apk`,它就会
解包并反编译应用,深入分析原生的 ARM `.so` 库,
标记加壳器/混淆器,从
DEX 和原生代码中提取硬编码的机密信息以及 C2/加密指标,**自动生成 YARA 特征码**用于其发现,
并根据 **MITRE ATT&CK Mobile** 对所有内容进行标记。
它是**纯静态的**:样本仅被解析和反编译,从不被安装或
执行,且核心 pipeline 不进行任何网络调用。
## 为什么选择这些工具
该工具包编排了经过验证的标准 Android 分类分析栈,而不是
重新发明轮子:
| 阶段 | 工具 | 作用 |
|---|---|---|
| 加载 + DEX | [androguard](https://github.com/androguard/androguard) | 纯 Python 的 APK/DEX/manifest 解析器,带有交叉引用 |
| Smali / Java | [apktool](https://apktool.org/), [Jadx](https://github.com/skylot/jadx) | 可选的源码转储(自动检测) |
| Packers | [APKiD](https://github.com/rednaga/APKiD) | “Android 的 PEiD”:加壳器/混淆器/编译器识别 |
| Native | [LIEF](https://lief.re/) | 对 `.so` 库进行 ELF 解析 |
| 特征码 | [yara-python](https://github.com/VirusTotal/yara-python) | 经过编译验证的规则生成 |
这反映了 [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
构建静态分析的方式,但它是作为一个小型、易读的 CLI 运行,而不是一个服务器。
## Pipeline
`pipeline.run()` 按顺序运行记录在案的 Android 静态分析方法论:
1. 使用 androguard **加载** APK;可选地转储 smali (apktool) 和 Java (Jadx)。
2. **DEX 分析** - 危险权限及其组合、导出组件、
可疑 API 和动态代码加载,均通过 androguard xrefs 完成。
3. **Native** - 使用 LIEF 解析每个 `lib//*.so`;标记 `ptrace`/`system`/
`dlopen` 导入;扫描原生字符串。
4. **Packers** - APKiD 判定(加壳器 / 混淆器 / 反调试 / 编译器)。
5. **机密信息** - 经过精心筛选的凭证正则表达式,带有熵门控。
6. **指标** - URL、IPv4、base64 数据块、加密特征(C2 候选)。
7. **YARA** - 根据最强证据合成并编译特征码。
8. **ATT&CK** - 将权限/API/发现映射到 ATT&CK Mobile 技术 ID。
## 安装
```
make install # uv venv (python 3.12) + pip install -e ".[all]"
# 可选的外部 decompilers(更丰富的 smali/Java dumps):
sudo apt-get install -y apktool jadx
```
该工具包仅依靠 androguard 即可工作;apktool/jadx/APKiD 会被自动检测并在
存在时使用,在不存在时则会优雅地跳过。
## 用法
```
apktriage scan app.apk # rich terminal report
apktriage scan app.apk -f json # JSON to stdout
apktriage scan app.apk -o /tmp/out # choose output dir
```
每次运行都会将 `report.json`、`report.md` 和生成的 `.yar` 写入
输出目录(默认为 `.out`)。
## 开发
```
make lint # ruff check + format check
make typecheck # mypy --strict
make test # offline pytest (unit + e2e on the committed fixture)
make corpus # opt-in: fetch real APKs and validate against them (network)
```
请参阅 `tests/fixtures/README.md` 了解确定性良性测试 APK 是如何
构建的(通过 apktool 从已提交的 smali 构建,并植入了一个虚假的机密和 C2 URL)。
### 真实 APK 验证
`make test` 是完全离线且确定性的。`make corpus` 额外
下载一组固定的**真实**应用 - 包括来自 F-Droid 的良性应用以及来自
`ashishb/android-malware` 的真实恶意软件 - 并针对它们运行该工具包,以
证明检测机制能在真正的威胁上触发,并且解析器能够处理混乱、
恶意的输入。每个样本都在其独立的子进程中扫描(模拟生产环境,
隔离原生库崩溃),并由 SHA-256 固定。样本已被隔离并
从不提交。有关安全详细信息,请参阅 `tests/corpus/README.md`。
## 不在范围内
动态分析 / Frida、VirusTotal 或任何网络富化,以及 ML
分类被有意排除在外,以保持工具的小巧和离线可用。
它们是自然的扩展功能。
标签:Android, DSL, YARA, 云安全监控, 云资产可视化, 云资产清单, 威胁情报, 开发者工具, 目录枚举, 移动安全, 逆向工具, 逆向工程, 静态分析