Android 源码分析Wifi密码保存位置

828 阅读1分钟

首先查看 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模拟器, 不同安卓版本可能不同 。