iOS逆向之反汇编工具IDA的使用

1、简介

反汇编工具把二进制文件作为输入,经过处理后输出这个文件的汇编代码。
在iOS逆向中,常用的反汇编工具主要是IDA和Hopper。

IDA Pro(交互式反汇编其专业版,后续简称为IDA)软件是由Hex-Rays SA发布,属于当前最炙手可热的一款世界级逆向反汇编神奇。虽然IDA Pro不是唯一的二进制代码反汇编器,但它是众多安全人士的首选。IDA Pro属于收费软件,价格不菲,每个Key一年大概需要几千美元的费用,每卖出一份Key对应唯一水印的IDA软件。一旦被Hex-Rays SA发现随意传播IDA软件,极有可能会被Hex-Rays SA永久取消Key用户使用权。

IDA支持目前主流操作系统平台的常规使用,如支持的操作系统包括:Windows、Linux、Mac等。IDA支持数十种CPU指令集反编译,包括:x86、x64、Arm、MIPS、PowerPC等。通过IDA工具可将二进制可执行文件反编译,目前IDA支持主流平台的可执行文件反编译,如:Android平台的ELF文件、Windows平台的PE文件、IOS系统的Mach-O文件等。

官方链接:https://www.hex-rays.com/products/ida

免费下载链接:https://forum.reverse4you.org/showthread.php?t=2627

2、IDA加载可执行文件

其中ida负责反编译32位可执行文件,ida64负责反编译64位可执行文件。

ida

IDA目录的结构

cfg目录:包含各种配置文件,包括基本IDA配置文件ida.cfg、GUI配置文件idagui.cfg、文本模式用户界面配置文件idatui.cfg。

Idc目录:包含IDA的内置脚本语言IDC所需的核心文件。

Ids目录:包含一些符号文件(IDA语法中的IDS文件),这些文件用于描述可被加载到IDA的二进制文件引用的共享库的内容。

loaders目录:用于包含在文件加载过程中用于识别和解析PE或ELF等已知文件格式的IDA扩展。

plugins目录:包含专门为IDA提供附加功能的IDA模块,也就是我们所说的插件。

procs目录:包含已安装的IDA版本所支持的处理器模块。处理器模块为IDA提供机器语言-汇编语言的转换功能,并负责生成在IDA用户界面中显示的汇编语言。

sig目录:包含IDA在各种模式匹配操作中利用的现有代码的签名。通过模式匹配,IDA能够将代码序列确定为已知的库代码,从而节省大量的分析时间。

til目录:包含一些类型库信息,IDA通过这些信息记录特定于各种编译器库的数据结构的布局。

双击打开,其中“New”选项表明反编译新可执行文件,“Go”选项表明直接进入主界面,“Previous”选项表明加载已反编译的文件选项。

image

这里我们可以用New打开一个可执行文件,如果用go直接打开IDA软件的话,可以将可执行文件直接拖进去

3、IDA功能界面

1)导航条

IDA主界面中存在一项颜色各异的导航条。通过导航条可了解分析可执行文件各部分数据分布情况。

解析进度条

2)函数窗口

IDA提供函数窗口供用户查找函数信息,在窗口按下“CTRL + F”快捷键便可根据需求搜索函数名,快速定位函数名方式可提供逆向分析效率。

Function Window

3)主界面窗口

当 IDA 对 Mach-O 解析完成后,会默认出现 6 个选项卡视图,分别是汇编视图,二进制查看视图,结构体视图,枚举类型视图,导入的函数视图,导出的函数视图。如下是Main Window的界面展示:

Main Window

下面就分别介绍这6个窗口

1.反汇编窗口

反汇编窗口属于逆向分析过程中关注频率最高的窗口,通过此窗口可以逆向分析反汇编代码,移动端中分析频率最高的属于Arm指令集,反汇编窗口属于“IDA View-A”标签项内容。

反汇编窗口可分为两种模式,分别为:默认模式和图形模式。

默认模式

反汇编窗口默认模式属于使用频率很高的常规模式,

image

上图属于反汇编窗口常规模式,主要以文本方式显示反汇编内容,下面着重介绍上图5处标红数字所对应的内容及含义,分别对应如下:

标号1:此处对应名称为sub_8C14,属于IDA使用默认方式标识函数名,默认命名规则为:sub_+函数内存相对偏移。可执行程序部分由大量的函数代码组成,属于代码片段基本组成单位。

标号2:表示反汇编代码对应内存的相对偏移及所属的节段名称,此处需区分内存偏移和文件偏移,IDA以内存偏移的方式加载可执行文件各节段内容。

标号3:表示函数内部的局部代码块,通常以跳转目的地址为规则定义代码块,属于IDA使用默认方式标识函数名。该部分命名规则为:loc _+函数内存相对偏移,通常与跳转操作密切相关。

标号4:对应内容为“; CODE XREF: sub_8870+50p”,表示当前代码的交叉引用,对应标号的文本含义为:“sub_8C14”上层调用由“sub_8870”函数内部偏移0x50出调用,对应上层调用截图如下:

image

上图调用处相对偏移为:0x88C0,对应上层调用函数偏移为:0x8870,“50p”偏移计算方式为:0x88C0 - 0x8870 = 0x50。

标号5:表示反汇编文本内容,通过反汇编内容可进行逆向分析。

图形模式

反汇编窗口默认模式中按下键盘的“空格”键便转入图形模式,也可通过图形模式界面如下图所示:

image

图形界面以单个函数为单位,通过图形界面能够快速的掌握函数内部程序执行过程(对于分析C++的IF跳转语句、循环语句的反汇编代码结构所提供的帮助尤为明显),上图标识的3处红色数字标注不同方式的执行方式,3处标红含义分别为:

标号1:对应浅绿色方向线,表示C、C++等编程语言的判断语句为YES所跳转执行流程。

标号2:对应红色方向线,表示C、C++等编程语言的判断语句为NO所跳转执行流程。

标号3:对应蓝色方向线,表示程序顺序执行过程。

二进制查看窗口

二进制窗口可支持用户查看可执行文件对应相对偏移的二进制机器码数据,二进制查看窗口对应“Hex View-1”选项内容。
二进制查看窗口总共分为三部分,含义分别为:

左边数据:表示二进制数据对应的内存相对偏移。

中间数据:表示内存中数据的具体内容。

右边数据:表示内存数据的字符串显示,该功能可辅助读者快速识别字符串内容。

用户可在二进制查看窗口中编辑二进制数据,从而满足篡改数据的测试需求。

结构窗口

结构窗口提供用户查询已定义的结构体,同时IDA可识别出可执行文件包含的部分结构体数据,结构窗口可通过快捷键“+”、“-”展开和收缩结构体,IDA结构窗口支持用户自定义结构体。

导入函数窗口

IDA提供导入函数窗口,用于可在导入函数窗口中查看当前可执行文件导入哪些外部函数库及函数,通过导入函数窗口可获取到函数内存相对偏移地址、函数名、导入函数所属的库文件。

导出函数窗口

IDA的导出函数窗口提供可执行文件导出函数信息,通过导出函数窗口可获取到导出的函数名、函数对应的内存相对偏移地址。

3、IDA分析可执行文件

1.判断IDA分析完毕的方法

1)IDA的“Output Window”窗口输出“The initial autoanalysis has been finished”日志时,则说明IDA已分析完毕。

image

2)导航条的进度条处黄色向上箭头消失时,则表明IDA分析完毕。

3)IDA界面左下角AU处于”idle”状态时,也表明IDA分析完毕。

image

IDA分析完毕之后会将光标停留在需分析的可执行文件入口函数处。

4、静态分析:还原源代码

使用 IDA 反汇编二进制文件的目的是,利用工具得到反汇编之后的伪代码,还原出真正的程序源码。


双击左边Function name 到达这个函数在二进制文件中的内存地址,按 F5 可以就查看这个反编译的伪代码。

883834478,交流群,交流群,交流群,重要的事情说三遍!!!欢迎iOS逆向的小伙伴进来交流讨论,共同进步!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容