PWN工具之IDA Pro

IDA Pro是一款由Hex-Rays开发的反汇编软件,可以用于逆向工程、漏洞分析、恶意代码分析、软件调试等领域。它支持多种处理器架构和操作系统,具有强大的反编译功能,可以将二进制文件转换为高级语言代码。除了反编译功能,IDA Pro还提供了许多其他功能,如动态调试、代码浏览、数据交叉引用分析、可视化分析等。IDA Pro是逆向工程师和安全研究人员的重要工具之一,被广泛应用于软件安全领域。

IDA目录结构

在IDA的安装根目录下有许多文件夹,各个文件夹存储不同的内容

cfg:包含各种配置文件,基本IDA配置文件ida.cfg,GUI配置文件idagui.cfg,文本模式用户界面配置文件idatui.cfg,
idc:包含IDA内置脚本语言IDC所需要的核心文件
ids:包含一些符号文件
loaders:包含用于识别和解析PE或者ELF
plugins:附加的插件模块
procs:包含处理器模块

常用快捷键

IDA中的快捷键都是和菜单栏的各个功能选项一一对应的,基本上你只要能在菜单栏上找到某个功能,也就能看到相应的快捷键,这里记录几个常用的:

a:将数据转换为字符串

f5:一键反汇编

esc:回退键,能够倒回上一部操作的视图(只有在反汇编窗口才是这个作用,如果是在其他窗口按下esc,会关闭该窗口)

shift+f12:可以打开string窗口,一键找出所有的字符串,右击setup,还能对窗口的属性进行设置

ctrl+w:保存ida数据库

ctrl+s:选择某个数据段,直接进行跳转

ctrl+鼠标滚轮:能够调节流程视图的大小

x:对着某个函数、变量按该快捷键,可以查看它的交叉引用

g:直接跳转到某个地址

n:更改变量的名称

y:更改变量的类型

/ :在反编译后伪代码的界面中写下注释

:在反编译后伪代码的界面中隐藏/显示变量和函数的类型描述,有时候变量特别多的时候隐藏掉类型描述看起来会轻松很多

:在反汇编后的界面中写下注释

ctrl+shift+w:拍摄IDA快照

u:undefine,取消定义函数、代码、数据的定义

常用设置

拍摄快照

由于IDA不提供撤销的功能,如果你不小心按到某个键,导致ida数据库发生了改变,就得重新来过,所以要记得在经常操作的时候,加上快照:file-->take database snapshot
加完快照后,会生成一个新的ida数据库文件,本质上是有点像另存的操作

快捷键:ctrl+shift+w

菜单栏常用设置

view-->open subviews: 可以恢复你无意中关闭的数据显示窗口

windows-->reset desktop: 可以恢复初始ida布局

option-->font: 可以改变字体的相关属性

在流程视图中添加地址偏移

IDA中的流程视图可以说是非常的好用,简单明了地能看出程序的执行流程,尤其是在看if分支代码和循环代码的时候,能够非常直观

但是,我们还可以改得更加好用,在这个视图中添加地址偏移的话,我们取地址就非常方便,不再需要按空格切换视图去找,在菜单栏中设置:option-->general

将该选项打钩后就可以看到效果了:

自动添加反汇编注释

这个功能对于新手来说非常友好,在刚刚初学汇编的时候, 难免遇到几个不常用的蛇皮汇编指令,就得自己一个个去查,很麻烦,开启了自动注释的功能后,IDA就可以直接告诉你汇编指令的意思

同样是在菜单栏中设置:option-->general

效果如下:

常用操作

创建数组

在操作IDA的时候,经常会遇到需要创建数组的情况,尤其是为了能方便我们看字符串的时候,创建数组显得非常必要,以下我随便找了个数据来创建数组

首先点击选中你想要转换成数组的一块区域:

接着在菜单栏中选择:edit-->array,就会弹出如下的选项框:

下面是各个参数的意思:

Array element size 这个值表示各数组元素的大小(这里是1个字节),是根据你选中的数据值的大小所决定的

Maximum possible size 这个值是由自动计算得出的,他表示数组中的元素的可能的最大值

Array size 表示数组元素的数量,一般都根据你选定的自动产生默认值

Items on a line 这个表示指定每个反汇编行显示的元素数量,它可以减少显示数组所需的空间

Element print width 这个值用于格式化,当一行显示多个项目时,他控制列宽

Use “dup” construct :使用重复结构,这个选项可以使得相同的数据值合并起来,用一个重复说明符组合成一项

Signed elements 表示将数据显示为有符号数还是无符号数

Display indexes 显示索引,使得数组索引以常规的形式显示,如果选了这个选项,还会启动右边的Indexes选项栏,用于选择索引的显示格式

Create as array 创建为数组,这个一般默认选上的

创建好了以后,就变成了这样:

可以看到这些数据已经被当成一个数组折叠到了一起,其中2 dup(0FFh)这样的,表示有两个重复的数据0xff

流程图

折叠流程图中的分支

在流程视图中,分支过多的时候,可以在窗口标题处右击选择group nodes,就能把当前块折叠起来:

效果如下:

分支块是可以自己命名的,方便自己逆向理解

函数调用图

菜单栏中:view-->graphs-->Function calls(快捷键Ctrl+F12)


这个图能很清楚地看到函数之间是如何相互调用的

函数流程图

菜单栏中:view-->graphs-->flowt chart(快捷键F12)

创建结构体:

手工创建结构体

创建结构体是在IDA的structures窗口中进行的,这个操作在堆漏洞的pwn题中经常使用

还没学到堆,以后再写

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值