安卓Hacking Part 12: 使用第三方库加固Shared Preferences
2014-12-18 09:52:38
阅读:0次
在前几期中,我们介绍过Android应用开发过程中Shared Preference的实现,并演示了如何窃取安全防护不足的应用保存的Shared Preferences。本期中我们将学习如何使用一个名为”Secure Preferences”第三方库保护保存在Shared Preferences中的数据。尽管在设备被root的情况下,这个库也没法百分之百的保证应用的安全,但相比于普通的Shared Preferences敏感信息被能得到更好的保护。
“Secure Preferences”是一个Shared preferences加密包装库,可以加密保存在XML文件里面的Shared Prefereces数据,并且是开源的。
本文会一步步教你如何在开发过程中使用“Secure Prefereces”库来保卫数据安全。
实战Android Secure Preferences
1、下载”Secure Prefereces”库,地址如下
2、在Eclipse中创建一个新工程。
3、在工程中添加我们刚刚下载的库以便待会用到。该过程类似于将其他库连接到我们的Android应用中去。如果你不知道怎么操作,简单的步骤就是:右击,选择属性,勾上“is Library”,然后将其连接的我们创建的应用中。
4、为了使用“Secure Prefereces”,我们需要在类中对Secure Prefereces进行初始化。
5、现在我们就可以想使用普通的Shared Preferences一样,创建一个”Editor”对象来想XML中插入数据。
如上图所示,我们一样使用Editor对象的putString方法来插入数据。
6、使用getString带上必要的参数来读取数据。
上图中的代码读取了一个键值为”PASSWORD”的值,并显示在一个textview中。
这就是”Secure Preferences”在应用开发中的用法。
现在,我们会深入研究下”Secure Preferences”背后的工作,已经它是如何降低数据被窃取的风险的。
这里用到的APK和代码可以在上面的连接下载到。
我们为本文开发的应用的Activity布局中有一个编辑框,两个按钮,一个文本框,一个按钮用于加密并保存编辑框中的数据,另一个用于解密并在文本框中显示数据。如下图:
当我们在输入框中输入数据并点击”encrypt and save”按钮的时候,上一届中第五步中的代码就会执行,加密并保存用户输入的数据:
当我们点击”Decrypt and Display”按钮时,就会读取并解密保存在Shared Preferences中的数据。
现在,我们就来看看数据是怎么被存储到xml文件中的,以及为何可以增加窃密者窃取信息的难度。
前几期中,我们已经知道,Shared Prefercences 的数据保存在一个XML文件中,我们现在先吧这个文件下载到本地计算机中,可以使用如下命令:
adb pull /data/data/com.isi.secureprefs/shared_prefs/com.isi.secureprefs_preferences.xml
可以使用cat命令查看文件的内容:
cat com.isi.secureprefs_preferences.xml
如上图,可以看到,这个xml文件中确实保存了数据,但却是经过了加密的数据。
“SecurePreferences”如何工作?
Secure Preferences 使用AES来加密数据。在Secure Preferences第一次被初始化的的时候回使用伪随机数来生成一个随机秘钥,并使用这个秘钥来加密保存的键值对,加密结果进过一遍base64后保存到XML文件中。因为AES是一种对此加密算法,所以解密也使用同一个秘钥。
总结
本文介绍了如何加密Shared Preferences中保存的键值对。这中办法能极大的提高设备中保存的数据的安全性。但当设备被root之后,这就不是那么理想了。更好的办法是使用基于密码的加密方式,及更加用户输入的密码来生成加密解密用的秘钥。
相关链接
Image Credit:
目录