资讯专栏INFORMATION COLUMN

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

dreamGong / 1867人阅读

摘要:本文就简单聊聊从固件获取系统库符号的方法。固件以结尾文件其实是一个压缩包,解压后得到的个文件中,占用空间最大的那个就包含需要的系统库。二系统库符号提取从开始,所有的系统库都打包成一个文件,其中表示具体的架构,此文件位于目录。

当程序发生崩溃并有机会获取到崩溃堆栈时,还原崩溃堆栈从而定位错误显得非常重要。用户符号的还原非常简单,因为在打包 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,本文并没有涉及,这一话题笔者也还在研究,欢迎大家指正。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/16455.html

相关文章

  • 聊聊 "-ObjC" 的故事

    摘要:的使用场景据坊间说如果你集成了有的静态库,有可能出现上述错误。原因就是这段话的意思就是链接器在处理包含方法的的静态库时,没有将的方法链接到中,造成这个错误。的作用是将静态库中任何代码都链接到中。 民之失德,乾糇以愆;他山之石,可以攻玉。 - 《诗经》showImg(https://segmentfault.com/img/bVzLQR); 在开发 iOS 应用时,可能遇见这样的情况...

    Leck1e 评论0 收藏0
  • 嵌入式系统开发: LinkIt™ Smart 7688 Duo物联网平台简介

    觉得文章还不错的, 右上角的推荐. LinkIt™ Smart 7688 Duo 平台主要针对如下两个应用场景: 智能家居的家电控制 办公室设备控制 什么是联发科技LinkIt™ Smart 7688 开发平台http://labs.mediatek.com/site... 连接到 LinkIt™ Smart 7688 Duo 下面介绍3种连接到 LinkIt™ Smart 7688 Duo...

    LiuRhoRamen 评论0 收藏0
  • iOS文章

    摘要:在单核时代,使用多线程技术更多时候是为了避免耗时操作堵塞了主线程。而在多核时代,多线程技术才真正完成了提升执行效率的工作。 iOS 监控 - DNS 劫持 DNS 劫持指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的 IP 地址或者什么都不做使请求失去响应。 JavaScript深入系列15篇正式完结! 写在前面 JavaScript 深入...

    dreamans 评论0 收藏0
  • 摄像头逆向分析之旅

    摘要:前言摄像头是我们常见的设备,它的安全关系着用户的隐私,而厂商为了防止逆向分析,在程序的实现上会使用各种方法来阻止逆向工程。本文通过某款知名的摄像头的逆向分析,简单介绍了我是如何通过串口一步步的对摄像头中的关键程序进行逆向的方法。 前言 摄像头是我们常见的IoT设备,它的安全关系着用户的隐私,...

    RyanQ 评论0 收藏0
  • linux基础命令介绍十三:启动流程

    摘要:中程序能够识别存储介质上的分区信息和文件系统如,此时会将位于格式硬盘的一个分区,安装时自动生成作为应用程序运行。 固件(firmware)是指设备最底层的,让设备得以运行的程序代码。简单理解就是:固定在硬件上的软件。计算机中的许多设备都拥有固件(如硬盘、鼠标、光驱、U盘等),在计算机启动过程中,最先读取的就是位于主板上的固件,这个固件当前有两种类型:传统的BIOS和新的通用性更强的UE...

    fai1017 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<