数据存储常用的方式有 NSUserDefaults, KeyChain 以及 CoreData 等,在特定条件下,这些方式都不安全。
NSUserDefaults
NSUserDefaults 是明文存储的,路径参考iOS-目录结构。
例如,百度地图的 NSUserDefaults 文件路径:
直接打开,可以看到所有信息:
Keychain
KeyChain 的数据在越狱设备上,是可被导出的,方式如下:
安装 Keychain Dumper
Keychain Dumper 是一款可以导出 Keychain 数据的开源工具。
下载完成后,将其安装到设备的 tmp 目录下,并修改其权限:
|
|
修改 Keychain 数据库权限
Keychain 数据库路径为:
|
|
修改其权限为可读:
|
|
导出 Keychain 数据
执行命令:
|
|
可以看到所有的 Keychain 数据都被导出了,包括 Wifi 密码:
也包括知乎的历史数据:
CoreData
CoreData 的持久化存储类型有以下几种:
|
|
除了指定类型,还需要指定存储文件的路径,例如 Sqlite:
|
|
由于沙盒机制,因此 CoreData 的存储文件只能储存在有限的几个目录下,参考iOS-目录结构,因此其是可获取的,并且是明文的,并不安全。