如何通过纯净 ADB 从 Android 设备中提取隐藏数据和遥测信息
当我拿到一台存在间歇性 bug 或可疑行为的测试设备时,标准的 Android Studio Logcat 窗口往往不够用。我希望快速获取系统快照:绑定了哪些账户、手机重启了多少次、后台服务在运行什么、电池消耗情况如何。
大多数人在这种情况下会立即寻求 root 权限或下载重型 GUI 工具。实际上,标准的 Android Debug Bridge(ADB)可以在不借助第三方软件的情况下输出大量数据。开发者 Douglas Fresh Habian 的 AndroidForensics 项目将这些命令整理成一份完整的参考指南和两个现成的 Bash 脚本。
仓库里有什么
本质上,这个仓库是一份速查表和自动化脚本集,用于 Android 设备的取证和深度诊断。该项目专注于在未 root 设备上工作,尽管某些底层命令在工程版本上会揭示更多信息。
仓库包含两个主要的可执行文件:
extract.sh— 主要的分类和用户数据收集脚本。它提取系统属性、网络配置、已安装软件包列表、运行中的服务,并尝试读取内容提供器。dumpsys.sh— 系统遥测信息收集器。该脚本通过dumpsys工具查询二十多个内部 Android 子系统,并将日志整理成独立的文本文件。
每次运行都会创建一个带时间戳的独立文件夹,每个单独命令的结果都整齐地存储在其中。这消除了终端混乱,并有助于立即捕获特定时间点的系统状态。
值得加入武器库的有用命令
README 包含了基本的 getprop 调用,以及通过 grep、sed 和 awk 进行输出解析的非显而易见的一行命令。
收集账户和电子邮件地址数据
通过账户管理器,你可以快速了解手机绑定了哪些服务,并收集所有已注册的电子邮件地址:
adb shell dumpsys account | grep -i com.*$ -o | cut -d' ' -f1 | cut -d} -f1 | grep -v com$
对于搜索电子邮件地址,作者建议直接在系统转储上使用正则表达式:
adb shell dumpsys | grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b"
当你需要快速检查之前的测试人员是否忘记在共享测试台上退出工作账户时,这个命令非常有用。
重启计数器和系统时间线
有时一个 bug 只在冷启动后复现,但用户声称手机从未关机。你可以通过全局设置验证这一点:
adb shell settings list global | grep "boot_count=" | cut -d= -f2 | head -n 1 | xargs echo "Booted:" | sed 's/$/ times/g'
如果你需要了解资源消耗和应用活动随时间的整体情况,统计命令可以派上用场:
adb shell dumpsys usagestats
adb shell dumpsys batterystats
adb shell settings list system
访问内容提供器
为了提取联系人、通话记录和消息,脚本直接查询系统 URI:
# Список контактов и номеров телефонов
adb shell content query --uri content://contacts/phones/ --projection display_name:number
# Журнал звонков
adb shell content query --uri content://call_log/calls
# База входящих и исходящих SMS
adb shell content query --uri content://sms/
这里有一个重要的技术限制。从 Android 11 开始,Google 大大收紧了安全模型。在较新的操作系统版本上,如果没有特殊权限或 root,直接通过 ADB 查询 content://sms/ 或联系人会导致访问错误。然而,在较旧的测试设备(Android 9-10)或自定义开发版本上,这些命令仍然可靠地工作。
自动化是如何工作的
如果手动运行命令变得繁琐,脚本可以自动处理常规操作。开始使用时,只需克隆仓库并授予执行权限:
git clone https://github.com/DouglasFreshHabian/AndroidForensics.git
cd AndroidForensics
chmod +x extract.sh dumpsys.sh
当 ./extract.sh 启动时,脚本首先检查是否安装了 adb,ping 已连接的设备,然后开始收集数据。
在运行过程中,extract.sh 执行多个并行任务:
- 创建一个名为
ADB_Report_20251025_163200的目录。 - 查询设备属性(
ro.product.model、ro.build.version.release、ro.serialno)。 - 通过
adb logcat -d获取系统日志最后几行的快照。 - 在后台开始生成完整报告
adb bugreport,而不阻塞终端。 - 完成后,输出一个带颜色的摘要表,显示所有已保存文件的大小。
第二个脚本 dumpsys.sh 专门专注于诊断系统服务。它依次查询 meminfo、wifi、power、location、sensorservice、netstats 以及另外 15 个服务,将每个输出保存到 wifi.txt、meminfo.txt 等文件中。如果某个服务不可用,脚本会将其标记为已崩溃并继续运行。
在实践中这会在哪里派上用场
该项目有几个明显的应用领域:
- QA 和移动应用测试。
dumpsys.sh脚本帮助在几秒钟内收集完整的设备状态上下文,以便提交关于内存泄漏或功耗的复杂 bug 报告。 - 交接前的设备审计。 如果一批测试设备在团队中流转,快速运行清理和验证脚本以确保智能手机上没有其他人的账户或繁重的后台进程会很有用。
- 初始事件分类。 安全专家获得了一种快速捕获智能手机状态转储的方法,无需安装可疑的 APK,也无需对文件系统进行不必要的更改。
AndroidForensics 并没有试图重新发明轮子或取代像 Autopsy 这样的完整取证工具包。仓库的优势在于别处——它将标准的 Android 命令行工具打包成可读的格式,并节省了手动编写 bash 管道的时间。
如果你经常将 Android 智能手机连接到电脑进行调试、测试或安全分析,请将这些脚本添加到你的本地工具包中。它们在几秒钟内启动,通常能发现你在快速浏览 GUI 时遗漏的东西。
相关项目