IDA使用方法-----1

0x01 启动IDA

在这里插入图片描述

  • new:反汇编一个新文件
  • go:运行,直接进入IDA
  • Previous:载入一个我们以前编译过的程序

如果不想每次都看到这个对话框,可以取消该对话框底部的Display at startup(启动时显示),如果没有勾选这个,下次启动IDA时,IDA会认为我们单击了go选项。如果我们没有勾选这个,下次希望使用这个时,我们可以按照下图做,就又可以显示了。
在这里插入图片描述

文件加载

使用File—>open命令打开一个新文件时,会看到下图所示的加载对话框。IDA会自动生成一个可能的文件列表,并显示这个列表,这个列表中将显示最适合处理选定文件的IDA加载器。
在这里插入图片描述

  • Windows PE加载器(pe.ldw)
  • MS-DOS EXE加载器(dos.ldw),PE文件格式是MS-DOS EXE文件格式的拓展形式
  • Binary File(二进制文件):这个选项会一直显示,不论加载什么文件,因为它是IDA加载无法识别的文件默认选项,它提供最低级的文件加载方式
  • 如果IDA提供几个加载器,我们一般选择第一个,其他选项我们也一般默认

0x02 界面介绍

默认界面:
在这里插入图片描述
1、工具栏区域:
在这里插入图片描述
包含与IDA的常用操作对应的工具,我们可使用 VIew–>Toolbars----->Advance mode打开高级模式工具栏,高级模式工具栏包含三排工具按钮
在这里插入图片描述

2、彩色的水平带是IDA的概括导航栏,也叫导航带,是被加载文件地址空间的线性视图。我们可以右击导航带任何位置,并选择一个可用的缩放选项。不同的颜色表示不同类型的文件类型,如数据或代码。在导航带上,会有一个细小的当前位置指示符(默认为黄色)指向当前反汇编窗口中显示地址范围对应的导航带地址。我们可以通过options—>colors自定义导航带使用的颜色。
在这里插入图片描述
3、IDA为当前打开的每一个数据显示窗口都提供了标签。数据显示窗口中包含从二进制文件中提取的信息,他们代表数据库的各种视图。
在这里插入图片描述
通过View—>Open Subviews菜单可打开其他数据显示窗口
在这里插入图片描述
4、反汇编视图是主要数据显示视图,两种形式:图形视图(默认)和列表视图。我们可以使用空格键在图形样式和列表样式之间切换。
在这里插入图片描述
如果希望列表视图作为默认视图,则必须通过Options---->General菜单打开IDA Options复选框,取消Graph选项卡下的Use graph view by default
在这里插入图片描述
5、使用图形视图时,显示区很少能够一次显示某个函数的完整图形。这时,图形概况视图可提供基本图形结构的缩小快照,其中虚线矩阵表示其在图形视图中的当前显示位置。
在这里插入图片描述
6、输出窗口显示的是IDA输出的信息
在这里插入图片描述
7、函数窗口是默认IDA显示窗口的最后一部分
在这里插入图片描述

IDA 桌面提示和技巧
  • 使用View–>Open SubViews恢复无意中关闭的数据显示窗口
  • 使用Windows—>reset desktop命令可迅速将桌面恢复到原始布局
  • 利用windows—>Save desktop命令保存你认为特别有用的当前桌面布局。使用Windows—>load desktop命令迅速打开你之前保存的一个桌面布局
  • Disassembly窗口是唯一一个可以修改其显示字体的窗口,使用Options—>fonts命令可以设置字体

0x03 IDA数据显示窗口

基本规则:

  • IDA不提供撤销功能。如果不小心按下某个键,导致数据库文件发生意外,这是,我们必须将显示窗口恢复到以前的状态
  • 几乎所有的操作都有其对应的菜单项、热键和工具栏按钮。
  • IDA提供方便的、基于上下文的鼠标右键操作菜单

IDA主要的数据显示窗口

在IDA中,ESC键是一个非常有用的热键。在反汇编窗口中,ESC键的作用与web浏览器的后退按钮类似。因此,它在导航反汇编窗口非常有用。遗憾的是,在打开其他的窗口时,ESC键用于关闭窗口。

1、反汇编窗口

反汇编窗口也叫IDA-View窗口,它是操作和分析二进制文件的主要工具。
反汇编窗口有两种显示窗口:图形和列表

IDA图形视图
图形视图将一个函数分解成许多基本块,以生动显示该函数由一个块到另一个块的控制流程。IDA使用不同彩色箭头区分函数块之间各种类型的流。在条件跳转位置终止的基本块可能会生成两种流:

  • 红色:No边的箭头,不执行分支
  • 绿色:Yes边的箭头,执行分支
    还有一个蓝色箭头,指向下一个即将执行的块
    在这里插入图片描述
    我们可使用Ctrl+鼠标滑轮来调整图形的大小。
  • 平移:通过单击图形概述和拖动图形视图的背景来定位图形
  • 重新调整块位置。通过单击指定块的标题栏并将其拖到一个新的位置,用户还可以移动每一个块的位置
  • 创建其他反汇编窗口:可以通过View–>Open subviews—>disassembly命令打开另一个反汇编空口。这样打开的第一个反汇编窗口叫做IDA View A。随后的反汇编窗口叫做IDA View B、IDA View C,以此类推。每个反汇编窗口都独立于其他窗口。我们可以在一个窗口中查看一个图形,在另一个窗口查看文本列表。
2、IDA文本视图

面向文本的反汇编窗口是查看和操作IDA生成的反汇编代码的传统显示窗口。文本显示窗口会显示一个程序的完整反汇编代码清单,用户只有通过这个窗口才能查看一个二进制文件的数据部分。
在这里插入图片描述
显示窗口的左边部分叫做箭头窗口,用于描述函数中的非线性流程。实线箭头表示非条件跳转,虚线箭头表示条件跳转。如果一个跳转将控制权交给程序中的某个地址,这时会使用粗线(实线或虚线)。出现逆向流程,通常表示程序中存在循环

函数窗口

Functions窗口用于列举IDA在数据库中识别的每一个函数
在这里插入图片描述

十六进制窗口

默认情况下,十六进制窗口显示程序内容和列表的标准十六进制代码,每行显示16个字节。我们可以打开几个十六进制窗口。
在这里插入图片描述
第一个16进制窗口会与第一个反汇编窗口同步。如果一个反汇编窗口与一个十六进制窗口同步,在一个窗口滚动鼠标,另一个窗口也会滚动到相应位置(同一个虚拟地址)。如果在反汇编窗口选中一个项目,十六进制窗口中的对应字节也将突出显示。
在这里插入图片描述
有时候,十六进制窗口显示的全部是问号,这表示IDA无法识别给定的虚拟地址范围内的值。

导出窗口

导出窗口列出文件的入口点
在这里插入图片描述

导入窗口

导入窗口的功能与导出窗口的功能正好相反。它列出由被分析的二进制文件导入的所有函数
在这里插入图片描述

结构体窗口

结构体窗口用于显示IDA决定在一个二进制文件中使用的任何复杂的数据结构的布局。
在这里插入图片描述

枚举窗口

如果IDA检测到标准枚举数据类型,它将在枚举窗口列出该数据类型
在这里插入图片描述

其他IDA显示窗口

下面讨论的窗口并不是你当前需要的信息,因此,IDA一开始并不开开这些窗口。

1.Strings 窗口

我们可以通过View —> Open SubViews —> Strings命令打开
在这里插入图片描述
Strings窗口中显示的是从二进制文件中提取出的一组字符串,以及每个字符串所在的地址,双击Strings窗口中的任何字符串,反汇编窗口将跳转到该字符所在的地址。IDA默认扫描的字符串类型为至少包含5个字符的C风格、以Null结尾的7位ASCII字符串。
在这里插入图片描述
每次打开Strings窗口,IDA都会扫描或重新扫描整个数据库,查找其中的字符串。扫描字符串的操作遵照Strings窗口的设置来完成,我们右击该窗口,在出现的菜单中选择setup,即可开始设置

在这里插入图片描述

  • Display only defined strings (仅显示已定义的字符串)。这个选项使Strings窗口仅显示IDA自动创建或用户手动创建的已命名字符串数据项。
  • Igonre instructions/data definitions(忽略指令/数据定义)。这个选项会使IDA扫描指令和现有数据定义中的字符串
2、names窗口

列举一个二进制文件的所有全局名称。双击Names窗口的名称,可立即跳转到显示该名称的反汇编视图。
在这里插入图片描述
Name窗口显示的名称采用了颜色和字母编码。其编码方案:

  • F,常规函数。IDA认为这些函数不属于库函数
  • L,库函数。IDA通过签名匹配算法来识别库函数
  • I,导入的名称,通常为共享库导入的函数名称
  • C,命名代码。
  • D,数据
  • A,字符串数据
3、段窗口

段窗口显示的是在二进制文件中出现的段的简要列表。该窗口显示的信息包括段名称、起始和结束地址以及许可标志。
在这里插入图片描述
双击段窗口的任何条目,IDA将跳转到反汇编窗口中该段的起始位置。右击一个条目,IDA将显示一个上下文菜单,你可以添加新段、删除现有段或者编译现有段的属性。
在这里插入图片描述

4、签名窗口

IDA利用一个庞大的签名库来识别已知的代码块。签名用于识别编译器生成的常用启动顺序,以确定可能已被用于构建给定二进制文件的编译器。
在这里插入图片描述

0x04 反汇编导航

基本IDA导航

1、双击导航

反汇编程序时,程序的每个位置都分配一个虚拟地址。只要提供希望访问的位置的虚拟地址,就可以导航到程序的任何地址。然而,记住大量地址并非易事。这促使早期的程序员给他们希望引用的程序位置分配符号名称。这大大简化了他们的工作。我们只需双击这些名称就可跳转。

2、跳转到地址

使用jump —>jump to address命令或在处于活动状态的反汇编窗口按下热键G,均可打开Jump toAddress对话框
在这里插入图片描述

3、导航历史记录

IDA的另一项类似于传统web浏览器的功能,是它的前进和后退导航功能(基于你浏览反汇编窗口的顺序)。每次你导航到反汇编窗口中的一个新位置,你当前的位置就会添加到位置列表中。有两种方式菜单操作可用于遍历这个列表。首先,Jump —>Jump to previous Position
或者使用ESC(只能在反汇编使用,其他窗口为关闭当前窗口),或者使用工具栏上的导航按钮
在这里插入图片描述

搜索数据库

在IDA中,你可以轻松导航到你知道的位置

1、文本搜索

IDA文本搜索相当于对反汇编列表窗口进行子字符串搜索。通过Search—>Text命令启动文本搜索或者Alt+T。搜搜限制于仅查找完整的词,并且能够匹配反汇编行中的任何完整的词,包括操作码助记符或常量。最后使用Ctrl+T或者Search—>Next Text命令可重复前一项搜索,以找到下一个匹配。
在这里插入图片描述

2、二进制搜索

二进制搜索仅搜索十六进制视图窗口。根据指定搜索字符串的方式,可以搜索16进制或ASCII字符串。
Search —>Sequence of Bytes或者Alt+B即可进行二进制搜索
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

邮箱验证JS代码

方法一,用JSfunction finish_onclick() { var username document.getElementById("username");var pwhidden document.getElementById("pwhidden");if(username.value"") { alert("请填写您的企业邮箱地址!");username.f…

objdump命令详解

objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具。 选项 --archive-headers -a 显示档案库的成员信息,类似ls -l将lib*.a的信息列出。 -b bfdname --targetbfdname 指定目标码格式。这不是必须的,objdump能自动识别许多格式,比如…

Java——异常(try...catch...finally)

public class Demo5_Throwable {public static void main(String[] args) {try{System.out.println(1/0);}catch(Exception e){System.out.println(e.getMessage());//获取异常信息,返回字符串;System.out.println(e.toString());//获取异常类名和异常信息&#xff…

Python程序反转给定数字(2种不同方式)

Take input number from the user and print its reverse. 从用户处获取输入号码并打印其反面。 Example: 例: Input:12345Output:54321Here, we are implementing program to reversing a given number using 2 different ways. 在这里,我们正在实施程…

外汇期货学习专帖(转)

一篇好文,值得深思! (转) 我的一些所看所想,和大家聊聊 ; d: R ^6 c* A2 e X" y8 y4 Bhttp://www.fx998.cn 说来惭愧,很久以前,俺在期货公司混事,95年以前国内期货公司从外盘棉花到咖啡....,外汇期指到原油.都能*作.是一派欣欣向荣之景.95年之后,按国家规定都转了内…

《Pro ASP.NET MVC 3 Framework》学习笔记之四【领域模型介绍】

主题:应用领域驱动开发(Applying Domain-Driven Development) Domain Model是MVC程序的"心脏",其他的一切,包括Controllers和Views仅仅是用来跟Domain Model交互的一种方式,ASP.NET MVC并没有限制使用在Domain Model上面…

Java——集合框架(List)

集合框架(List的三个子类的特点) A:List的三个子类的特点 ArrayList: 底层数据结构是数组,查询快,增删慢。 线程不安全,效率高。 Vector: 底层数据结构是数组,查询…

一步一步学pwntools(适合新手)

序 pwntools是一个二进制利用框架。官方文档提供了详细的api规范。然而目前并没有一个很好的新手教程。因此我用了我过去的几篇writeup。由于本文只是用来介绍pwntools使用方法,我不会过于详细的讲解各种二进制漏洞攻击技术。 Pwntools的“Hello World” 栈溢出无…

关于J2EE中死锁问题的研究(1)

大多数重要的应用程序都涉及高度并发性和多个抽象层。并发性与资源争用有关,并且是导致死锁问题增多的因素之一。多个抽象层使隔离并修复死锁环境的工作变得更加困难。 通常,当同时执行两个或两个以上的线程时,如果每个线程都占有一个资源并请…

python变量分配内存_Python | 声明任何变量而不分配任何值

python变量分配内存Since, Python is a dynamic programming language so there is no need to declare such type of variable, it automatically declares when first time value assign in it. 由于Python是一种动态编程语言,因此无需声明此类变量,它…

UVA 10004 - Bicoloring

模拟染色&#xff0c;因为只有两种颜色&#xff0c;所以分别用 0、 1 代表这两种颜色&#xff0c;然后从0开始深搜&#xff0c;如果 每个点都能染上色&#xff0c;且相邻两点的颜色不同&#xff0c;则符合要求。 #include<stdio.h>#include<string.h>#define MAXN …

标志寄存器:CF、PF、AF、ZF、SF、TF、DF、OF

注&#xff1a;下面说到的标志寄存器都是缩写&#xff0c;C就是CF&#xff0c;其他也一样 标志寄存器&#xff1a;C、P、A、Z、S、T、D、O的内容只会是0或1&#xff0c;0表示假&#xff0c;1表示真 O&#xff1a;溢出标志 一个寄存器如果存放的值超过所能表示的范围&#xf…

揭秘:销售人员26个致命弱点

销售人员有许多积极的态度需要学习&#xff0c; 同时也有许多不良的习惯应该避免&#xff0c;以免影响个性及专业能力。仔细看看这些缺点&#xff0c;反省你自己&#xff0c;还需要改善的画&#xff0c;直到你给自己一百分为止。找一位深知你的好 友&#xff0c;让他诚实地给你…

Java——集合(练习题)

例题1&#xff1a;产生10个1~20之间的随机数&#xff0c;要求随机数不能重复 import java.util.HashSet; import java.util.Random; public class Test1 {/*** 产生10个1~20之间的随机数&#xff0c;要求随机数不能重复* * 分析&#xff1a;* 1,有Random类创建随机数对象* 2&a…

模块化 组件化 工程化_软件工程中的模块和软件组件

模块化 组件化 工程化The module in software is a small part of the software that is responsible for performing any kind of functionality. Sometimes, the term sub-program is also used to refer to the term module. 软件中的模块是软件的一小部分&#xff0c;负责…

Firefox2狂占CPU解决办法

https://images.cnblogs.com/cnblogs_com/Tisty/138006/o_firefox3.jpg 看了一下&#xff0c;不知道 "jpeg_free_large" 是干啥的&#xff0c;遂用 "Firefox jpeg_free_large" Google 一下&#xff0c;出来的一堆东西里有帖子说可能和 Apple 的 QuickTime …

PUSHAD和POPAD,以及PUSHA和POPA

PUSHAD PUSHAD也叫保护现场&#xff0c;就是把我们的寄存器压入栈中 pushad是把eax&#xff0c;ecx&#xff0c;edx&#xff0c;ebx&#xff0c;esp、ebp&#xff0c;esi&#xff0c;edi依次压入栈中&#xff0c;ESP会减少32&#xff0c;相当于&#xff1a; push eax push ec…

Java——n个数的全排列

例题&#xff1a; 输入一串字符串&#xff0c;将该字符串中的字符元素进行全排列&#xff0c;然后&#xff0c;一串输出结果。 例如&#xff1a; 输入&#xff1a; ABCD 输出&#xff1a; ABCD ABDC ACBD ACDB ADBC ADCB BACD BADC BCAD BCDA BDAC BDCA CABD CADB CBAD CBDA…

一段个性化stringgrid的代码

需要注意的是 该段程序使用了 canvas。 procedure TW_CkbTaiZhang.KhLstDrawCell(Sender: TObject; ACol,ARow: Integer; Rect: TRect; State: TGridDrawState);begin if ARowkhlst.Row then with khlst.Canvas do //画 cell 的边框 begin Pen.Color : $00ff0000; …

dp 扔鸡蛋_使用动态编程(DP)的鸡蛋掉落问题

dp 扔鸡蛋Problem statement: You are given N floor and K eggs. You have to minimize the number of times you have to drop the eggs to find the critical floor where critical floor means the floor beyond which eggs start to break. Assumptions of the problem: 问…