IDA 使用

当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节并不占用文件的空间,但加载器会扩展这一节,以适应程序的静态存储要求。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容