引言
在我们日常工作中,难免会遇到一些Crash等疑难问题需要查看系统实现,有时候在做一些高级定制功能时,比如自定义富文本渲染等,也需要查看系统是怎么做的;特别是对于iOS程序员来说,由于Apple的闭源生态,遇到以上问题基本只能靠逆向手段来逐步分析。学会汇编和逆向,可以说是一个程序员从入门走向进阶的第一步。
前面我们通过逆向手段分析了CoreText中的字体级联/Font Fallback机制,正好借此机会聊聊一些常用的逆向思路与技巧;本篇文章更多面向小白入门,不需要你有太多的汇编、LLDB知识,我们将结合一些典型场景来举一反三,当然,如果大家有更好的奇技淫巧欢迎一起交流、学习。
持续更新,最新内容也可以在公众号「非专业程序员Ping」一起交流!!
一、工欲善其事,必先利其器
在开始之前,需要先了解两个常用的逆向工具:Hopper 和 IDA。具体安装和使用我们也有专门的文章介绍:常见逆向工具使用。
一般而言我们都是结合两个工具一起看,IDA 的反汇编通常比 Hopper 还原度更高,所以我们主用的还是IDA。
二、查找二进制文件路径
分析的第一步,肯定是找到我们想要分析的入口函数,以CoreText中的字体级联/Font Fallback机制这篇文章的Case为例子,我们要研究的是 CTFontCopyDefaultCascadeListForLanguages 的实现,我们可以在LLDB中通过如下命令找到该符号所在库:- image lookup -rn CTFontCopyDefaultCascadeListForLanguages
复制代码
通过这个命令我们可以得到两个信息:
1)CTFontCopyDefaultCascadeListForLanguages 在CoreText库中
2)CoreText 二进制文件的路径
得到路径之后,在访达中可以通过快捷键 Command + Shift + G 可以快速跳转到位置,得到CoreText的二进制文件:
三、善用AI
得到CoreText的二进制文件之后,我们通过IDA进行反汇编。
之后将 CTFontCopyDefaultCascadeListForLanguages 的主要调用逻辑Copy到单独的文件夹:
在AI没普及之前,我们一般是结合LLDB硬着头皮逐行分析,有了AI之后,我们可以直接将整个文件夹扔给AI(比如Cursor、GPT等),让AI给我们梳理流程、逐行注释,输出调用流程图等。
如下,是AI生成的函数调用流程;结合AI的逻辑梳理和注释,我们对 CTFontCopyDefaultCascadeListForLanguages 的整体逻辑会有一个大致的理解。
当然,AI也不是全能的,一些逻辑AI也只是猜测甚至乱说
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|
|
|
相关推荐
|
|