mlab-sh/apex

GitHub: mlab-sh/apex

APEX 是一款 Rust 编写的 Android/iOS 安装包静态安全分析工具,通过 15 个分析器自动检测安全风险并输出加权评分报告。

Stars: 2 | Forks: 0

# APEX (Rust)

APEX

针对 Android/iOS 安装包(`.apk`, `.aab`, `.xapk`, `.ipa`)的静态分析 解压安装包,运行 15 个分析器,并以加权评分的形式报告安全发现。 ## 安装 ### Homebrew (macOS & Linux) ``` brew tap mlab-sh/apex https://github.com/mlab-sh/apex.git brew install apex ``` ### 预编译二进制文件 从 [最新发布版本](https://github.com/mlab-sh/apex/releases/latest) 下载适合你平台的压缩包 —— 支持 macOS (x86_64, arm64) 和 Linux (x86_64, arm64) —— 然后执行: ``` tar -xzf apex-*-.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, 可视化界面, 目录枚举, 移动安全, 网络流量审计, 通知系统, 错误基检测, 静态代码分析