聊聊从iOS固件提取系统库符号

原创 2016年09月23日 10:01:59

“民之失德,乾糇以愆;他山之石,可以攻玉。”- 《诗经》 


 
        当程序发生崩溃并有机会获取到崩溃堆栈时,还原崩溃堆栈从而定位错误显得非常重要。用户符号的还原非常简单,因为在打包 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 -友盟crash日志分析续集2

之前写的一篇有时候用着很方便,但是偏偏有时候提醒你dsym文件不在目录下,导致很不方便。这时候你就要想其他的工具来提高效率了,比如下面这个: dsym日志分析工具 ,对dsym文件有疑问的同学,请移步...

Python3.2 --- 文件/目录操作

python中对文件、文件夹的操作需要涉及到os模块和shutil模块。import osimport shutil创建文件:1) os.mknod("test.txt") 创建空文件2) open(...

stm32固件库学习之:建立模板和初始化系统时钟

1. 建立模板 模板中共建立了4个文件夹:CMSIS、Libraries、Project、USER。最终的物理目录如下。       CMSIS:拷贝STM32固件库中Libraries\...

ios 固件更新四种常用方法

iOS设备固件更新一般有四种常用方法,分别是iPhone上直接升级固件、iTunes恢复固件、iTunes更新固件、进入DFU模式更新固件,这四种方法各有各的好处和坏处,下面小编就此一一说明。 注意...

iPhone开发者必读:苹果iOS 6固件重点

iOS 6 包含200多项新功能,包括更加智能的“Siri”语音助理、全新的“分享照片流”、惊艳的全景拍照、方便的票卡管理工具 Passbook、蜂窝网络下使用 FaceTime、改进的邮件客户端、采...
  • artwebs
  • artwebs
  • 2013年01月08日 09:38
  • 692

【iOS】CoreBluetooth5 作为 Central 时的数据读写(OTA 固件升级与文件传输)

【iOS】CoreBluetooth5 作为 Central 时的数据读写(OTA 固件升级与文件传输)  Saitjr  三月 23, 2016  Ios  No Comments...

01. 升级系统固件 ❀ FortiManager

FortiManager 设备可以集中管理任意数量的 Fortinet 设备,几台或者上千台,包括FortiGate,FortiCarrier,FortiMail和 FortiAnalyzer设备和虚...

维护篇 06. 升级系统固件至 5.4 ❀ 飞塔 (Fortinet) 防火墙

飞塔防火墙最新系统固件版本为5.4,与5.2相比增加了很多功能,操作介面也有很大的不同,这里将介绍怎样将老系统升级为最新版本的系统。飞塔防火墙升级固件有两种方式,一种是设备在保修期内,可以通过设备自动...

iPhone安装双系统固件详细操作教程

iPhone安装双系统固件详细操作教程 浏览:5416 | 更新:2011-01-14 12:53 | 标签:iphone 固件  Dev team最近...

采用PDIUSBD12的USB系统固件程序设计

摘要:在设计USB系统的过程中,固件程序的编写是非常重要的一个环节,它直接影响到开发产品的数据传输速度。以Phillips公司的USB控制芯片PDIUSBD12为例,介绍了在设计开发USB外设中。固件...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:聊聊从iOS固件提取系统库符号
举报原因:
原因补充:

(最多只允许输入30个字)