我正在尝试从非root的Android设备中以程序方式获取WiFi密码。
我只需要能够读取密码,不需要能够编辑它们。
我可以在清单文件中获取权限吗?
/system/priv-app
中,例如使用SuperUser),那么您可以在Lollipop及更高版本中使用新的WifiManager#getPrivilegedConfiguredNetworks()
API。wpa_supplicant
守护程序管理,并存储在像/data/misc/wifi/wpa_supplicant.conf
这样的配置文件中。在此文件中,您将找到存储记住的网络的network
结构,如下所示:network={
ssid="example"
key_mgmt=WPA-PSK
psk="passphrase"
}
这个文件通常归属于像wifi
或者root
这样的系统用户。因此,如果想要直接读取它,你必须是root
用户。
然而,你可以使用wpa_cli
命令获取已经连接过的网络的ssid
或其他网络变量:
$ wpa_cli get_network <id> ssid
"example"
但是如果你使用psk
,你会得到一个*
,因为这是一种安全风险:
$ wpa_cli get_network <id> psk
*
这是不可能的,因为这将会是一个重大的安全风险。
如果手机已经被root过,你可能可以这样做,但我不确定。即使你能够找到它在手机上存储的位置,我希望并相信它也会被加密。
对于未使用系统密钥签名的APK,没有API支持读取/写入WiFi密码。因此,您将无法检索它。