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即可进行二进制搜索

IDA使用方法-----1相关推荐

  1. Debugging Dalvik programs with IDA

    翻译:无名侠 引言 自从IDA v6.6 开始就能够调试安卓应用程序,也包括一个源码级的调试器.这个教程将会讲解如何建立并且开始一个Dalvik调试会话. 安装Android SDK 首先,我们应该安 ...

  2. xposed 修改参数_【Android 原创】2020春节红包第三题Xposed框架Hook的应用

    作者论坛账号:CrazyNut 准备工具以及思路 首先不了解Xposed框架Hook的可以看看大佬的基础教程 - <教我兄弟学Android逆向12 编写xposed模块> 本文不需要会看 ...

  3. 某K字头运动软件逆向分析-登录时非法的请求

    ​最近重新燃起了运动的热情,经常使用到一款软件,里面有些内容需要付费观看,所以决定给它一些特殊的关爱. 重新打包是避不开的,现在大多app都会做防护,所以决定什么都不做只是反编译重打包试下,果然重打包 ...

  4. 经历七轮残酷淘汰 终极之选“过冬王股”出炉

    www.eastmoney.com   2008-09-08 10:24     理财周报 <script src="/mainjs/content_fun_1.js"> ...

  5. 学习笔记--八数码问题

    题目链接 https://www.luogu.org/problemnew/show/P1379 分析 经典的八数码问题,有双向BFS和\(IDA*\)的方法,这里使用的是\(A*\)启发式搜索. 简 ...

  6. 逆向链接服务器(分布式服务器之前的协调通信,同步,消息的转发)

    先做个对比:卓越版本的分布式构架,相对于之前的版本旗舰.荣耀.大众.经典.6603等版本.在分布式上做了优化,更为可靠,高效,安全. 1. 采用websocket通信,更为安全可靠,同时可以和后台直接 ...

  7. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  8. Java面试题大全2021版

    一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...

  9. 【Android 逆向】x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | 使用 IDA 打开动态库文件 | IDA 中查找指定的方法 )

    文章目录 一.使用 IDA 打开动态库文件 二.IDA 中查找指定的方法 一.使用 IDA 打开动态库文件 分析 Android SDK 中的 x86 架构的动态库 , 动态库位置 : D:\001_ ...

最新文章

  1. element-ui中对话框dialog不显示,仅背景变灰
  2. Spring Boot 2.3.0 发布
  3. 撩开Docker的面纱
  4. linux 路径 冒号_软件测试必须掌握的linux命令大全
  5. varnish与squid的比较
  6. 上海滩引爆数据中心热潮
  7. php 提取字的首字母,PHP提取中文首字母_php技巧
  8. php 有request,php实现httpRequest的方法
  9. php密送,向多个收件人发送电子邮件 – 抄送:和密送:在PHP中
  10. 【Unity3D】计算二维向量夹角(-180到180)
  11. auto.js实现微信双向删除好友功能(检测僵尸粉)
  12. js怎么获取扫码枪条码_如何使用JavaScript获取扫码枪扫描得到的条形码
  13. 文件夹批量重命名001开始的方法
  14. oracle 将钱转换万元单位,oracle中单位换算。
  15. 针孔相机模型成像原理与图像变形矫正教程
  16. 利用python实现微信自动回复群发等操作(不需要登录网页版微信)
  17. 继承的学习总结与感悟
  18. 159. 至多包含两个不同字符的最长子串
  19. 浅谈TCP协议的端口(port)
  20. python基础知识有哪些需要背(记住是基础知识)我是初学者

热门文章

  1. EventUtil.addHandler方法
  2. ubuntu中获取文件名称并生成txt文件
  3. 如何调整自定义标签样式
  4. SHELL编程中如果路径名遇到括号
  5. MySQL数据库安全配置
  6. echo 12345678 | base64 产生的结果跟12345678真正的base64编码不对
  7. 开启和关闭wifi的代码段
  8. onesignal php,PHP FPM源代码反刍品味之五:信号signal处理
  9. oracle 老白,老白学编程 - Netdata学习 - numa
  10. php获取网页js中的json,从php获取json数据使用js读取显示到网页笔记