在当今数字化时代,移动应用安全的重要性不容忽视。根据相关报告,2024 年全球移动应用安全事件频发,许多漏洞源于硬编码的敏感数据。APKLeaks 是一个开源工具,专为扫描 APK 文件而设计。它能够高效地识别出隐藏在 APK 中的 URI、端点和秘密信息,帮助开发者、安全研究者和渗透测试人员在应用发布前发现潜在风险。APKLeaks 通过自动化扫描方式,简化了手动审计的过程,节省时间并提高准确率。
https://github.com/dwisiswant0/apkleaks

项目概述
APKLeaks 的全称是“APK Leaks Scanner”,其核心目的是通过反编译 APK 文件来检测潜在的泄露信息。它依赖于 jadx(一个流行的 Android DEX 和 APK 反编译器)来处理 APK 的解码和分析。jadx 能够将 APK 中的 DEX 文件转换为可读的 Java 代码,从而允许 APKLeaks 在这些代码中搜索匹配的模式。
APKLeaks 的设计理念是“简单高效”。它不依赖复杂的图形界面,而是通过命令行操作实现快速扫描。这使得它特别适合集成到 CI/CD 管道中,例如在 Jenkins 或 GitHub Actions 中自动化运行。相比其他类似工具,如 AndroBugs 或 MobSF,APKLeaks 更专注于秘密泄露检测,而非全面漏洞扫描,因此在特定场景下更轻量级和针对性强。
在实际应用中,APKLeaks 可用于多种场景:开发者在打包 APK 前自查;安全审计师对第三方应用进行逆向工程;甚至在 CTF(Capture The Flag)竞赛中快速提取信息。其输出结果清晰,便于后续分析和修复。通过这个工具,用户可以避免常见的错误,如在代码中直接嵌入 AWS 密钥或数据库凭证,从而降低被黑客利用的风险。
功能特点
APKLeaks 的核心功能是扫描 APK 文件中的敏感信息。它使用正则表达式模式匹配来识别潜在泄露。默认模式覆盖了常见秘密类型,包括:
- AWS 访问密钥(如 AKIA 开头的 ID)。
- Google API 密钥。
- 数据库连接字符串。
- URI 和端点(如 HTTP/HTTPS 链接)。
- 加密密钥或其他硬编码凭证。
用户可以自定义模式,通过 JSON 文件扩展规则,这大大提高了工具的灵活性。例如,如果你的应用使用特定格式的密钥,你可以轻松添加新规则。
另一个关键特点是集成 jadx 反编译器。如果系统中未安装 jadx,APKLeaks 会自动提示下载,确保无缝运行。扫描过程包括三个步骤:解压 APK、反编译 DEX 文件、模式匹配搜索。整个过程自动化,用户只需提供 APK 文件路径。
APKLeaks 支持多种输出格式:文本(默认)和 JSON。这便于与其他工具集成,例如将 JSON 输出导入到报告生成器中。此外,它允许传递参数给 jadx,例如启用代码混淆反转(deobfuscation)或调整日志级别,帮助调试复杂 APK。
在性能方面,APKLeaks 针对大型 APK 优化了内存使用,避免了常见反编译工具的崩溃问题。它还支持 Docker 部署,便于在隔离环境中运行,适合企业级使用。总体而言,这些特点使 APKLeaks 成为一个平衡了易用性和强大性的工具。
相比竞争工具,APKLeaks 的优势在于专注性和开源性。它不包含多余的功能模块,扫描速度快(通常几分钟内完成一个中等大小的 APK)。然而,它也存在局限:仅限于静态分析,无法检测运行时动态生成的秘密;对高度混淆的 APK 可能漏报。这些可以通过结合动态分析工具来弥补。
安装方法
安装 APKLeaks 非常简单,支持多种方式。根据你的环境,选择最适合的即可。用户提到可以使用 uv tool 安装,这是一种高效的 Python 包管理器,由 Astral 开发,类似于 pip 但更快且支持并行下载。下面详细介绍各种安装路径。
使用 uv tool 安装
uv 是现代 Python 生态中的热门工具,它可以快速安装包而无需额外配置。如果你已安装 uv(通过 pip install uv 或从官网下载),只需运行一条命令:
uv tool install apkleaks
这会自动下载并安装 APKLeaks 及其依赖。uv 的优势在于速度快(可达 pip 的 10 倍)和自动处理虚拟环境。如果你首次使用 uv,它会创建独立的工具目录,避免全局污染。安装后,你可以直接在命令行运行 apkleaks。

使用 pip 安装(推荐初学者)
从 PyPI(Python Package Index)安装是最常见方式。确保你的系统有 Python 3.6+ 和 pip:
pip3 install apkleaks
安装过程会自动拉取依赖,包括 requests 和 tqdm 等库。如果遇到权限问题,可添加 --user 参数或使用虚拟环境(virtualenv)。安装完成后,运行 apkleaks --version 验证。
从源代码安装
如果你想自定义或贡献代码,可以从 GitHub 克隆仓库:
git clone https://github.com/dwisiswant0/apkleaks
cd apkleaks
pip3 install -r requirements.txt
这允许你修改源文件,例如调整默认模式。源代码安装适合开发者,需要手动管理更新。
使用 Docker 安装
对于容器化环境,Docker 是理想选择:
docker pull dwisiswant0/apkleaks:latest
运行时需挂载卷,例如:
docker run -it --rm -v /path/to/local:/tmp dwisiswant0/apkleaks:latest -f /tmp/your.apk
Docker 版本隔离依赖,适合 CI/CD 或多平台部署。
无论哪种方式,安装后如果缺少 jadx,工具会提示下载(从 GitHub skylot/jadx 仓库)。整个安装通常不超过 5 分钟。注意:Windows 用户可能需安装 Java Runtime Environment (JRE),因为 jadx 依赖 Java。
使用方法
APKLeaks 的使用以命令行为主,简单直观。基本命令格式为:
apkleaks [选项] -f <APK 文件路径>
基本扫描
假设你有一个 APK 文件 app.apk,运行:
apkleaks -f ~/Downloads/app.apk

工具会自动反编译并扫描,输出结果到控制台或随机生成的文件。如果想指定输出文件:
apkleaks -f app.apk -o results.txt
结果文件中会列出每个匹配项,包括名称、匹配字符串和来源文件路径。

高级选项
-
自定义模式:创建 JSON 文件
custom.json:{ "Custom Key": "MYKEY-[0-9A-Z]{10}" }然后运行:
apkleaks -f app.apk -p custom.json -o output.json --json这会使用自定义规则并输出 JSON 格式,便于解析。
-
传递 jadx 参数:对于混淆 APK:
apkleaks -f app.apk -a "--deobf --log-level DEBUG"这启用反混淆并显示详细日志。
-
Docker 使用示例:如上所述,挂载本地目录扫描。
在实际案例中,假设你审计一个电商 APK:扫描后发现硬编码的支付 API 密钥,你可以立即通知开发者替换为环境变量。输出 JSON 格式示例:
{
"results": [
{
"name": "AWS Key",
"match": "AKIA...",
"file": "classes.dex"
}
]
}
注意事项
扫描前确保 APK 未加密;大型 APK 可能需更多内存。输出文件默认在当前目录,避免覆盖重要文件。如果遇到错误,如 jadx 下载失败,手动安装 jadx 并设置 PATH。
原文 https://blog.csdn.net/2301_79518550/article/details/153117281