从Android中的请求者配置文件中提取SSID密码

时间:2014-03-31 09:57:26

标签: android android-wifi wifimanager wificonfiguration

我正在尝试编写一个Android SYSTEM应用程序,它从请求者配置文件(/data/misc/wifi/wpa_supplicant.conf)中提取Wifi密码。

使用具有root权限的adb,我可以毫无问题地阅读该文件,并以纯文本格式查看密码。

但是,当我尝试以编程方式打开文件时,我收到EACCES(Permission denied)错误。即使我的应用程序以“系统”用户身份运行(我在清单中定义了android:sharedUserId =“android.uid.system”),该应用程序也会使用系统私钥进行签名并推送到/ system / app。

我知道它可以使用系统权限来完成,因为在Android的源代码中,在frameworks / base / wifi / java / android / net / wifi / WifiConfigStore.java中有一个代码可以读取此文件。此代码在'system_server'进程下运行,该进程使用'system'用户,就像我的应用程序一样。

我的代码打开失败的文件:

reader = new BufferedReader(new FileReader(SUPPLICANT_CONFIG_FILE));

如果两个应用程序都使用'system'用户运行并具有系统权限,那么system_server如何读取此文件并且我的应用程序失败?我错过了什么?

请不要建议依赖root访问权限的解决方案,因为它与我的情况无关。我需要一个仅基于系统权限的解决方案,而不是root。

1 个答案:

答案 0 :(得分:2)

您需要平台签名,在清单部分添加android:sharedUserId =“android.uid.system”属性,并在应用程序部分添加android:process =“system”属性。