iOS小技能: ips 文件的分析

1,148 阅读3分钟

“我正在参加「掘金·启航计划」”

引言

主要分析3块:

  1. Triggered by Thread线程的调用栈回溯信息
  2. 与架构相关崩溃的线程状态(crashed with ARM Thread State)
  3. Binary Images信息

I 预备知识

1.1 基础术语

Incident Identifier: 6156848E-344E-4D9E-84E0-87AFD0D0AE7B
CrashReporter Key:   76f2fb60060d6a7f814973377cbdc866fffd521f
Hardware Model:      iPhone8,1
Process:             TouchCanvas [1052]
Path:                /private/var/containers/Bundle/Application/51346174-37EF-4F60-B72D-8DE5F01035F5/TouchCanvas.app/TouchCanvas
Identifier:          com.example.apple-samplecode.TouchCanvas
Version:             1 (3.0)
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.example.apple-samplecode.TouchCanvas [1806]

Date/Time:           2020-03-27 18:06:51.4969 -0700
Launch Time:         2020-03-27 18:06:31.7593 -0700
OS Version:          iPhone OS 13.3.1 (17D50)


22  libdyld.dylib                     0x00000001b6728360 start + 4


  • OS Version:系统版本号,13.3.1
  • OS Build Version:系统编译版本号,17D50
  • 二进制文件:二进制文件名,libdyld.dylib
  • PROJECT_NAME:项目名,比如 dyld。
  • PRODUCT_NAME,构建产物名称,通常与 PROJECT_NAME一致

比如 libdyld.dylib就是由 lib + dyld + .dylib 组合而成,dyld 就是 PRODUCT_NAME

  • CURRENT_PROJECT_VERSION:项目版本号

1.2 dSYM 是什么?

  • Xcode 每次编译app代码后生成的 dSYM 文件

dSYM 文件里存储了函数地址映射,这样调用栈里的地址可以通过 dSYM 这个映射表能够获得具体函数的位置。一般都会用来处理 crash 时获取到的调用栈 .crash 文件将其符号化

  • 获取dSYM符号表方法

等appstoreconnect 后台处理完毕之后,才可以下载 1)Window——>Organizer"选择对应版本的 Archive 包, 2)点击右侧的下载dSYM 3)"右键——>Show in Finder" "右键——>显示包内容" aaa3ffdf-16ce-3065-bcba-293f7aee7c9b.dSYM.zip

  • 获取真机上crash log的方法:

1、其中一个目录/var/mobile/Library/Logs/CrashReporte 2、/private/var/mobile/Library/Logs/CrashReporter

II ips 文件的分析

2.1 主要分析模块

  1. Triggered by Thread线程的调用栈回溯信息,该部分保存了崩溃进程的所有线程的方法栈信息(方法调用栈中的序号、二进制文件的映像名称、致崩溃的指令地址、执行代码的符号名称);
  2. 与架构相关崩溃的线程状态(crashed with ARM Thread State )
  3. Binary Images信息;通过命令行工具 symbolicatecrash 来手动符号化 crash log(symbolicatecrash --dsym=/Users/devzkn/dylib.dSYM ~/Library/Logs/CrashReporter/SpringBoard-2018-03-23-153316.ips | open -f)

2.2 iOS15崩溃排查技巧

symbolicatecrash符号化分析问题、导出和隐藏符号 blog.csdn.net/z929118967/…

iOS15符号化换新工具了, iOS 15 的crash 文件改了格式, 用 Xcode 13 的 symbolicatecrash 也无法解析了,可使用脚本将新格式转换为之前的格式,再丢进去 symbolicate。

Mac OS 11.3+的系统用Console 打开也会自动转换,或者用 Xcode 的 View Devide Logs 来先给开发这边先查看

关注#公众号:iOS逆向,回复translation 下载转换脚本

python3 translation.py -i {input_sybolicated_json_file} -o {output_path}

see also

公号:iOS逆向