【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();

2.2 读取数据

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

2.3 删除指定数据

 editor.remove("name");
 editor.commit();

2.4 清空数据

 editor.clear();
 editor.commit();

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();
}
  • 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();

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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值