美文网首页
IDA 使用

IDA 使用

作者: LiuJP | 来源:发表于2020-03-16 15:16 被阅读0次

当IDA加载后,3个立即可见的窗口分别为IDA-View窗口、函数窗口和消息输出窗口,所有窗口都可通过View▶Open Subviews菜单打开

反汇编窗口

反汇编窗口也叫IDA-View窗口,它是操作和分析二进制文件的主要工具

0.在反汇编窗口中,ESC键的作用与Web浏览器的“后退”按钮类似,遗憾的是,在打开的其他窗口中,ESC键用于关闭窗口

IDA使用术语流来表示某个指令如何继续执行。正常流(也叫做普通流)表示指令默认连续执行。跳转流表示当前的指令跳转到(或可能跳转到)某个非连续性位置。调用流表示当前指令会调用一个子例程。

图形视图

图形视图会让人联想到程序流程图,因为它将一个函数分解成许多基本块,以生动显示该函数由一个块到另一个块的控制流程。

1.IDA使用不同的彩色箭头区分函数块之间各种类型的流。

根据测试条件,

在条件跳转位置终止的基本块可能会生成两种流:

Yes边的箭头(是的,执行分支)默认为绿色,No边的箭头(不,不执行分支)默认为红色。

只有一个后继块的基本块会利用一个正常边(默认为蓝色)指向下一个即将执行的块。

image

2.可以使用“CTRL+鼠标滑轮”来调整图形的大小:

在图形模式下,IDA一次显示一个函数,键盘缩放控制需要使用“CTRL+加号键”来放大,或使用“CTRL+减号键”来缩小,大型或复杂的函数可能会导致图形视图变得极其杂乱,但图形概况窗口会始终显示完整的块状结构,并用一个虚线框指出你当前所在的图形区域。你可用鼠标在概况窗口中拖动该虚线框,迅速调整到任何想到的位置。

3.平移操作:

除了使用“图形概况”窗口迅速定位图形外,你还可以通过单击和拖动图形窗口的背景来定位图形,注意是背景,不要点到自身上了

4.重新调整块位置:

通过单击指定块的标题栏并将其拖动到一个新位置,用户可以移动图形中的每一个块的位置

5.调整连接线:

在按下SHIFT键的同时,在连接线的任何位置双击鼠标(注意是双击),即可在该位置添加一个新顶点,然后你就可以通过顶点改变连接线的转向了

6.分组和折叠块:

可以对块分组,每个块单独分组,或者与其他块一起分组(使用Ctrl选择多块),并可将分组后的块折叠起来,以减少显示的混乱程度。

折叠块特别有用,可以帮助你追踪已经分析过的块。要折叠块,可以右击块的标题栏,然后在出现的菜单上选择“Group Nodes”。

7.打开行前缀:

要想显示与每个反汇编行有关的其他信息,可以通过Options▶General命令打开IDA常规选项,然后在Disassembly选项卡的可用的反汇编行部分选择相应的选项

image

8.打开新的反汇编窗口:

如果你想要同时查看两个不同函数的图形,可以通过Views▶Open Subviews▶Disassembly命令打开另一个反汇编窗口。这样打开的第一个反汇编窗口叫做IDA View-A。随后的反汇编窗口叫做IDA View-B、IDAView-C,依次类推。每个反汇编窗口都独立于其他窗口。你完全可以在一个窗口中查看一个图形,在另一个窗口中查看文本列表,或者在3个不同的窗口中查看3个不同的图形。

文本视图

文本显示窗口会呈现一个程序的完整反汇编代码清单(而在图形模式下一次只能显示一个函数),用户只有通过这个窗口才能查看一个二进制文件的数据部分。图形显示窗口中的所有信息均以某种形式存在于文本显示窗口中

1.虚拟地址:

以[区域名称]:[虚拟地址]这种格式显示,如.text:004011C1

2.左边箭头:

实线箭头表示非条件跳转,虚线箭头则表示条件跳转,如果一个跳转(条件或非条件)回到以前的某个地址,这时会使用粗线(实线或虚线),通常表示程序中存在循环

image

Proximity browser

使用小键盘的(0 Ins)和"+"、“-”组合切换,以图形模式显示程序调用图

以下代码为例:

1.  int read_it;   
2.  int write_it;   
3.  int ref_it;   

5.  void sub2callflow(){}  
6.  void subcallflow(){sub2callflow();}  
7.  void callflow()  
8.  {  
9.  if (ref_it){subcallflow();sub2callflow();}  
10.  }   

12.  int main()  
13.  {  
14.  int *p = &ref_it;  
15.  *p = read_it;  
16.  write_it = *p;  
17.  callflow();  
18.  if (read_it == 3)  
19.  {  
20.  write_it = 2;  
21.  }  
22.  else  
23.  {  
24.  write_it = 1;  
25.  }  
26.  callflow();  
27.  }  

在proximity view中,当前地址中,它的调用者和被调用者被以边线相连的节点集代替

节点(nodes)代表了函数和被引用的数据(全局变量、字符串等等)

边线(edges)代表了代码或数据之间的交叉引用

如选中callflow函数:

image

又如选中_main函数:(注意全局变量也是一个node)

image

Proximity view的node仅显示地址名(函数名或数据标签),不显示反汇编,尽管如此,把鼠标停留在一个node上将显示一个提示窗口,上面列出了简短的反汇编例表,如果

你想看完整的反汇编,那就只有切换模式了(num和+、或空格切换)

Proximity view的node有三种:函数节(Function nodes)、数据节(data nodes )、辅助节(auxiliar nodes)

函数窗口

用于列举IDA在数据库中识别的每一个函数

image

对应列:(可通过help搜索functions window查找)

1.  R - function returns to the caller// 函数返回给调用者  
2.  F - far function  
3.  L - library function<span style="white-space:pre">        </span> // 库函数  
4.  S - static function<span style="white-space:pre"> </span>         // 静态函数  
5.  B - BP based frame. IDA will automatically convert //并使用EBP寄存器(B)引用它的局部变量<span style="white-space:pre">   </span>  
6.  all frame pointer [BP+xxx] operands to stack  
7.  variables.  
8.  T - function has type information  
9.  = - Frame pointer is equal to the initial stack pointer  
10.  In this case the frame pointer points to the bottom of the frame  

双击Functions窗口中的一个条目,反汇编窗口将跳转到选定函数所在的位置(反汇编窗口会自动打开)

十六进制窗口

对应Views▶Open Subviews▶Hex dump,十六进制窗口可以配置为显示各种格式,并可作为十六进制编辑器使用,和在反汇编窗口中一样,可以同时打开几个十六进制窗口。第一个叫做Hex View-A,第二个叫做Hex View-B,依次类推。

0. 同步关联:

默认情况下,第一个十六进制窗口会与第一个反汇编窗口同步,你也可以通过在任一窗口中右击选击Synchronize

image

同步后,在一个窗口中滚动鼠标,另一个窗口也会滚动到相同的位置(同一个虚拟地址),选中地址会高亮

1.编辑:

右击菜单,选择Edit菜单项(F2)可将十六进制窗口转变为编辑器,这时可以自由编辑,完成编辑后,你必须提交或取消更改才能返回查看模式(F2保存,ESC撤消)

image

选中一块数据,按CTRL+C可以复制,被选中的为灰色(不包括蓝色部分),如下,选中的数据为34 FF FF FF B9 3(注意,最后是3,因为33只有一半被灰)

image

2.其他进制:

可以使用上图中的Data Format菜单项选择各种显示格式,如1、2、4、8字节十六进制,带签名的十进制,或不带签名的十进制整数及各种浮点格式。你可以使用Columns菜单项更改显示的列数,使用Text选项打开或关闭文本块

3.??显示

问号表示IDA无法识别给定的虚拟地址范围内的值,如果程序中包含一个bss节,就会出现这种情况。通常,bss节并不占用文件的空间,但加载器会扩展这一节,以适应程序的静态存储要求。

相关文章

  • IDA 使用

    当IDA加载后,3个立即可见的窗口分别为IDA-View窗口、函数窗口和消息输出窗口,所有窗口都可通过View▶O...

  • IDA使用

    function调出:上方菜单-view-open subviews-functions 输出窗口:上方菜单-wi...

  • 新手大全

    IDA使用大杂烩

  • IDA使用分析

    本测验IDA的使用 使用环境:IDA version 6.6.141224 open文件的时候 可能会出现 强行打...

  • IDA6.8动态调试so-windows

    1.打开cmd进入IDA6.8目录的dbgsrv子目录,执行以下命令: 2.IDA 设置 使用IDA调试安卓elf...

  • IDA使用教程

    IDA Pro:交互式反汇编器,是典型的递归下降反汇编器。 导航条:蓝色 表示常规的指令函数黑色 节与节之间的间隙...

  • IDC

    ida中的idc作为类似c语言的脚本语言,非常好用。使用学习方法参考。ida权威指南-扩展ida的功能 写段代码,...

  • go get配置国内源

    完事或者使用IDA配置当前下载地址

  • IDA 提示libyara.dll找不到

    使用IDA目录下的Python解释器,安装yara-python,然后打开IDA报错 很明显是libyara.dl...

  • ida pro动态调试步骤

    在上篇文章中,我简单介绍了使用IDA Pro静态分析so文件。今天,我将介绍一下如何使用IDA Pro动态调试so...

网友评论

      本文标题:IDA 使用

      本文链接:https://www.haomeiwen.com/subject/lmwgehtx.html