所有文章 → 文章详情

旧版安卓系统获取 Wi-Fi 密码

安卓10以后皆可直接扫描二维码共享Wi-Fi密码,那我们如何从一些老设备上偷到获取已存储的密码呢?

本教程内提供的方法在原生安卓6和安卓7上测试均可使用,在安卓13(澎湃1.0.3.0)上测试无效,其余系统版本请自行测试。

准备

首先,请确保安卓设备已经打开了 USB 调试并能成功连接 ADB,使用adb devices来检查连接状态。

虽然没有明确测试过,但这里建议将安卓设备的 Wi-Fi 功能保持开启。

获取备份数据

使用adb backup备份系统的所有应用数据并存储到sys_backup文件中:

adb backup -all -f sys_backup

执行上述命令会在安卓端跳出一个页面,询问备份密码,可以将密码留空继续则为不加密备份文件。

备份完成后,安卓端会自动关闭备份页面,备份文件会存储在电脑上当前运行目录下或指定的路径。

我注意到在运行adb backup时提示该功能已被遗弃,有可能在将来的 adb 版本中被移除,贴一下我这里使用的版本以备不时之需:

Android Debug Bridge version 1.0.41
Version 35.0.1-11580240

解析备份文件

导出后的备份文件无法直接打开,需要通过 Android backup extractor 工具解析后才能正常读取。从release中下载abe.jar后使用方法如下:

java -jar abe.jar unpack <input> <output.tar> [password]

例如,解析名为sys_backup且无密码加密的备份文件,并输出到output.tar

java -jar abe.jar unpack sys_backup output.tar

获取密码

解压解析出来的 tar 文件,在解压出来的apps文件夹下找到com.android.providers.settings/d_f/flattened-data文件,使用任意文本编辑器打开即可看到安卓设备上所有已存储的Wi-Fi信息,例如:

network={
    ssid="test"
    scan_ssid=1
    psk="66666666"
    key_mgmt=WPA-PSK
    auth_alg=OPEN
    frequency=2462
    disabled=1
    id_str="%7B%22creatorUid%22%3A%221000%22%2C%22configKey%22%3A%22%5C%22test%5C%22WPA_PSK%22%7D"
}

此处ssid即为网络名称,psk则为对应网络的密码,key_mgmt为该网络使用的认证方式,scan_ssid=1代表这是隐藏网络,非隐藏网络则没有这一条。