首先查看 com.android.server.wifi 包下的代码类,根据名字大概定位到 WifiConfigStore这个类。
我们先看源码中对WifiConfigStore这个类的解释:
- This class provides the API's to save/load/modify network configurations from a persistent
- store. Uses keystore for certificate/key management operations.
- NOTE: This class should only be used from WifiConfigManager and is not thread-safe!
此类提供API以从持久性保存/加载/修改网络配置商店。 使用密钥库进行证书/密钥管理操作。 注意:此类只能在WifiConfigManager中使用,并且不是线程安全的! 一般WifiConfigManager中才会调用WifiConfigStore的方法,比如要加载已保存过的网络时,要迁移保存过的网络数据时,都会调用WifiConfigStore的方法。
下面我们来看WifiConfigStore:主要看存储热点信息的文件的创建。
public static StoreFile createSharedFile() {
return createFile(Environment.getDataMiscDirectory());
}
public static File getDataMiscDirectory() {
return new File(getDataDirectory(), "misc");
}
private static final File DIR_ANDROID_DATA = getDirectory(ENV_ANDROID_DATA, "/data");
public static File getDataDirectory() {
return DIR_ANDROID_DATA;
}
private static final String STORE_FILE_NAME = "WifiConfigStore.xml";
private static final String STORE_DIRECTORY_NAME = "wifi";
通过追踪上述代码 , 得知 wifi秘密保存在 /data/misc/wifi/WifiConfigStore.xml 里面 。
访问/data目录 需要root。
adb shell之后 。 cat /data/misc/wifi/WifiConfigStore.xml 确实能发现wifi信息。
此处使用的是Android 13模拟器, 不同安卓版本可能不同 。