mlab-sh/apex
GitHub: mlab-sh/apex
APEX 是一款 Rust 编写的 Android/iOS 安装包静态安全分析工具,通过 15 个分析器自动检测安全风险并输出加权评分报告。
Stars: 2 | Forks: 0
# APEX (Rust)
.tar.gz && sudo mv apex-*/apex /usr/local/bin/
```
### 从源码构建
```
cargo build --release # binary at target/release/apex
```
需要 Rust 工具链和 C 编译器(libusb 已被内置并为 ADB 功能进行了静态
链接,因此二进制文件是独立完整的)。
## 用法
```
apex scan path/to/app.apk # formatted terminal report (default)
apex scan path/to/app.apk --json # also print JSON and write _report.json
apex scan path/to/app.apk --json -o report.json
apex scan path/to/app.apk --fail-on high # exit 1 if any finding >= high (CI/CD)
apex --version
```
Flags:
- `--show` — 格式化的终端输出(未指定其他输出 flag 时默认启用)。
- `--json` — 输出 JSON 报告(并写入文件)。
- `-o, --output ` — JSON 输出路径(默认为 `_report.json`)。
- `--detail` — 在每项发现下打印 proof/evidence(描述 + metadata)。
- `--fail-on ` — 当存在该严重级别或更高级别的发现时,为 CI 返回非零退出码。
## 通过 USB 扫描手机 (ADB)
以 USB 调试模式连接 Android 手机(授权 RSA 提示),然后执行:
```
apex device list # list installed third-party (non-system) apps
apex device scan # pull + scan every third-party app
apex device scan --package com.foo.bar # scan a single package
apex device scan --json -o reports/ # write _report.json per app
apex device scan --detail --fail-on high
```
使用 `adb_client` 的 `ADBUSBDevice` 进行直接 USB 连接(无需 `adb`
server)。`pm list packages -3` 会枚举非系统安装包,
`pm path` 会解析每个基础 APK,将其提取到临时目录,并运行与
`apex scan` 相同的分析器。选项包括:用于自定义 ADB
私钥的 `--adb-key `(默认为 `~/.android/adbkey`),以及 `--json`/`-o`/`--detail`/`--fail-on`。
## 分析器
`manifest`, `certificate`, `network`, `sast`, `api`, `permissions`, `binary`
(ELF checksec), `secrets` (+ entropy), `jar_aar`, `dataflow`, `cloud`,
`privacy`, `binary_advanced`, `platform`, `supply_chain`。
二进制 manifest 通过 `axmldecoder` 解码,原生库通过
`goblin` 解析,而 APK 签名 / X.509 证书则使用 RustCrypto `cms` /
`x509-cert` 技术栈处理。输出(findings、安全评分、JSON schema)与
Python 参考实现保持一致。
## 面向所有平台的发布 / 构建
预编译二进制文件由 `Release` GitHub Actions workflow
([.github/workflows/release.yml](.github/workflows/release.yml)) 生成,需手动
触发(`workflow_dispatch`)。它会:
1. 运行 `cargo test` 作为检查门槛,
2. 针对 **macOS (x86_64, arm64)** 和 **Linux (x86_64, arm64)** 构建一个 matrix,
3. 将每一个打包为 `apex--.tar.gz`(包含二进制文件 + LICENSE + README),
4. 计算 sha256,重新生成 [`Formula/apex.rb`](Formula/apex.rb) 并提交,
最后发布包含这些压缩包的 GitHub Release。
要在本地构建/打包(模拟 CI 环境):
```
scripts/build-release.sh # host target
scripts/build-release.sh --all # all four release targets (needs toolchains)
```
libusb 会从内置的 C 源码进行编译并静态链接,因此
生成的二进制文件没有外部的 libusb/udev 依赖。
标签:ADB, Android, DSL, iOS, LNA, Rust, 可视化界面, 目录枚举, 移动安全, 网络流量审计, 通知系统, 错误基检测, 静态代码分析