如何在安卓中以编程方式读取 wifi 密码



我正在尝试以编程方式从无根Android设备获取WiFi密码。

我所需要的只是能够读取密码,我不需要能够编辑它们。

我可以在清单文件中获得权限吗?

如果您的应用程序是特权应用程序(即 - 安装在/system/priv-app中,例如使用超级用户),那么您可以在Lollipop和更新版本中使用新的WifiManager#getPrivilegedConfiguredNetworks()API。

请参阅: https://android.googlesource.com/platform/frameworks/base/+/758bdf4a915c313f1c3bef0b95b494c91f363f03%5E%21/#F1

这是不可能的,因为这将是一个重大的安全风险。

如果手机是扎根的,你也许可以,但我不知道,我会想象,并希望,即使你能到达它存储在手机上的位置,它也会被加密。

大多数情况下,Wi-Fi 凭据由wpa_supplicant守护程序管理,该守护程序将其存储在配置文件中,如/data/misc/wifi/wpa_supplicant.conf.

在此文件中,您将找到存储已记住的网络的network结构,如下所示:

network={
ssid="example"
key_mgmt=WPA-PSK
psk="passphrase"
}

此文件通常由系统用户拥有,如wifiroot。所以如果你想直接阅读它,你必须root

不过,您可以使用wpa_cli命令获取 remember 网络的ssid或其他网络变量:

$ wpa_cli get_network <id> ssid
"example"

但是,如果您尝试使用psk,您将获得*,因为这是一种安全风险:

$ wpa_cli get_network <id> psk
*

对于未使用系统密钥签名的 APK,没有用于读取/写入 WiFi 密码的 API 支持。因此,您将无法检索它。

最新更新