IDA Pro 工具介绍

*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

原文地址:http://gslab.qq.com/article-112-1.html

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文件等。

本文只介绍IDA工具的基本功能,后续逆向篇中会介绍IDA在静态分析和动态调试阶段涉及常用功能。以下IDA功能介绍基于IDA Pro 6.6版本,IDA正版下载链接为:https://www.hex-rays.com/products/ida,读者可根据需求自行下载软件,目前市面有较多破解之后可免费使用的IDA软件,本文推荐读者尽可能使用正版IDA软件进行移动端游戏安全逆向。

1.1 IDA加载可执行文件

Windows平台中IDA安装过程中默认路径在C盘的Program Files目录下,安装成功之后会在桌面生成下图所示32位、64位程序,对应安装包文件名如下图所示:

其中idaq.exe负责反编译32位可执行文件,idap64.exe负责反编译64位可执行文件。点击运行idaq之后用户便可选择加载可执行文件的方式,对应界面如下所示:

其中“New”选项表明反编译新可执行文件,“Go”选项表明直接进入主界面,“Previous”选项表明加载已反编译的文件选项。当选择New方式进入IDA主界面时如下所示:

上图为IDA主要功能界面,IDA支持直接将文件拖入界面所在的区域中,利用测试过程利用文件名为Test的可执行PE文件,对应加载文件的主要选项如下图所示:

上图界面可识别当前玩家加载的可执行文件类型,上图已识别出Test文件为PE可执行文件格式。下面“Processor type”选项表明当前处理器类型,IDA能够识别的文件类型可依照IDA默认选项加载可执行文件,如果IDA不能识别的二进制代码,例如ShellCode代码,可选择“Binary file”方式加载,选择“Binary file”方式加载,对应界面如下所示:

一旦选择“Binary file”方式加载文件,则需要用户手动填入加载段地址和相对偏移,对应上图“Loading segment”和”Loading offset”选项。该种方式主要应用场景为:分析动态保存的二进制代码、ShellCode二进制代码分析等。选择“Binary file”方式加载文件,IDA不会自动分析代码,用户需根据具体需求自行反汇编二进制代码。本文侧重介绍IDA可识别的二进制可执行文件且能够自动反编译功能。

1.2 IDA分析可执行文件

上面部分介绍IDA软件中如何加载二进制可执行文件,IDA会对可识别的文件进行代码反编译,反编译过程依据文件大小而定,例如:几百KB大小的文件,IDA可短时间分析完毕;几兆更大文件,IDA则自动分析一段时间,越大的文件IDA分析的时间通常会越长(因为可执行文件越大,意味着可执行文件中代码段也越大,IDA分析时间自然会越长)。

IDA软件会利用回归方式递进分析可执行文件反汇编代码,分析过程如下所示:

上图两处红框内容不断变化可推断IDA仍处于自动分析代码过程,进度条处黄色向上箭头图标表明当前IDA分析到的位置,下面部分变化的偏移数字表明当前分析到的代码偏移位置。

判断IDA分析完毕的三种方法分别为:

1)下图IDA的“Output Window”窗口输出“The initial autoanalysis has been finished”日志时,则说明IDA已分析完毕,对应Log如下图所示:

2)下图所示进度条处黄色向上箭头消失时,则表明IDA分析完毕。

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

通过以上三种方式可观察到IDA是否分析完毕。IDA分析完毕之后会将光标停留在需分析的可执行文件入口函数处。如下图分析Windows程序,程序分析完毕之后,IDA把当前光标停留在下图wWinMain函数中:

本节主要介绍IDA分析代码过程及如何判断IDA分析完毕。

1.3 IDA功能界面

经过IDA的加载和分析过程之后,用户便可根据需求自行逆向分析。进行逆向分析之前需了解IDA界面有哪些功能,包括:导航条、反汇编窗口、其他辅助分析窗口。

1)导航条

IDA主界面中存在一项颜色各异的导航条,导航条如下图:

通过导航条可了解分析可执行文件各部分数据分布情况,各种颜色代表含义如下:

蓝色:表示常规的指令函数,绝大部分为用户编写的代码,上图中绝大部分数据属于蓝色数据。

黑色:表示间隙部分内容,可执行文件中包含多个节段,相邻节段之间存在空隙,红色表示空隙部分。

银白色:表示数据项部分内容,可执行文件中会包含大量数据,银白色表示数据项部分内容。

粉色:表示外部导入符号,通常可执行文件会导入外部的库函数。

暗黄色:表示IDA未识别的内容,需要用户根据需求自行分析。

以上基于IDA默认设置介绍各种颜色在导航条的含义,IDA同时提供了颜色设置,方便用户根据需求选择合适的颜色,对应“Options”菜单的“Colors”选项中,对应选项如下图所示:

用户可在“IDA Colors”对话框的选择“Navigation band”Table项,在对应选项中设置各项数据的颜色,方便实际场景的分析。

2)反汇编窗口

反汇编窗口属于逆向分析过程中关注频率最高的窗口,通过此窗口可以逆向分析反汇编代码,移动端中分析频率最高的属于Arm指令集,包括:Arm 32为指令集(常用语Android平台Native层反汇编代码分析)、Thumb 16位指令集(常用于IOS平台32位Mach-O文件的反汇编代码分析)、Arm 64位指令集(常用于IOS平台64位Mach-O文件的反汇编代码分析)。反汇编窗口属于“IDA View-A”标签项内容,对应下图红框部分选项:

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

默认模式

反汇编窗口默认模式属于使用频率很高的常规模式,对应界面如下图所示:

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

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

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

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

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

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

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

上面介绍的5处标号内容属反汇编窗口默认模式中关注度非常高的部分,通过抓住重点才能提高移动端游戏逆向的效率。

图形模式

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

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

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

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

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

以上基于IDA默认设置介绍反汇编窗口图形模式各种带颜色跳转线含义,IDA同时提供了颜色设置,方便用户根据需求选择合适的颜色,对应“Options”菜单的“Colors”选项中,对应选项如下图所示:

上图“IDA Colors”对话框的“Graph”选项对应窗口模式颜色设置,用户可根据需求自行设置适合颜色。

3)其他辅助分析窗口

除了提供反汇编分析窗口,IDA默认界面提供二进制查看编辑窗口、函数窗口、结构窗口、枚举类型窗口、导入函数窗口、导出函数窗口。不同窗口在分析阶段起到不同作用。下面介绍其他辅助分析窗口功能的应用场景。

二进制查看窗口

二进制窗口可支持用户查看可执行文件对应相对偏移的二进制机器码数据,二进制查看窗口对应“Hex View-1”选项内容,如下图所示:

二进制查看窗口总共分为三部分,三部分内容分别位于上图左、中、右,三处含义分别为:

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

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

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

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

函数窗口

IDA提供函数窗口供玩家查找函数信息,该窗口界面如下:

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

结构窗口

结构窗口提供用户查询已定义的结构体,同时IDA可识别出可执行文件包含的部分结构体数据,结构窗口如下所示:

结构窗口可通过快捷键“+”、“-”展开和收缩结构体,IDA结构窗口支持用户自定义结构体。

导入函数窗口

IDA提供导入函数窗口,用于可在导入函数窗口中查看当前可执行文件导入哪些外部函数库及函数,导入函数窗口如下图所示:

通过导入函数窗口可获取到函数内存相对偏移地址、函数名、导入函数所属的库文件。

导出函数窗口

IDA的导出函数窗口提供可执行文件导出函数信息,对应的导出函数窗口如下所示:

通过导出函数窗口可获取到导出的函数名、函数对应的内存相对偏移地址。

以上介绍IDA软件主要功能,处于入门IDA所需掌握的基本知识。后续会在静态分析和动态分析中分别介绍IDA软件其他重要功能。

原文发布于微信公众号 - 代码GG之家(code_gg_home)

原文发表时间:2018-02-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

C/C+的角角落落 第二辑 002

使用Windows API构建窗体应用 就历史来说,使用纯API开发窗体应用程序是上个世纪80年代以前的事情了,开发应用程序的人需要使用大量接近系统内核的API...

19150
来自专栏javascript趣味编程

2.1 开发平台搭建: 工欲善其事,必先利其器

15350
来自专栏张善友的专栏

Windows PowerShell 2.0十大新特性

  新的cmdlet、操作符和变量,再加上诸如脚本调试以及后台任务这样的新功能,PowerShell 2.0将帮助你开启PowerShell脚本编程的新世界。 ...

210100
来自专栏林德熙的博客

win10 uwp xaml 兼容多个版本条件编译

如果开发的程序需要在多个版本运行,又需要使用最新版本的特性,那么请看本文。 本文告诉大家如何设置 xaml 的条件编译。

25420
来自专栏javascript趣味编程

2.1 开发平台搭建: 工欲善其事,必先利其器

7200
来自专栏张善友的专栏

开发人员应该知道Windows 7的十大技巧

最近我在笔记本上安装了64位的Windows 7,今天逛的时候看到Scott Hanselman’s 写的一篇文章Top 10 Tips Working Dev...

18950
来自专栏walterlv - 吕毅的博客

UWP 应用中 CoreApplication / Application, CoreWindow / Window 之间的区别

发布于 2018-07-29 23:51 更新于 2018-08...

33720
来自专栏张善友的专栏

使用Gemini构建自己的IDE

你的项目中的领域特定语言是否需要自己的IDE?Visual Studio Shell是选择之一,但是过于庞大不易部署,而且很难使用。Tim Jones的Gemi...

22360
来自专栏张善友的专栏

ASP.NET Identity 2新增双重认证、帐号锁定、防伪印章功能并修复了一些bug

Microsoft最近发布了ASP.NET Identity 2,该版本支持双重认证、帐号锁定以及防伪印章功能,还增强了用户帐号和索引。此外新版本还包含一个改进...

20880
来自专栏程序员与猫

ASP.NET Core 介绍和项目解读

标签: ASP.NETCore 1. 前言 作为一个.NET Web开发者,我最伤心的时候就是项目开发部署时面对Windows Server上贫瘠的解决方案...

27460

扫码关注云+社区

领取腾讯云代金券