菜鸟的逆向工程学习之路——逆向工具IDA的使用

菜鸟的逆向工程学习之路——逆向工具IDA的使用

本期向大家详细介绍IDA的使用。

交互式反汇编器专业版(Interactive Disassembler Professional),人们常称为 IDA Pro。就其本质而言,IDA 是一种递归下降反汇编器,是个逆向分析的神器之一,可以分析x86、x64、ARM、MIPS、Java、.NET等众多平台的程序代码,是安全分析人士不可缺少的利器!

启动IDA

只要启动 IDA,你都会看到一个初始欢迎界面,上面显示你的许可证信息摘要。初始屏幕消失后,IDA 将显示另一个对话框,为你进入桌面环境提供 3 种选项

在这里插入图片描述

New(新建)。选择 New 将启动一个标准的 File Open 对话框来选择将要分析的文件。根

据选择的文件,IDA 会显示另外一个或多个对话框,你可以选择特定的文件分析选项,

然后再加载、分析和显示该文件。

Go(运行)。Go 按钮终止加载过程,使 IDA 打开一个空白的工作区。这时,如果要打开

一个文件,可以将一个二进制文件直接拖放到 IDA 工作区,或者使用 File 菜单中的某个

选项打开该文件。

Previous(上一个)。使用 Previous 按钮可以打开其下“最近用过的文件”列表中的一个

文件。“最近用过的文件”列表中包含 IDA 的 Windows 注册表项的 History 子项中的值。


IDA 文件加载

打开一个新文件时,会看到如图所示的加载对话框。

在这里插入图片描述

IDA 会生成一个可能的文件类型列表,并在对话框顶部显示这个列表。这个列表中将显示最适合处理选定文件的 IDA 加载器。IDA 通过执行 loaders 目录中的每一个文件加载器,来确定能够识别新文件的加载器,从而建立了这个列表。

如果 IDA 提供几个加载器,这时选择默认选项是一个不错的策略,除非你拥有推翻 IDA 决定的信息。

简言之:选默认

在这里插入图片描述

同样的,选默认


IDA关闭数据库

任何时候你关闭一个数据库,无论你是完全关闭 IDA,还是切换到另一个数据库,IDA 都将

显示一个 Save database(保存数据库)对话框,如图

在这里插入图片描述

如果这是你初次保存一个新建的数据库,IDA 会用扩展名.idb 替换输入文件的扩展名,从而生成新数据库的文件名,例如,example.exe 会生成名为 example.idb 的数据库。如果输入文件没有扩展名,IDA 会将.idb 附加到输入文件名称后面,构成数据库名称,如 httpd 生成 httpd.idb。

下面简要说明可用的保存选项及其意义。

Don’t pack database(不打包数据库)。这个选项仅仅刷新对 4 个数据库组件文件所做的更改,在关闭桌面前并不创建 IDB 文件。在关闭数据库时,不建议使用这个选项。

Pack database(Store)[打包数据库(存储)]。选择 Store 选项会将 4 个数据库组件文件存到一个 IDB 文件中。之前的任何 IDB 不经确认即被覆盖。Store 选项不使用压缩。创建 IDB 文件后,4 个数据库组件文件即被删除。

Pack database(Deflate)[打包数据库(压缩)]。Deflate 选项等同于 Store 选项,其唯一的差别在于数据库组件文件被压缩到 IDB 归档文件中。

Collect garbage(收集垃圾)。如果请求垃圾收集,IDA 会在关闭数据库之前,从数据库中删除任何没有用的内存页面。在选择这个选项的同时,选择 Deflate 选项可创建尽可能小的 IDB 文件。通常,只有在磁盘空间不足时才选择这个选项。

DON’T SAVE the datebase(不保存数据库)。你可能会感到奇怪,怎么会有人不保存自己的工作呢!要知道,要想放弃你当前对数据库所做的更改(上次保存之后),使用这个选项是唯一的办法。选择这个选项时,IDA 会删除 4 个数据库组件文件,保留现有的未经修改的 IDB 文件。使用这个选项类似于在使用 IDA 时应用了撤销或还原功能。


IDA常用窗口简单介绍

我们首先以BUUCTF网站的easyre题介绍

函数窗口(Functions window)

左侧是函数窗口,会将程序中所有的函数显示出来

在这里插入图片描述

我们分析一道题目的时候一般是先从主函数开始

但是main一般不会显示出来,我们这时可以先搜索,用 Ctrl+F 快捷键

然后点击main,即可跳转到main函数里

在这里插入图片描述


汇编窗口(IDA View)

现在可见的是汇编窗口,展示的汇编代码,如图所示的是图形模式

在这里插入图片描述

我们可以按右键 选择 Text view 或者点击 空格键 进入文本模式

展示了一些地址和汇编代码

在这里插入图片描述


“十六进制窗口”(Hex View)

习惯讲是“十六进制窗口”,但将这个窗口称做“十六进制窗口”其实是一种误称,因为IDA十六进制窗口可以配置为显示各种格式,并可作为十六进制编辑器使用。默认情况下,十六进制窗口显示程序内容和列表的标准十六进制代码,每行显示16个字节,以及其对应的ASCII字符。和在反汇编窗口中一样,用户也可以同时打开几个十六进制窗口

在这里插入图片描述


导航栏

彩色的水平带是 IDA 的概况导航栏,也叫做导航带。导航带是被加载文件地址空间的线性视图。默认情况下,它会呈现二进制文件的整个地址范围。你可以右击导航带内任何位置

在这里插入图片描述

在导航带上,会有一个细小的当前位置指示符(默认为黄色)指向与当前反汇编窗口中显示的地址范围对应的导航带地址。将光标悬停在导航带的任何位置,IDA 会显示一个提示,指出其在二进制文件中的对应位置。

简单来说,点到哪里跳到哪里

而不同的颜色代表了不同的数据段,比如说data段,text段等


伪代码窗口(Pseudocode)

对着函数点F5即可弹出伪代码窗口

在这里插入图片描述

是将汇编语言,变成伪代码,即展示了一些类c代码


先简单介绍这么多窗口,其余窗口在实际用到时再介绍学习。

打开所有的函数窗口的方式

View > Open subviews > …

在这里插入图片描述

快捷键 / 一些操作的介绍

Shift+F12

可以打开字符串窗口(String window)
在这里插入图片描述

这个窗口展示了所有的字符串,我们可以在这里查找一些关键的字符串,我们也可以通过双击某一特殊字符串,弹到汇编窗口(IDA View)中该字符串对应的位置中去。

Ctrl+X(交叉引用)

我们可以通过这个操作,可以判断哪些函数引用了这个字符串或数据

在这里插入图片描述

点击ok,便会跳转到相应地方

G(跳转地址)

前面说过汇编窗口界面,左边是一些地址,右边是汇编代码

我们在浏览这些代码的过程中,往下往上翻页,可能找不到原来的地方了,或者有时候,你清楚地知道你想要导航的目的地址,但反汇编窗口中并没有可供双击导航的名称。这时我们就可以通过该操作跳转到相应的位置。

在这里插入图片描述

Alt+T(文本搜索)

IDA文本搜索相当于对反汇编列表窗口进行子字符串搜索。

在这里插入图片描述

它将搜索限制于仅查找完整的词,并且能够匹配反汇编行中的任何完整的词,包括操作码助记符或常量

选择Find all occurences(查找所有结果),IDA将在一个新的窗口中显示搜索结果,你可以根

据搜索条件轻松导航到任何一个匹配结果。

N(重命名)

对于一些函数名,我们可以改为方便我们理解的函数名在这里插入图片描述

如果不小心改错了怎么办?

Ctrl+Z(撤回操作)

撤回到上一步

/ ( 注释操作)

在方框内添加注释,程序员必备,不多讲

在这里插入图片描述


我们下面用第二道题,reverse1来演示

这道题首先搜索main函数,没找到,怎么办呢?

我们用之前讲的查找字符串(shift+f12)

发现一些有用的信息

在这里插入图片描述

再根据我们之前讲的,定位,交叉引用,编译伪c代码,可以找到我们关键需要分析的地方

在这里插入图片描述

我们会发现在上述代码中,自带了一些注释,有时候会过多,可能会影响我们分析

\ (隐藏系统注释)

我们可以用这种方法隐藏干扰我们的一些自带的注释。

D (转换成数据形式)

我们在分析数据的时候,有时候需要这样做,将字符串转换成数据

A(转换成字符形式)

转换成字符串

C(转换成汇编代码)

转换成汇编代码

U (转成原始字符)

转换成最原始的状态

Shift+E (导出数据)

如果有想导出的数据,选中然后shift+e,选择你想导出的方式

在这里插入图片描述

便会导出

数据转化形式

我们在分析伪代码的时候,有时候要对一些数据进行类型转化

右键数据,可以产生如下选项

在这里插入图片描述

Hexadecimal 十六进制

Octal 八进制

Char 字符

Enum 枚举


至此,IDA一些常用的窗口与功能已经介绍完毕,未介绍的将在遇到实际应用场景时再行学习。

  • 21
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
逆向工程是指通过逆向分析已有软件的代码和结构,从中获取信息并了解其功能和设计思路的过程。而IDA(Interactive DisAssembler)是逆向工程过程中常用的工具之一,它能够将二进制程序文件或动态链接库文件转换为汇编代码,以方便分析和理解。 逆向工程CTF(Capture The Flag)比赛中,参赛者需要通过逆向工程手段来获取隐藏在某个程序或应用中的标志(flag),常以此为目标进行竞赛。而IDA被广泛用作CTF逆向工程比赛的关键工具之一,主要用于分析并理解被逆向的程序。 通过IDA,参赛者可以加载二进制文件,然后通过静态或动态分析的方法获取程序的结构和逻辑。IDA提供友好的界面,能够将二进制代码转换为易于阅读和理解的汇编代码,并提供多种各类的分析功能,例如交叉引用分析、函数分析、字符串分析、结构和类分析等。这些功能使得解析程序的逻辑和功能变得更加方便和高效。 在逆向工程CTF中,参赛者需要运用IDA的各种功能,结合代码和结构分析,找出隐藏的标志(flag)。这个过程需要具备较强的程序分析能力和逻辑推理能力,同时对底层汇编语言和常见算法有一定了解。 综上所述,IDA作为逆向工程的重要工具,在逆向工程CTF中发挥着重要作用,通过IDA使用,参赛者可以分析和理解不同程序的结构和逻辑,进而找到隐藏的标志(flag)以完成比赛的任务。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值