一个用于自动化 APK 文件信息收集过程的工具。
Slicer 接收一个已解压 APK 文件的路径,然后返回所有被导出、权限为 null 且可以被外部调用的 activity、receiver 和 service。
注意:APK 必须通过 jadx 或 apktool 解压。
为什么?
我大约三周前(2020 年 6 月)开始做漏洞赏金,并一直尽力研究 Android 应用。但我注意到一个现象:所有应用都有一些前置工作需要先完成,才能深入挖掘。于是我想,如果能用一个简单的工具来自动化这个过程就好了。
为什么不用 drozer?
嗯,drozer 是另一种不同的工具。虽然它确实能找出所有可访问的组件,但我厌倦了一遍又一遍地运行那些命令。
为什么不用 drozer 来自动化?
我其实写过一个 bash 脚本来执行某些 drozer 命令,这样就不用手动运行了,但总有一些枯燥的工作依然要做。比如检查 strings.xml 中的各种 API 密钥,测试 Firebase 数据库是否可公开访问,或者那些 Google API 密钥是否设置了使用上限,以及许多其他事情。
为什么不搜索所有文件?
我认为像 grep 或 ripgrep 这样的工具在搜索所有文件时会快得多。所以,如果你有特定的内容需要搜索,用那些工具会更好。但如果你觉得有一些东西应该在所有 Android 文件中都检查一下,欢迎提出 issue。
检查 APK 是否将 android:allowbackup 设置为 true
检查 APK 是否将 android:debuggable 设置为 true
返回所有被导出且权限设置为 null 的 activity、service 和 broadcast receiver。判断依据有两点:
android:exported=true 已设置,且没有设置权限。Intent-filter,如果是,则意味着该组件默认是被导出的(这是 Android 文档中的规则)。通过测试 .json 技巧检查 APK 的 Firebase 网址。
myapp.firebaseio.com,则会检查 https://myapp.firebaseio.com/.json 是否返回内容或返回权限拒绝。检查 Google API 密钥是否可公开访问。
返回 strings.xml 和 AndroidManifest.xml 中存在的其他 API 密钥。
git clone https://github.com/mzfr/slicer
cd slicerpython3 slicer.py -h使用方法非常简单。可用选项如下:
从 APK 的 Manifest 和 strings 中提取信息
用法:
slicer [选项] [已解压 APK 目录]
选项:
-d, --dir jadx 输出目录的路径
-o, --output 输出文件名(尚未实现)
我尚未实现 output 标志,因为我认为如果你能将 slicer 的输出重定向到一个 yaml 文件,其格式会更合适。
python3 slicer.py -d path/to/extract/apk -c config.json
用于提取 URL 和路径的 extractor 模块取自 apkurlgrep,作者 @ndelphit。
此工具中实现的所有功能都是我在过去几周学到的内容。如果你认为还有其他应该在 APK 中检查的内容,请为此功能提出 issue,我很乐意实现它 :)
如果你愿意,可以请我喝杯咖啡:
列出 /res/raw 和 res/xml 目录中的所有文件名。
提取所有 URL 和路径。