引言
主要分析3块:
- Triggered by Thread线程的调用栈回溯信息
- 与架构相关崩溃的线程状态(crashed with ARM Thread State)
- 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 主要分析模块
- Triggered by Thread线程的调用栈回溯信息,该部分保存了崩溃进程的所有线程的方法栈信息(方法调用栈中的序号、二进制文件的映像名称、致崩溃的指令地址、执行代码的符号名称);
- 与架构相关崩溃的线程状态(crashed with ARM Thread State )
- 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符号化分析问题、导出和隐藏符号
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逆向