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

作者: 呆呆滴木木菇凉 | 来源:发表于2018-04-24 14:19 被阅读37次

    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

    其中“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 可以就查看这个反编译的伪代码。

    相关文章

      网友评论

      • 070bdf09782b:反编译的伪代码怎样还原源代码
        呆呆滴木木菇凉:@竹雨林轩 这个不能还原了,只能靠你自己去调试,凭着经验去猜测,然后知道原代码做了些什么

      本文标题:iOS逆向之反汇编工具IDA的使用

      本文链接:https://www.haomeiwen.com/subject/ldkjlftx.html