某电商ios版WJLoginInfo.plist和*DLoginInfo.plist文件的应用与安全机制分 ...

打印 上一主题 下一主题

主题 989|帖子 989|积分 2967

plist文件概述

Property List(plist)是iOS开发中的核心配置文件格式,紧张用于数据序列化存储。本文将深入分析其工作机制及安全性考虑。
底子功能架构

plist在iOS系统中紧张承担以下功能:



  • 应用配置管理:存储版本号、Bundle ID、装备适配等底子配置
  • 数据持久化:支持底子数据结构的文件系统序列化
  • 当地化处理:管理多语言资源文件
  • 启动配置:通过Info.plist配置应用启动参数
  • 数据结构支持
plist支持多种数据范例,包括:



  • 底子范例:String、Number、Boolean、Date
  • 集合范例:Array、Dictionary
  • 二进制范例:Data
技术实现机制

plist提供两种存储格式:



  • XML格式:可读性强,便于调试和编辑
  • 二进制格式:体积小,读写效率高,适合生产环境
系统通过PropertyListSerialization类处理序列化/反序列化操作:
  1. // 读取示例
  2. if let path = Bundle.main.path(forResource: "Config", ofType: "plist"),
  3.    let data = FileManager.default.contents(atPath: path) {
  4.     do {
  5.         let plist = try PropertyListSerialization.propertyList(from: data,
  6.                             options: [], format: nil)
  7.         // 处理plist数据
  8.     } catch {
  9.         print("Plist解析错误: \(error)")
  10.     }
  11. }
  12. // 写入示例
  13. let plistData = ["key": "value"]
  14. do {
  15.     let data = try PropertyListSerialization.data(fromPropertyList: plistData,
  16.                         format: .xml, options: 0)
  17.     try data.write(to: fileURL)
  18. } catch {
  19.     print("Plist写入错误: \(error)")
  20. }
复制代码
某电商App的应用实践分析

通过逆向分析发现,该App在差别版本中对用户凭据(Cookie)的存储策略有明显变化:
版本演进



  • 低版本:使用*DLoginInfo.plist,wskey明文存储, pin 加密存储
  • 高版本:迁移至WJLoginInfo.plist,wskey和pin 均接纳加密存储
    加密机制
  • 各版本中均接纳AES-CBC模式加密敏感数据:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plist version="1.0">
  4.     <dict>
  5.         <key>$archiver</key>
  6.         <string>NSKeyedArchiver</string>
  7.         <key>$objects</key>
  8.         <array>
  9.             <string>$null</string>
  10.             <dict>
  11.                 <key>$class</key>
  12.                 <dict>
  13.                     <key>CF$UID</key>
  14.                     <integer>4</integer>
  15.                 </dict>
  16.                 <key>NS.keys</key>
  17.                 <array>
  18.                     <dict>
  19.                         <key>CF$UID</key>
  20.                         <integer>2</integer>
  21.                     </dict>
  22.                 </array>
  23.                 <key>NS.objects</key>
  24.                 <array>
  25.                     <dict>
  26.                         <key>CF$UID</key>
  27.                         <integer>3</integer>
  28.                     </dict>
  29.                 </array>
  30.             </dict>
  31.             <string>qLXPzFY6***RDbUY3Eg</string>
  32.             <string>__0Dnmr_qOpkhTQOA07iAmPVm6-gramTH36sD7Z_SaJhHiCU8Or1PcXG3izEKN8qar9X-PQ7gDIhctBbHIT6rY7KHEtRRKucUmRNrJcNG6ajiL0EzPJlJlwZeps47BR3u4YKXN8zLT9k1FnaWkaFZhRMPRRLgyZTyS2UqYrMZdKz0zC5HtI6-P5Wrr6wH0aF-bZwdMJur1zvbRMn5w3eFLPhkSnsSPZwnHiwJas-QYkeyH-AsM88U-XvNIoP065hsGqhMAIL7t9h3Gr6Ys_*******2Y_OpJLvVK6CLirUgH491qOU5YmgFx1oJlM8ablX0zuXJ-Scqmeub8TnxU1RUk1Xpf-yyxRbNW35ZxD4HGpjGcpqeyqKscXa3Nhe4ddjSOqMvWewvNo4O8QXIN4lsawNFU</string>
  33.             <dict>
  34.                 <key>$classes</key>
  35.                 <array>
  36.                     <string>NSDictionary</string>
  37.                     <string>NSObject</string>
  38.                 </array>
  39.                 <key>$classname</key>
  40.                 <string>NSDictionary</string>
  41.             </dict>
  42.         </array>
  43.         <key>$top</key>
  44.         <dict>
  45.             <key>root</key>
  46.             <dict>
  47.                 <key>CF$UID</key>
  48.                 <integer>1</integer>
  49.             </dict>
  50.         </dict>
  51.         <key>$version</key>
  52.         <integer>100000</integer>
  53.     </dict>
  54. </plist>
复制代码
分析结果

安全机制优化建议

为防止有人把cookie,直接通过加密后粗爆地写入plist文件,我们应针对plist存储的安全性提升,建议接纳以下措施:
1. 密钥保护

硬编码替代方案:



  • 使用KeyChain存储主密钥
  • 实现基于PBKDF2的密钥派生
  • 联合装备唯一标识符生成密钥材料
密钥分发机制:



  • 实现密钥分片存储
  • 接纳阈值密钥共享方案
  • 服务端动态下发部分密钥材料
2. 加密增强

算法选择:



  • 使用AES-GCM提供认证加密
  • 实现ChaCha20-Poly1305加密套件
  • 考虑椭圆曲线加密方案
完整性保护:



  • 添加HMAC验证
  • 实现数字签名
  • 版本号防回滚
3. 运行时保护

内存安全:



  • 实现敏感数据自动打扫
  • 使用SecureContainer封装
  • 添加越狱检测机制
代码保护:



  • 实现控制流混淆
  • 字符串加密
  • 符号表剔除
4. 系统集成

硬件安全:



  • 使用SEP安全隔离
  • TEE可信执行环境集成
  • 生物辨认验证
  • 监控告警:
异常访问检测



  • 完整性及时校验
  • 安全日志审计
5. 安全最佳实践

分层存储策略:



  • 平凡配置:plist明文存储
  • 敏感配置:加密plist
  • 核心凭据:KeyChain
动态验证:



  • 运行时完整性校验
  • 证书锁定
  • 双向认证
通过以上安全措施的组合实施,可以构建一个多条理的数据安全防护体系,为移动应用提供更可靠的数据保护本领。在实际应用中,需要根据具体的安全需求和性能要求,选择合适的保护措施组合。
同时,建议定期举行安全评估和渗透测试,以验证保护措施的有效性,及时发现和修复潜在的安全隐患。
技术交流



  • 本实现仅供技术研究使用
  • 请遵守相关法律法规
  • 不得用于非法用途
  • 欢迎技术探讨. dGcgQGludm9rZXlvdQ== (base64decode后查看联系方式)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表