IDA的简单入门使用

刚刚入门逆向,对这方面知识近乎于0,因此写着一篇笔记,记载自己不懂的和搞会的,以供日后查阅使用。在下才疏学浅,虽然本文内容较为基础,但是难免有不对之处,敬请指正。

IDA是什么

IDA是一款功能强大的静态分析工具,可以实现汇编代码转为伪C代码,可以分析许多可执行文件,因此是逆向的时候的不二工具。

下面,从进入IDA的界面为顺序,依次介绍它的有关功能。

由于不同的架构版本的程序需要使用不同的IDA版本打开。我们可以先使用DIE查看软件架构和编写语言来确定使用哪款IDA,也可以使用任意版本IDA打开,会自动提示,如下所示。

因此 我们需要使用64版本的IDA打开此文件。

主界面

导航栏 

这里显示程序内函数的不同情况。 通过导航条可了解分析可执行文件各部分数据分布情况。

右键菜单中的zoom可以放大缩小,两个对勾的内容分别对应图例和导航栏右侧的下拉菜单,可以先不管。

汇编窗口 

这里是汇编主窗口,点击空格可以切换两种视图模式。 

函数窗口

在这里可以查看程序之中的函数,点击ctrl+F即可进行筛选函数。

按下“Alt+T”组合键,也可快速打开查找文本的对话框,输入查找内容进行搜索。

按delete键,删除某个函数。

输出界面,在这里还可以输入python代码。

数据类型操作

 点击U键,取消某地方已有的数据类型定义。D键,让某一个位置变成数据,一直按的话,会按照1-2-4-8字节循环。C键,让某一个位置变为指令。以下内容来源于豆包。

  • 字节(Byte):用于表示单个字节的信息,如一个字符或一个 8 位的整数。在十六进制视图中,每个字节以两位十六进制数表示,可用于查看和修改程序中的单个字节数据,适用于分析简单的数据结构或处理字节流的情况。
  • 字(Word):字类型数据通常占用两个字节,可用于表示 16 位的整数或其他具有 16 位长度的数据。在 IDA 中,定义字类型数据有助于正确解析和操作这类数据,特别是在涉及到一些特定的 16 位数据格式或指令操作数时非常有用。
  • 双字(Dword):双字类型数据占用四个字节,对应 32 位的整数或其他 32 位长度的数据。它是 IDA 中常用的数据类型之一,许多寄存器和内存操作都以双字为单位进行,正确定义双字类型数据对于理解程序中的数据处理和内存访问非常关键,特别是在分析 32 位程序时经常会用到。
  • 四字(Qword):四字类型数据则占用八个字节,用于表示 64 位的数据,如 64 位整数或指针等。随着计算机系统向 64 位架构的发展,四字数据类型的使用也越来越常见,在分析 64 位程序或处理需要高精度数据的情况下,定义四字类型数据能够确保数据的正确解析和操作。··············································································································
  • 字节(Byte):是最基本的数据单位,可表示范围为 0 - 255 的无符号整数,或 - 128 - 127 的有符号整数,它是构建其他更大数据类型的基础。在 C、C++ 等编程语言中,对应的基本数据类型为unsigned charsigned char
  • 字(Word):由两个字节组成,可表示范围为 0 - 65535 的无符号整数,或 - 32768 - 32767 的有符号整数。在一些编程语言中,如早期的 16 位汇编语言或某些特定的嵌入式系统编程中,字是常用的数据类型,对应的 C、C++ 数据类型为unsigned shortsigned short
  • 双字(Dword):四个字节的双字能够表示更大范围的整数,无符号双字可表示 0 - 4294967295,有符号双字可表示 - 2147483648 - 2147483647。在 32 位编程环境中,双字是非常常见的数据类型,与 C、C++ 中的unsigned intsigned int相对应,广泛应用于各种数据处理和内存操作。
  • 四字(Qword):作为 8 字节的数据类型,四字能够表示极其大的整数范围,无符号四字的范围是 0 - 18446744073709551615,有符号四字则可表示 - 9223372036854775808 - 9223372036854775807。在 64 位编程中,四字数据类型与unsigned long longsigned long long相对应,用于处理需要高精度或大数值范围的数据,如 64 位系统中的内存地址、大文件的偏移量等。

 

更多的窗口,请看上图。利用这个方式打开。

HexRays编译器 

它可以转为伪C代码,便于逆向分析。

更改标识名

在一个变量名字上按N键即可。会提示你进行修改。

按Y,可以修改变量类型

在一个常量后面右键,可以修改数据显示格式。char为字符,快捷键是R,Octal是八进制,Hex开头的是十六进制,快捷键是H。

在 IDA(Interactive Disassembler)中,切换数据显示格式和切换数据类型是两个不同的操作,它们的区别如下:

概念含义

 
  • 切换数据显示格式:主要是指改变数据在 IDA 界面中的呈现方式,例如将十六进制数据显示为十进制、二进制,或者将数据以不同的字节序显示等,数据本身的类型和内容并未改变,只是显示形式的变化。
  • 切换数据类型:则是指改变 IDA 对数据的解析和理解方式,将数据从一种数据类型重新定义为另一种数据类型,如将一个字节数组重新定义为一个整数、指针、结构体等,这会影响到 IDA 对数据的后续分析和处理。

操作目的

 
  • 切换数据显示格式的目的:通常是为了方便用户以不同的视角查看数据,以更直观地理解数据的表示和含义。比如在查看内存数据时,十六进制格式可能更适合查看原始数据,但在某些情况下,将其切换为十进制格式能更方便地读取数据的数值大小。
  • 切换数据类型的目的:是为了让 IDA 更准确地对数据进行分析和反汇编。当 IDA 错误地识别了数据类型,或者用户需要以特定的数据类型来理解一段数据时,就需要切换数据类型,以便 IDA 能够按照新的数据类型进行正确的反汇编和分析,从而更好地理解程序的逻辑和数据结构。

对分析结果的影响

 
  • 切换数据显示格式:一般不会对 IDA 的分析结果产生实质性的影响,只是改变了数据的显示外观,不涉及数据的语义和程序的逻辑结构,分析结果仍然基于数据的原始类型和定义。
  • 切换数据类型:会直接影响 IDA 的分析结果和反汇编代码的生成。因为不同的数据类型具有不同的存储方式和操作语义,切换数据类型后,IDA 会根据新的数据类型重新解释数据,并可能生成不同的反汇编指令和数据引用,从而影响到对程序功能的理解和分析。

应用场景

 
  • 切换数据显示格式的常见场景:在查看内存数据、寄存器值、指令操作数等时,根据需要灵活切换显示格式,以便更清晰地观察数据的特征。比如在调试加密算法时,可能需要将密文数据在十六进制和二进制之间切换显示,以方便查看数据的位模式。
  • 切换数据类型的常见场景:当遇到 IDA 自动识别数据类型不准确的情况,如将一个实际上是指针的数据错误地识别为普通整数时,就需要手动切换数据类型为指针,以便正确地跟踪和分析程序中的指针操作。又如在分析复杂的数据结构时,需要将一段连续的内存区域定义为特定的结构体类型,以便更清晰地理解数据之间的关系。
### IDA Pro 使用教程:打开文件的方法 IDA Pro 是一款功能强大的反汇编工具,广泛应用于逆向工程领域。为了帮助用户更好地理解和操作该软件,在启动 IDA Pro 后,界面会显示最近打开过的项目列表以及创建新分析项目的选项。 当需要加载一个新的二进制文件进行分析时,可以通过菜单栏中的 `File` -> `Open...` 来选择目标文件[^2]。此时会出现一个对话框让用户浏览并挑选要处理的可执行文件或其他类型的二进制对象。对于特定格式的支持取决于所安装版本的功能集;例如,某些高级特性可能仅限于付费版提供。 一旦选择了待分析的目标程序路径之后,IDA 将自动检测其类型(如PE, ELF 或 Mach-O),并且根据识别到的信息配置初始设置。如果遇到非标准结构或加密情况,则可能还需要额外的手动干预来调整解析参数以确保正确读取数据[^3]。 在成功导入文件后,IDA 的工作区会被分割成多个视图窗口以便查看不同层次上的细节信息。其中最重要的是函数调用图表、反汇编代码文本区域和字符串表等内容展示面板。通过这些辅助工具的帮助,可以更深入地理解被研究的应用内部逻辑及其运作机制。 ```python # Python脚本示例用于自动化批量加载同目录下的所有.so库文件至IDA中 import idaapi import os def load_all_so_files(directory_path): for filename in os.listdir(directory_path): if filename.endswith(".so"): filepath = os.path.join(directory_path, filename) idc.add_input_file(filepath) directory_to_load = "/path/to/your/directory" load_all_so_files(directory_to_load) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值