专栏首页代码GG之家IDA Pro 工具介绍

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)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 封装之路(三)架构模型

    封装之路(三)架构模型 ? 前面写了BaseApp和BaseActivity的源码,有留言询问怎么使用,这里简单说下: 这个框架的形成原因是由于自己在学习开发a...

    用户1263308
  • 技术拾遗系列 | GCC的系统宏定义查询 以及默认环境变量

    分享几个命令,当我们在看一些开源项目,被里面的很多错综复杂的宏包裹,于是想看下这些定义是怎么被定义的,于是用到了一些命令,很是实用,这节整理下来,分享给大家。 ...

    用户1263308
  • SDL系列讲解(十二)创建窗口流程

    SDL系列讲解(一) 简介 SDL系列讲解(二) 环境搭建 SDL系列讲解(三) 工具安装 SDL是什么,能干什么,为什么我们要学习它? SDL系列讲解(四)...

    用户1263308
  • 使用rsync进行大文件传输

    前由其实是个很有意思的问题,网站数据75G,压缩过后65G,原想着tar打包利用ftp发到另外一个服务器上,再解压...

    SweetHunter
  • 深入浅析Spring-boot-starter常用依赖模块

    2.针对日常企业应用研发各种场景的Spring-boot-starter自动配置依赖模块,且“开箱即用”(约定spring-boot-starter- 作为命名...

    技术zhai
  • 琐碎的JS性能优化

    4、小图使用base64。虽然base64编码的大小比原图大一些,但是可以减少http请求。

    Cloud-Cloudys
  • Golang在京东列表页实践总结

    Golang在京东列表页实践总结 作者:张洪涛 10余年软件开发和设计经验,曾就职于搜狐、搜狗、前matrixjoy公司联合创始人、甘普科技CTO。 目前线上状...

    李海彬
  • 2019最新iOS面试题及答案

    1. Object-C的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?

    iOSSir
  • 美团集群调度系统HULK技术演进

    值此佳节之际,美美为大家呈送一份技术干货作为中秋礼物。本文根据美团基础架构部/弹性策略团队负责人涂扬在2019 QCon(全球软件开发大会)上的演讲内容整理而成...

    CNCF
  • 美团集群调度系统HULK技术演进

    值此佳节之际,美美为大家呈送一份技术干货作为中秋礼物。本文根据美团基础架构部/弹性策略团队负责人涂扬在2019 QCon(全球软件开发大会)上的演讲内容整理而成...

    美团技术团队

扫码关注云+社区

领取腾讯云代金券