从0开始学逆向 第二期:最喜欢的IDA

Reverse 学习(二) - IDA 大好き

上一节提到了逆向(和Pwn)中利用最广的工具:IDA。那么今天我们来重点讲讲这IDA应该如何使用(基础用法,难的我不会)。

学习要求

  1. 会用鼠标
  2. 会用键盘
  3. 其它跟上一节一致

[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窗口,可以列出程序中所有字符串,可以用来定位程序的主体代码

(未完待续)

例题

BUUCTF-easyre


本期就先写到这里,主要讲了讲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」创作共享协议,转载请在文章明显位置注明作者及出处。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值