跟着王哥学逆向——工具篇(IDA Pro)

这是《跟着王哥学逆向》工具篇,该篇章主要对两款逆向工具进行详解,其中包括IDA Pro和Ghidra。其中该篇章主要对IDA Pro进行详解。主要基于自己的理解和网上公开资料,将里面一些功能、操作、使用技巧等记录下来方便自己后续学习查看。

IDA Pro

简介

交互式反汇编器专业版(Interactive Disassembler Professional)常称为 IDA Pro。IDA 是一种递归下降反汇编器,是个逆向分析的神器之一,可以分析x86、x64、ARM、MIPS、Java、.NET等众多平台的程序代码,是安全分析人士不可缺少的利器!IDA是Hex-Rays公司的旗舰产品,公司位于比利时,能写出这种软件的人都是超级大牛。

安装

可以参考其他博主,网上相关帖子非常多
链接:https://pan.baidu.com/s/1S6KNf9xK9E82cIgcQFeOFQ?pwd=c6xa
提取码:c6xa
资源来自于逆向分析学习小纪

使用介绍

这里以BUUCTF里面一道easyre题来展开对IDA的使用说明

新建工程

1.针对采用不同位置指令集架构的可执行文件,我们需要选择对应位数的IDA程序
在这里插入图片描述
2.在这里我们选择64位并打开,其中“New”选项是直接打开要分析的程序,“Go”选项是先启动IDA界面
在这里插入图片描述
3.这里我们选择Go选项,启动页面后,通过菜单栏中的File→Open,选择需要分析的目标程序。随后出现下图页面。【目前默认就可以】
在这里插入图片描述
这里IDA 生成了一个可能的文件类型列表,并在对话框顶部显示这个列表。这个列表中将显示最适合处理选定文件的 IDA 加载器。IDA 通过执行 loaders 目录中的每一个文件加载器,来确定能够识别新文件的加载器,从而建立了这个列表。
如果 IDA 提供几个加载器,这时选择默认选项是一个不错的策略,除非你拥有推翻 IDA 决定的信息。
4.【默认即可】
在这里插入图片描述
5.随后可进入下述主窗口

常用窗口介绍

IDA的主窗口就如下图所示在这里插入图片描述
函数窗口(Functions window):
其中上述左侧为函数窗口,该窗口会将所有的函数都显示出来。我们在拿到一个题目的时候一般都是从主函数开始分析,但是主函数一般不会直接显示出来,所以我们可以使用搜索,采用ctrl+F快捷键即可,如下图。
在这里插入图片描述
汇编窗口(IDA views):
该窗口是汇编窗口,存在两种方式
1.图形模式
在这里插入图片描述
2.文本模式
展示了一些汇编代码和地址在这里插入图片描述
其中图形模式按右键 选择 Text view 或者点击 空格键 进入文本模式
伪代码窗口:
在汇编窗口文本模式中对着函数点F5即可弹出伪代码窗口。其是将汇编语言变成伪代码,方便阅读。
在这里插入图片描述
十六进制窗口:
习惯讲是“十六进制窗口”,但将这个窗口称做“十六进制窗口”其实是一种误称,因为IDA十六进制窗口可以配置为显示各种格式,并可作为十六进制编辑器使用。默认情况下,十六进制窗口显示程序内容和列表的标准十六进制代码,每行显示16个字节,以及其对应的ASCII字符。和在反汇编窗口中一样,用户也可以同时打开几个十六进制窗口
在这里插入图片描述
消息窗口:
显示IDA输出的信息,用户可以通过输出信息找到文件分析有关的状态信息和操作导致的错误信息,这个窗口类似于Pycharm等软件的Console控制台。
在这里插入图片描述
导航栏:
彩色的水平带是 IDA 的概况导航栏,也叫做导航带。导航带是被加载文件地址空间的线性视图。默认情况下,它会呈现二进制文件的整个地址范围。你可以右击导航带内任何位置。在导航带上,会有一个细小的当前位置指示符(默认为黄色)指向与当前反汇编窗口中显示的地址范围对应的导航带地址。将光标悬停在导航带的任何位置,IDA 会显示一个提示,指出其在二进制文件中的对应位置。
简单来说,点到哪里跳到哪里,而不同的颜色代表了不同的数据段,比如说data段,text段等
在这里插入图片描述

修正

主要处理IDA错误处理的数据。
1、函数修正:
通常来说,push ebp/rbp指令开头的地址是函数的起始地址,但有时候IDA未能正确识别其为函数,这时候我们可以手动将其创建为函数。
具体操作为:在起始地址汇编代码处,使用快捷键“p”即可(右键选择Create Function亦可0)。
2、指令修正:
若某些指令识别错误,可以选中后利用快捷键“d”手动修正。
3、数据修正
同样的,在数据段中,一个数据的长度可能为1/2/4/8字节,此时亦可通过快捷键“d”来修改为对应类型。如果数据中某部分为字符串,但没有正确识别,可以点击通过快捷键“a”将其转换为ASCII字符串。

注释信息和重命名

重命名:
在IDA使用过程中,可通过修改程序中的变量或者函数名等信息,帮助使用者理解和分析程序,在需要重命名处点击右键,选择“Rename”即可重命名。在这里插入图片描述
注释信息:
此外可以添加注释,快捷键“;”可以在反汇编窗口中添加注释,快捷键“/”可在反编译窗口中添加注释,另外IDA对于不常用处理器架构编写的程序,可开启自动注释功能,开启时选中的“Auto comments”即可。
在这里插入图片描述

交叉引用

IDA的交叉引用有两类:
代码交叉引用:
用于表示某指令将控制权转交给另一指令,可以了解指令→指令、指令→函数之间的调用关系。
数据交叉引用:
用于追踪二进制文件访问数据情况,可以了解指令→数据之间的访问关系。
这里需要比较好的汇编知识,但我自己现在比较匮乏。

常用快捷键

F5:
在汇编窗口中使用可以生成对应函数的伪代码
Ctrl+F5:
可以将伪代码导出保存下来
Shift+F12:
在汇编窗口中使用可以打开字符串窗口。这个窗口展示了所有的字符串,我们可以在这里查找一些关键的字符串,我们也可以通过双击某一特殊字符串,弹到汇编窗口(IDA View)中该字符串对应的位置中去。查找某字符串快捷键为Ctrl+F。
在这里插入图片描述
Ctrl+X(交叉引用):
在汇编窗口中我们可以通过这个操作,可以判断哪些函数引用了这个字符串或数据。点击OK会跳到相应位置。
在这里插入图片描述
Alt+T(文本搜索)
IDA文本搜索相当于对反汇编列表窗口文本模式进行子字符串搜索。点击搜索到字符串的内存位置自动跳到汇编窗口中对应位置。
在这里插入图片描述
它将搜索限制于仅查找完整的词,并且能够匹配反汇编行中的任何完整的词,包括操作码助记符或常量。
选择Find all occurences(查找所有结果),IDA将在一个新的窗口中显示搜索结果,你可以根据搜索条件轻松导航到任何一个匹配结果。
G(跳转地址)
前面说过汇编窗口界面,左边是一些地址,右边是汇编代码
我们在浏览这些代码的过程中,往下往上翻页,可能找不到原来的地方了,或者有时候,你清楚地知道你想要导航的目的地址,但反汇编窗口中并没有可供双击导航的名称。这时我们就可以通过该操作跳转到相应的位置。
在这里插入图片描述N(重命名)
于一些函数名或者变量名,我们可以改为方便我们理解的函数名。
不小心改错了?
Ctrl+Z(撤回操作)
撤回到上一步

数据类型转换快捷键

为什么会单独列出来这个呢,是因为之前做的一个逆向题目,他的flag形式是16进制ASCII值,然后我看半天没看出来。
D (转换成数据形式)
我们在分析数据的时候,有时候需要这样做,将字符串转换成数据
A(转换成字符形式)
转换成字符串
C(转换成汇编代码)
转换成汇编代码
U (转成原始字符)
转换成最原始的状态
Shift+E (导出数据)
如果有想导出的数据,选中然后shift+e,选择你想导出的方式。
在这里插入图片描述
数据转化形式
我们在分析伪代码的时候,有时候要对一些数据进行类型转化。右键数据,可以产生如下选项:
在这里插入图片描述
Hexadecimal:十六进制 Octal:八进制 Char:字符 Enum:枚举

题目easyre如何解决?

其实已经解决了,当我们在Function window中找到main函数,在汇编窗口中,对着函数点击F5得到伪代码界面,通过分析伪代码,如果我们输入两个一致的数据就可以打印出来flag。

写在最后

至此,IDA一些常用的窗口与功能已经介绍完毕,当然还有很多功能等待我们去探索,在平时的训练中,我们可以多去做题来加强对该软件的熟练应用。
当然如果有需要进阶的可以通过看书来更加全面了解该软件的功能。有需要的可以私聊我要。
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值