当前位置:   article > 正文

【Android安全】SharedPreferences_android sharedpreferences存放位置

android sharedpreferences存放位置

1 SharedPreferences介绍

参考:https://www.jianshu.com/p/65bf04dc7b18

Sharedpreferences是Android平台上一个轻量级的存储类,用来保存应用程序的各种配置信息,每个Sharedpreferences对象,本质上对应一个以“键-值”对的方式保存数据的xml文件。

Android 五种主要的数据存储方式:

  1. SharedPreferences:以Map形式存放简单的配置参数;
  2. ContentProvider:将应用的私有数据提供给其他应用使用;
  3. 文件存储:以IO流形式存放,可分为手机内部和手机外部(sd卡等)存储,可存放较大数据;
  4. SQLite:轻量级、跨平台数据库,将所有数据都是存放在手机上的单一文件内,占用内存小;
  5. 网络存储:数据存储在服务器上,通过连接网络获取数据;

2 SharedPreferences用法

参考:https://www.jianshu.com/p/65bf04dc7b18

读写SharedPreferences,需要通过SharedPreferences.edit()获取内部接口Editor对象,通过Editor对象完成操作。

2.1 写入数据

 //步骤1:创建一个SharedPreferences对象
 SharedPreferences sharedPreferences= getSharedPreferences("data",Context.MODE_PRIVATE);
 //步骤2: 实例化SharedPreferences.Editor对象
 SharedPreferences.Editor editor = sharedPreferences.edit();
 //步骤3:将获取过来的值放入文件
 editor.putString("name",Tom);
 editor.putInt("age", 28);
 editor.putBoolean("marrid",false);
 //步骤4:提交               
 editor.commit();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.2 读取数据

 SharedPreferences sharedPreferences= getSharedPreferences("data", Context .MODE_PRIVATE);
 String userId=sharedPreferences.getString("name","");
  • 1
  • 2

2.3 删除指定数据

 editor.remove("name");
 editor.commit();
  • 1
  • 2

2.4 清空数据

 editor.clear();
 editor.commit();
  • 1
  • 2

3 SharedPreferences存储位置

3.1 share_prefs目录位置

参考:https://blog.csdn.net/Judy889/article/details/84912056

一般的SharePreference保存在/data/data/[package name]/shared_prefs目录,
但通过createDeviceProtectedStorageContext建立的SharePreference保存在/data/user_de/0/[package name]/shared_prefs目录。

例如如下代码:

private s(Context arg5) {
    this.a = Build.VERSION.SDK_INT >= 24 ? arg5.createDeviceProtectedStorageContext().getSharedPreferences("safetydetect", 0) : arg5.getApplicationContext().getSharedPreferences("safetydetect", 0);
    this.b = this.a.edit();
}
  • 1
  • 2
  • 3
  • 4
  • getSharedPreferences("safetydetect", 0)决定了,sp对象从名为com.huawei.hms.safetydetect_safetydetect.xml的文件中读取数据
  • 如果执行createDeviceProtectedStorageContext(),则xml文件保存在/data/user_de/0/com.huawei.hwid/shared_prefs
  • 如果执行getApplicationContext(),则xml文件保存在/data/data/com.huawei.hwid/shared_prefs

当我们找不到SharePreference保存在哪,可以通过这个方法获取其路径

final File source = deviceContext.getSharedPreferencesPath(PreferenceManager.getDefaultSharedPreferencesName(deviceContext));String absolutePath = source.getAbsolutePath();
  • 1

3.2 导出share_prefs目录

cp -r /data/user_de/0/com.huawei.hwid/shared_prefs /data/local/tmp
chmod -R 777 /data/local/tmp/shared_prefs/
adb pull /data/local/tmp/shared_prefs
  • 1
  • 2
  • 3

4 hook SharedPreferences

参考:https://www.jianshu.com/p/fbea62fc13c2

frida hook android.content.SharedPreferences 或者android.content.SharedPreferences.Editor,实测有时可能hook不到

建议hook 内部api android.app.SharedPreferencesImpl$EditorImpl

var sp = Java.use("android.app.SharedPreferencesImpl$EditorImpl");
sp.putString.overload('java.lang.String', 'java.lang.String').implementation = function(arg1,arg2)
{
	console.log("[SharedPreferencesImpl] putString -> key: "+arg1+" = "+arg2);
 	return this.putString(arg1,arg2);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/算法优化者/article/detail/60736
推荐阅读
相关标签
  

闽ICP备14008679号