我正在尝试以编程方式从无根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"
}
此文件通常由系统用户拥有,如wifi
或root
。所以如果你想直接阅读它,你必须root
。
不过,您可以使用wpa_cli
命令获取 remember 网络的ssid
或其他网络变量:
$ wpa_cli get_network <id> ssid
"example"
但是,如果您尝试使用psk
,您将获得*
,因为这是一种安全风险:
$ wpa_cli get_network <id> psk
*
对于未使用系统密钥签名的 APK,没有用于读取/写入 WiFi 密码的 API 支持。因此,您将无法检索它。