Reverse 学习(二) - IDA 大好き
上一节提到了逆向(和Pwn)中利用最广的工具:IDA。那么今天我们来重点讲讲这IDA应该如何使用(基础用法,难的我不会)。
学习要求
- 会用鼠标
- 会用键盘
- 其它跟上一节一致
[undefined](想不到标题名)
对于刚入门的 re新星来说,最常见的还是静态分析的题目,我们可以使用IDA来进行反汇编以及进一步的反编译工作。
IDA Pro(interactive Disassembler Professional)是由 Hex-Rays 公司出品的一款交互式反汇编工具,也是软件逆向工程当中最流行的一个静态分析工具。
在之前和之后的章节中,我们提到的 IDA 其实指的就是 IDA Pro。
这里,我们假设您已经安装好了 IDA Pro。
用IDA打开程序
俗话说的好,千里之行,始于足下。你想用IDA来逆向程序,那你肯定要先用IDA打开这个程序。
如果你成功地安装了IDA Pro,那你的桌面上应该会有两个IDA,一个是32位的(x32/32-bit),一个是64位的(x64/64bit),与要分析的程序对应。32位IDA不能打开64位程序,64位IDA能打开32位程序,但是只能反汇编不能反编译。
想要分析一个程序,我们可以将这个程序拖到对应的IDA图标上,IDA一般都能自动识别出程序类型,会弹出如下弹框:
一般来说,这里我们一般都不用动这些选项,直接点OK就行了。
这个OK点完,还可能出现如下图所示弹窗:
出现这个弹窗就说明你有芙了,这个弹窗是用来询问你是否加载程序编译时自带的调试信息(也就是 gcc -g
),看到这个狠狠地点 Yes
就完事了,这样有很多程序的函数名和变量名等都会被保留。(加载调试信息和不加载调试信息,你打开程序后可以明显看出区别,感兴趣的可以自己试试)
除了这个弹窗,还有可能会出现一些别的弹窗,一般来说,如果你看不懂,点 Yes
/ OK
就完事了(“啊对对对”)。
可能有很多同学不懂得64位程序和32位程序的区别,也不知道怎么辨别程序是64位和32位,暂时对指令集知识一窍不通。没关系,我这里有个非常简单的方法:如果你不知道你要逆向的程序是多少位的,你可以先用32位IDA打开它,如果显示 Please use 64-bit IDA to load PE+ files
就说明这个程序是64位的,你再用64位IDA打开它,否则这个程序就真的是32位的。(这个方法主要是防止发生你用64位IDA成功打开了32位程序但却反编译不了的尴尬场景,懂哥就不用这么试了)
成功打开程序后的IDA界面
完成上一步后,我们就会看到这样一个界面:
其中,左边那名为 Function Windows
的一列,是 IDA 所识别出来的函数列表,双击这个表里的函数名可以直接跳转到对应函数。
中间那几页介绍如下:
IDA-View
:以汇编形式呈现的由 IDA 进行反编译所得的单个函数结果,默认是以由基本块构成的控制流图的形式进行展示,也可以通过空格
键切换到内存布局中的原始汇编代码Hex View
: 二进制文件的原始数据视图(有点类似于在16进制编辑器中打开的样子)Structures
:由 IDA 所识别出来的程序中可能存在的结构体信息Enums
:由 IDA 所识别出来的程序中可能存在的枚举信息Imports
: 该二进制文件运行时可能需要从外部导入的符号Exports
: 该二进制文件可以被导出到外部的符号
对要进行反编译的函数按 F5
键,可以对这个函数进行反编译,IDA会自动将汇编代码尽力反编译为 C/C++ 形式的源代码。
在后面,我们称 IDA-View
为“反汇编界面”,Pseudocode
为“反编译界面”。
反编译界面基本操作
注意:此节所讲的一些操作,大多在反汇编界面中也可使用。
有时候,为了能更好的阅读代码,我们可能想要修改变量名。单击可以选中某个变量,对其按右键弹出菜单,其中有几个选项可以重点注意:
Rename lvar...
:快捷键N
,重命名变量Set lvar type..
:快捷键Y
,设置变量的类型Jump to xref...
:快捷键X
,列出有哪些地方的代码使用了这个变量
对函数名按右键,也可以对函数进行类似的操作:
Rename global item...
:快捷键N
,重命名函数Set item type..
:快捷键Y
,设置函数的类型(比如返回值、参数类型等)Jump to xref...
:快捷键X
,列出有哪些地方的代码调用了这个函数
其它常用快捷键
Shift+F12
:打开Strings
窗口,可以列出程序中所有字符串,可以用来定位程序的主体代码
(未完待续)
例题
本期就先写到这里,主要讲了讲IDA的一些基础用法,下期将会写一下逆向题目的基础做法。
参考资料
[1] IDA Pro - CTF Wiki :https://ctf-wiki.org/reverse/tools/static-analyze/ida/
以上内容仅供参考,如有错漏,也很正常。
作者:CHTXRT
出处:https://blog.csdn.net/CHTXRT
本文使用「CC BY-ND 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。