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

如何在Android中以编程方式读取wifi密码,android,wifi,manifest,Android,Wifi,Manifest,我正在尝试通过编程方式从非根安卓设备获取WiFi密码 所有我需要的是能够读取密码,我不需要能够编辑它们 我可以在清单文件中获得权限吗?这是不可能的,因为这将是一个重大的安全风险 如果手机是根目录的话,你也许可以这样做,但我不知道,我会想象,并且希望,即使你能找到它存储在手机上的地方,它也会被加密 没有API支持读取/写入未使用系统密钥签名的APK的WiFi密码。因此,您将无法检索它。大多数情况下,Wi-Fi凭据由守护进程管理,守护进程将其存储在配置文件中,如/data/misc/wifi/wpa

我正在尝试通过编程方式从非根安卓设备获取WiFi密码

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


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

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


如果手机是根目录的话,你也许可以这样做,但我不知道,我会想象,并且希望,即使你能找到它存储在手机上的地方,它也会被加密

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

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

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

network={
    ssid="example"
    key_mgmt=WPA-PSK
    psk="passphrase"
}
此文件通常由系统用户(如
wifi
root
)拥有。因此,如果您想直接阅读,您必须是
root

但是,您可以使用
wpa_cli
命令获取记住网络的
ssid
或其他网络变量:

$ wpa_cli get_network <id> ssid
"example"

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


请参阅:

我可以获取连接的wifi网络的密码吗?不,这同样是一个安全风险,如果您已连接,您可能知道密码Google Chromecast(现在的Home)可以读取当前的wifi密码并将其提供给Chromecast…Home有必要的特权这样做,这是不公平的,但这是谷歌;)我可以获取已连接wifi网络的密码吗?已连接wifi网络的密码存储在您的手机中。但您需要根访问权限才能读取此文件。此文件在最新的android(kitkat)中没有此类信息。如何在kitkat中做到这一点?这个问题的答案声称适用于早期版本的Android,但不适用于较新版本:我想知道谷歌家庭应用程序在安装chromecast/家庭设备时是否就是这样做的。这真的让入职员工变得更加圆滑。
$ wpa_cli get_network <id> psk
*