[Reverse]IDA使用保姆级指南

IDA

软件介绍

file
file

IDA会出现两个图标,其中X64是用来反编译64位程序的,而X32是用来反编译32位程序的。

如何查看程序位数

常用的软件有exeinfope.exe

[Reverse]IDA使用保姆级指南_第1张图片

或者使用IDA软件本身查看

[Reverse]IDA使用保姆级指南_第2张图片

如何开始逆向

使用ida打开程序后会出现界面

[Reverse]IDA使用保姆级指南_第3张图片

通常情况下,这个界面可以直接使用ok来继续,该界面主要是选择什么模式去解析该软件。

进入IDA

[Reverse]IDA使用保姆级指南_第4张图片

IDA的主要界面如上所示

左侧窗口为函数列表窗口,右侧窗口为IDA反汇编所得的汇编代码,最下侧窗口为文件在反汇编过程中的信息。

菜单栏

file

菜单栏名称 用途
File 用于打开、新建、装载、保存、关闭一个文件或是数据库
Edit 用于编辑反汇编代码
Jump 用于跳转到某个位置、地址或是一个窗口
Search 用于搜索代码段、数据、错误等等
View 用于显示文件内容的显示方式
Debugger 调试器,集成在IDA中
Lumina 对元数据进行各种操作
Options 可以进行一些个性化的设置
Windows 各种窗口

基本操作

反汇编代码

在IDA中我们进来后首先看到的界面如下
[Reverse]IDA使用保姆级指南_第5张图片

通过快捷键F5或者TAB来查看源代码

[Reverse]IDA使用保姆级指南_第6张图片
通过TAB切换回原来的汇编界面

在如上的汇编界面使用空格可以切换为文本模式

[Reverse]IDA使用保姆级指南_第7张图片

该模式会显示出地址栏以及更详细的很多信息

查看程序中出现的所有字符串

分析一个程序最直接最方便的方式就是先查看程序存在哪些字符串,从字符串中我们可以找到关于程序的线索,因此我们需要使用“SHIFT + F12”快捷键打开程序的字符串调用窗口。

[Reverse]IDA使用保姆级指南_第8张图片

通过字符串或者函数交叉引用上级调用

大部分字符串和函数基本都存在一个被调用的关系,我们找到了关键字符串,如何定位到调用该字符串的函数呢,显然就是通过交叉引用。

示例程序中字符窗口如下
[Reverse]IDA使用保姆级指南_第9张图片

看到需要我们输入flag的字符串,我们双击该字符串

[Reverse]IDA使用保姆级指南_第10张图片

随后点击该字符串的变量名称,按“CTRL + X”
[Reverse]IDA使用保姆级指南_第11张图片

出现的窗口中该处便是调用的位置了,我们点击OK跟踪过去。

[Reverse]IDA使用保姆级指南_第12张图片

就可以定位到调用该字符串的位置了,调用函数的操作方法与字符串一致,点击函数头的函数名称就按下快捷键就可以。

更改变量或者函数名称

[Reverse]IDA使用保姆级指南_第13张图片

在我们逆向代码的过程中通常会看见各种以地址命名的函数,这种函数看起来十分的麻烦,因此我们需要使用“N”这个快捷键来更改函数或者变量的名称

操作方法

选中该函数后按N

[Reverse]IDA使用保姆级指南_第14张图片

输入需要更改的函数名称后按ok即可

[Reverse]IDA使用保姆级指南_第15张图片

更改变量类型

[Reverse]IDA使用保姆级指南_第16张图片
进入IDA的时候IDA经常会自己定义一个变量名称,但是IDA不能保证变量类型一定正确,此时就需要我们通过代码逻辑等等去判断变量正常的数据类型

操作方法

我们选中变量的数据类型按快捷键"Y"

[Reverse]IDA使用保姆级指南_第17张图片

更改int为任意类型即可

更改代码类型

file

通常IDA可能会将正常的代码识别成数据,因此我们需要手动更改代码的类型来让我们能过够看到的代码变正常

操作方法

通过使用快捷键C来将数据改成代码

[Reverse]IDA使用保姆级指南_第18张图片

[Reverse]IDA使用保姆级指南_第19张图片
同理,如果你需要将代码转化为数据,需要使用“D”来转换

声明未声明的代码

[Reverse]IDA使用保姆级指南_第20张图片

未声明的代码特征如上所示,地址段是爆红的,这种代码段如果我们直接使用f5会发现IDA没有任何反应,因此,我们需要选中所有的需要声明的代码,或者选中该段代码所代表的函数的函数头,按“P”进行一个声明。

[Reverse]IDA使用保姆级指南_第21张图片
声明完成后,会发现函数头部出现了寄存器的标识,此时使用F5正常了

动态调试

动态调试又分为本地调试和远程调试。其中本地调试可以调试的就是本地能够运行的程序,如果本地无法运行的程序,那我们需要远程连接至虚拟机或者服务器进行调试

本地调试

在IDA中,反汇编界面的左边通常会出现一个个断点。

[Reverse]IDA使用保姆级指南_第22张图片

这些断点的作用是在执行程序的过程中插入一个int 9来执行一个终端程序的作用,那么我们断点下在哪儿就可以直接将程序的运行过程断在哪儿。

[Reverse]IDA使用保姆级指南_第23张图片

如上图所示,我们断下断点后,按下F9进行一个调试。
[Reverse]IDA使用保姆级指南_第24张图片

启动之后会发现栈空间以及寄存器的内容都会出现在右边的显示框中。此时我们可以通过按F8来进行单步运行
[Reverse]IDA使用保姆级指南_第25张图片

效果如上所示.

跳跃

在我们运行程序过程中,通常会遇到循环,但是有些循环过于庞大,如果我们使用F8一直单步进入的话,则过程将会十分的痛苦,因此我们可以在程序的运行过程中下另一个断点,然后直接按“F9”来跳跃到该断点。

效果如下图所示。

[Reverse]IDA使用保姆级指南_第26张图片

远程调试

在IDA的目录中存在一个叫做dbgsrv的文件夹

[Reverse]IDA使用保姆级指南_第27张图片

里面内容如下:

[Reverse]IDA使用保姆级指南_第28张图片

此处我们展示的是Linux环境下的远程调试

[Reverse]IDA使用保姆级指南_第29张图片

我们需要将上图中框住的两个程序放入我们的虚拟机中,其中后缀带有64的是64位的远程调试需要用到的环境,而不带的是32位

注意首先运行该程序需要使用chmod +x 命令赋予该程序权限,然后执行该文件

[Reverse]IDA使用保姆级指南_第30张图片

显然这就开始监听了。

此时我们还需要使用ifconfig查看自己的ip

[Reverse]IDA使用保姆级指南_第31张图片

依然是下断点然后按“F9”

[Reverse]IDA使用保姆级指南_第32张图片

选择Remote Linux debugger然后点击ok

[Reverse]IDA使用保姆级指南_第33张图片

输入虚拟机的IP地址点击ok

[Reverse]IDA使用保姆级指南_第34张图片

操作方法和上面的本地调试一致

你可能感兴趣的:(c++,安全,idea)