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, 云安全监控, 云资产可视化, 云资产清单, 威胁情报, 开发者工具, 目录枚举, 移动安全, 逆向工具, 逆向工程, 静态分析