聊聊从iOS固件提取系统库符号
2016-09-23 10:03
656 查看
“民之失德,乾糇以愆;他山之石,可以攻玉。”- 《诗经》
当程序发生崩溃并有机会获取到崩溃堆栈时,还原崩溃堆栈从而定位错误显得非常重要。用户符号的还原非常简单,因为在打包 APP 时,会生成对应的符号文件(以 .dSYM 结尾)。而对于系统符号,Apple 并没有提供对应的符号文件下载,所以需要自己解析。本文就简单聊聊从 iOS 固件获取系统库符号的方法。
一、固件下载和解密
有很多提供固件下载服务的站点,比较出名的是: theiphonewiki.com 。这个站点同时也维护了用于固件解密的 key,如图1所示:
图1:theiphonewiki.com 维护的 iOS 9.x 版本的固件解密 key
在图1中,蓝色字体部分表示对应的固件 key 存在,红色字体表示对应的固件 key 暂时不可得,所以 theiphonewiki 上只有极少数的 arm64 版本的固件是可以解密的。
固件(以 .ipsw 结尾)文件其实是一个压缩包,解压后得到的 3 个 dmg 文件中,占用空间最大的那个就包含需要的系统库。而这个文件是 AES 加密的,解密这个需要 Root Filesystem Key。例如,iPhone5,4(即 iPhone 5c )固件的解密 key
如图2所示:
图2:iPhone5,4 固件的 Root Filesystem 解密 Key
获取到 key 后,就可以使用 VFDecrypt 工具完成最终的解密,当然也有很多更方便的 UI 集成工具或者 python 脚本,比如:iDecrpyptIt。
二、系统库符号提取
从 iPhone OS 3.1 开始,所有的系统库都打包成一个文件:dyld_shared_cache_xxx ,其中 xxx 表示具体的架构,此文件位于:/System/Library/Caches/com.apple.dyld 目录。dyld_shared_cache_xxx 文件的解压可以使用 dyld 中的代码,
步骤如图3所示:
图 3:dyld_shared_cache_xxx 文件解密方法
最后得到的目录中就包含了此固件的系统库文件,如 UIKit.framework 等。
三、需要说明的地方
theiphonewiki 上提供的解密 key 并没有 arm64 架构的,如果要解密 iPhone 5s 及以后产品对应的固件,需要通过其它渠道或者自己手动获取解密 key 。关于如何手动获取解密 key,本文并没有涉及,这一话题笔者也还在研究,欢迎大家指正。相关文章推荐
- 聊聊从iOS固件提取系统库符号
- iOS系统恢复固件遭遇3194错误解决办法
- iOS开发_从一个带有空格和特殊符号的字符串里提取数字即手机号的方法
- 本附录介绍iOS系统包含的框架,它们为编写iOS平台的软件提供必要的接口。下面的表格尽可能地列出框架中的类、方法、函数、类型以及常量使用的关键前缀,请避免在您的符号名称中使用这些前缀。
- iOS提取音乐库文件 iOS播放系统音乐库音乐文件
- 64位IOS系统中敲壳提取32位程序
- iOS 7.1 Beta 4微调UI 更关注系统幕后的提升(附固件下载)
- 通过符号表找到系统未导出的函数地址源码
- 利用RFID保护系统固件和其它知识产权(询问相应鉴别)
- 锐捷2126G部分基础配置(升级系统固件、telnet、vlan)
- 从android模拟器中提取文件系统
- 锐捷2126G部分基础配置(升级系统固件、telnet、vlan)
- iPhone安装双系统固件详细操作教程
- android下载编译以及文件系统提取总结
- 学习笔记之四_Cisco系统IOS和安全设备管理系统SDM(CCNA知识考点)
- 邮件系统开发中,解决提取邮件时出现中文乱码的方法
- CCNA第二天学习笔记之Cisco系统IOS
- SmartSoft技术管理系统实现之:用C#.Net实现AutoCAD块属性提取
- 常用的文章系统,如何用一条sql语句提取出每个分类的第一条并按OrderCol字段排序。分类大概几十个,一共只要取top 10 这样
- cisco2950交换机 ios系统被删除之后如何恢复?