这是一个基于 FlowDroid 和 Jadx 的自动化 APK 安全分析工具。它能够对 APK 进行静态污点分析,检测潜在的数据泄露路径,并生成包含真实源代码上下文的详细安全报告。
- 自动化反编译:集成 Jadx 工具,自动将 APK 反编译为 Java 源代码,为代码审计提供基础。
- 静态污点分析:利用 FlowDroid 强大的静态分析引擎,扫描 APK 中从敏感数据源(Source)到潜在泄露点(Sink)的传播路径。
- 智能源代码提取:
- 解析 FlowDroid 生成的 XML 分析结果。
- 根据污点传播路径,智能提取涉及的所有关键方法的真实源代码(不仅仅是 Sink 点)。
- 自动过滤系统类(如
android.*,java.*),专注于应用自身的业务逻辑代码。
- 详细报告生成:生成 Markdown 格式的安全分析报告,包含:
- 漏洞摘要(Source/Sink 类型)。
- 完整的污点传播路径。
- 涉及方法的完整源代码片段,并标注漏洞行号。
- 报告文件自动添加时间戳,防止覆盖。
.
├── analyze_apk.py # 主程序脚本
├── parse_result.py # 结果解析与源码提取模块
├── SourcesAndSinks.txt # FlowDroid 分析所需的源和汇定义文件
├── Tools/ # 工具依赖目录
│ ├── android.jar # Android SDK 核心库(用于 FlowDroid 分析)
│ ├── jadx-1.5.3-all.jar # Jadx 反编译工具(Github不允许上传100Mb以上文件,请手动下载:https://github.com/skylot/jadx/releases)
│ └── soot-infoflow-cmd-2.13.0-jar-with-dependencies.jar # FlowDroid 命令行工具
└── sootOutput/ # 分析结果输出目录
- Python: 3.x
- Java: JDK 8 或更高版本(运行 FlowDroid 和 Jadx 需要)
- Python 库:
lxml: 用于解析 XML 报告。javalang: 用于解析 Java 源代码 AST,精准提取方法代码。
安装 Python 依赖:
pip install lxml javalang- 初始化:脚本首先检查必要的工具(Jadx, FlowDroid, android.jar)是否存在。为了确保 FlowDroid 能够正确找到 Android 平台库,脚本会自动创建一个临时的
platforms/android-34目录并将android.jar复制进去。 - 反编译:使用
java -jar Tools/jadx.jar命令将目标 APK 反编译到临时源码目录。 - 污点分析:调用
java -jar Tools/soot-infoflow-cmd.jar对 APK 进行分析,生成 XML 格式的中间结果。 - 结果处理:
parse_result.py读取 XML 结果。- 遍历每一个检测到的数据流路径。
- 对于路径中的每一个方法节点,在反编译的源码目录中查找对应的 Java 文件。
- 使用
javalang解析 Java 文件,提取该方法的完整源代码。
- 报告输出:最终生成
security_analysis_report_YYYYMMDD_HHMMSS.md文件。
- 将待分析的 APK 文件准备好。
- 修改
analyze_apk.py文件,设置APK_PATH变量指向你的 APK 文件路径:# analyze_apk.py APK_PATH = r"d:\LLM\FlowDroidSkill\ovaa.apk" # 修改为你的 APK 路径
- 运行分析脚本:
python analyze_apk.py
- 查看结果:
分析完成后,进入
sootOutput目录查看生成的 Markdown 报告。
- 内存消耗:FlowDroid 分析大型 APK 可能需要较大的内存,请确保机器有足够的可用内存。脚本默认配置了
-Xmx8g(在analyze_apk.py中)。 - 分析时间:根据 APK 的复杂度和大小,分析过程可能持续几分钟到几十分钟。
- 临时文件:反编译的源码和临时平台目录会在脚本执行结束后自动清理(部分清理逻辑在操作系统层面可能有所差异,建议定期检查临时文件夹)。