IDA反汇编工具详解之工程和窗口

news2024/11/25 0:31:46

文章目录

    • 什么是反汇编
    • 反汇编的目的
    • ID介绍
    • 打开创建工程
    • IDA的基本规则
    • 窗口介绍
      • 反汇编窗口
      • Names窗口
      • Strings窗口
      • 十六进制窗口
      • 导出窗口
      • 导入窗口
      • 函数窗口
      • 结构体窗口
      • 枚举窗口
      • 段窗口
      • 签名窗口
      • 类型库窗口
      • 函数调用窗口
      • 问题窗口

什么是反汇编

程序员使用编译器、汇编器和链接器中的一个或几个创建可执行程序的过程叫做编译过程(代码输入 --> 可执行程序输出)
使用反汇编器和反编译器回溯编译过程来撤销汇编和编译过程,输出汇编语言或高级语言的过程叫做反汇编(机器语言输入 --> 汇编语言或高级语言输出)
反汇编的难点: 1.编译过程中会造成损失 2.编译属于多对多操作 3.反编译器非常依赖于语言和库 4.要想准确的反编译一个二进制文件,需要近乎完美的反汇编能力

反汇编的目的

1.分析恶意软件
2.分析闭源软件的漏洞
3.分析闭源软件的互操作性
4.分析编译器生成的代码,以验证编译器的性能和准确性
5.调试时显示程序指令

ID介绍

IDA(Interactive Disassembler Professional) 交互式反汇编器专业版,是一种递归下降反汇编器; 这里以IDA 7.0为例进行说明

打开创建工程

在这里插入图片描述

打开工程的三个子介绍说明:
New(新建): 启动一个向导,它将引导你选择一个文件进行分析
Go(运行): 终止加载过程,使IDA打开一个空白的工作区
Previous(最近工程): 打开最近打开过的一个文件

新建工程并打开文件之后IDA会根据打开文件,生成一个文件列表,显示如下图所示:
在这里插入图片描述

Portable executable for AMD64(PE)[pe64.dll] 和 MS-DOS executable (EXE) [dos64.dll] 加载器均声称能够识别选定的文件
Binary File(二进制文件)会一直显示,因为它是IDA加载无法识别的文件的默认选项,它提供了最低级的文件加载方法
如果IDA提供几个加载器,这时选择默认选项倒即可

在Processor Type(处理器类型): 指定在反汇编过程中使用的处理器模块,多数情况下IDA将根据它从可执行文件的头中读取到的信息选择合适的处理器。

同时选择了二进制文件输入格式和一种x86系列处理器Loading Segment(加载段)和Loading Offset(加载偏移量)字段将处于活动状态。
由于二进制加载器无法提取任何内存布局信息,在这里输入的段和偏移量值将共同构成所加载文件内容的基址。

Kernel Options(核心选项) 按钮用于配置特定的反汇编分析选项,IDA可利用这些选项改进递归下降过程,使用默认的即可。
Processor Options(处理器选项) 按钮用来选择适用于选中的处理器模块的配置选项.

当处理完对应的操作之后会保存对应的工程,点击保存或退出会弹出下面的窗口:

在这里插入图片描述

Don’t pack database 不打包数据库,这个选项仅仅刷新对4个数据库组件文件所做的更改,在关闭桌面前并不创建IDB文件, 在关闭数据库时,不建议使用这个选项。
Pack database(Store) 打包数据库不压缩,选择Sotre选项会将4个数据库组件文件存到一个IDB文件中,之前的任何IDB不经确认即被覆盖
Pack database(Deflate) 打包数据库并压缩
Collect Garbage 如果请求垃圾收集,IDA会在关闭数据库之前,从数据库中删除任何没有用的内存页面
DON’T SAVE the datebase 不保存数据库

IDA的基本规则

1.IDA不提供撤销功能
2.几乎所有的操作都有其对应的菜单项、热键和工具栏按钮
3.IDA提供方便的、基于上下文的鼠标右键操作菜单

窗口介绍

反汇编窗口

在这里插入图片描述

反汇编窗口也叫IDA-View窗口,它是操作和分析二进制文件的主要工具
反汇编窗口有两种形式: 1.面向文本的列表视图 2.基于图形的视图 默认以图形视图显示。可以通过空格键在两种视图之间切换

图形视图类似流程图: 它将一个函数分解成许多基本块,以生动显示该函数由一个块到另一个块的控制流程。
图形视图的控制流(也就是各个箭头): Yes执行流(默认绿色)、NO执行流(默认红色)、正常执行流(默认为蓝色)
相关操作: Ctrl+鼠标滚轮 调整图形大小;
控制视图的显示方式: 1.平移图块 2.重新调整块位置 3.分组和折叠块 4.创建其它反汇编窗口(View->OpenSubviews->Disassembly)
Options->General->Disassembly 选项卡配置图形视图显示的详略信息

在这里插入图片描述

窗口最左边的是箭头窗口用于描述函数中的非线性流程:
实线箭头表示非条件跳转
虚线箭头表示条件跳转
如果一个跳转将控制权转交给程序中的某个地址(以前的),这时会使用粗线。出现这类逆向流程,通常表示程序中存在循环

再右边点是虚拟地址显示显示格式为[区域名称]:[虚拟地址] 如.text:0040110C0

DllMain函数声明的位置,是IDA对于函数栈帧布局最准确估算。
以分号开头的注释属于交叉引用

Names窗口

在这里插入图片描述

Names窗口列举了一个二进制文件的所有的全局名称; Ctrl+F 可以调出查询窗口查询特定的名称; 双击对应的名称可以跳转到显示该名称的反汇编视图。

Names窗口通过颜色和字母编码来区分不同的符号:
F: 常规函数,IDA认为这些函数不属于库函数。
L: 库函数,IDA通过签名匹配算法来识别库函数。
I: 导入的名称,通常为共享库导入的函数名称。
G: 命名代码,当IDA在程序的符号表中找到一个名称,但没发现对程序位置的任何调用时,就会出现这种情况。
D: 数据,已命名数据的位置通常表示全局变量。
A: 字符串数据。这是一个被引用的数据位置,其中包含的一串字符符合IDA的某种已知的字符串数据类型.

Names窗口的变量命名规则:
sub_xxxxxx;地址xxxxxx处的子例程
loc_xxxxxx:地址xxxxxx处的一个指令
byte_xxxxxx:位置xxxxxx处的8位数据
word_xxxxxx:位置xxxxxx处的16位数据
dword_xxxxxx:位置xxxxxx处的32位数据
unk_xxxxxx:位置xxxxxx处的大小未知的数据

Strings窗口

在这里插入图片描述

Strings窗口中显示的是从二进制文件中提取出的一组字符串,以及每个字符串所在的地址。
双击Strings窗口中的任何字符串,反汇编窗口将跳转到该字符串所在的地址。
将Strings窗口与交叉引用相结合,可迅速定位你感兴趣的字符串,并追踪到程序中任何引用该字符串的位置。
右键菜单->Setup 可以设置字符串窗口的显示风格; Ctrl + F可以用来检索特定符号的字符串;

十六进制窗口

在这里插入图片描述

十六进制窗口显示程序内容和列表的标准十六进制代码,每行显示16个字节,以及其对应的ASCII字符
十六进制窗口可以和反汇编窗口同步,如果一个反汇编窗口与一个十六进制窗口同步,在一个窗口中滚动鼠标另一个窗口也会滚动到相同的位置。
如果在反汇编窗口中选中一个项目,十六进制窗口中的对应字节也将突出显示。

导出窗口

在这里插入图片描述

导出窗口列出文件的入口点,这包括程序的执行入口点(在程序的文件头部分指定),以及任何由文件导出给其他文件使用的函数和变量。
通常用户可在共享库(如Windows DLL文件)中找到导出的函数。导出的项目按名称、虚拟地址和序数排列。
对于可执行文件,导出窗口中至少包含一个项目:程序的执行入口点。IDA将这个入口点取名为start。
与其他IDA窗口一样,双击弹出窗口的一个条目,IDA会跳转到反汇编窗口对应的位置。 Ctrl+F可以搜索对应的函数名称。

导入窗口

在这里插入图片描述

导入窗口的功能与导出窗口的功能正好相反。它列出由被分析的二进制文件导入的所有函数。只有在二进制文件使用共享库时,IDA才需要用到导入窗口。静态链接的二进制文件不存在外部依赖关系,因此不需要导入其他内容。导入窗口中的每个条目列出一个导入项目(函数或数据)的名称,以及包含该项目的库的名称。
由于被导入的函数的代码位于共享库中,窗口中每个条目列出的地址为相关导入表条目的虚拟地址。

函数窗口

在这里插入图片描述

函数窗口用于列出数据库中的每一个函数,与名称窗口不同函数窗口并不列出使用自动生成的名称的函数。函数窗口会列出IDA在数据库中识别的所有函数。(标识函数的位置和长度)
与其他显示窗口样,双击函数窗口中的一个条目,IDA将跳转到反汇编窗口中选定的函数位置。

结构体窗口

在这里插入图片描述

结构体窗口用于显示IDA决定在一个二进制文件中使用的任何复杂的数据结构(如C结构体和联合)的布局。
在分析阶段,IDA会查询它的函数类型签名扩展库,设法将函数的参数类型与程序使用的内存匹配起来。

双击数据结构的名称,IDA将展开该结构,这允许你查看该结构的详细布局,包括每个字段的名称和大小。
结构体窗口的两个主要用途包括:为标准数据结构的布局提供现成的参考,为你提供一种方法,在你发现程序使用的自定义数据结构时,帮助你创建自己的、可用作内存布局模块的数据结构。

枚举窗口

在这里插入图片描述

枚举窗口有点类似于结构体窗口。如果IDA检测到标准枚举数据类型(Cenum),它将在枚举窗口中列出该数据类型。你可以使用枚举来代替整数常量,提高反汇编代码的可读性。
像结构体窗口一样,在枚举窗口中也可以定义自己的枚举类型,并将其用在经过反汇编的二进制代码中。

段窗口

在这里插入图片描述

段窗口显示的是在二进制文件中出现的段的简要列表,需要注意的在,在讨论二进制文件的结构时,IDA术语"段"(segment)常称为"节"(section)。
该窗口中显示的信息包括段名称、起始和结束地址以及许可标志。起始和结束地址代表程序段在运行时对应的虚拟地址范围。

签名窗口

在这里插入图片描述

IDA利用一个庞大的签名库来识别已知的代码块。签名用于识别由编译器生成的常用启动顺序,以确定可能已被用来构建给定二进制文件的编译器。签名还可用于将函数划归为由编译器插入的己知库函数,或者因为静态链接而添加到二进制文件中的函数。在IDA为你识别库函数时,你可以将更多精力放在分析IDA无法识别的代码上。

类型库窗口

在这里插入图片描述

类型库窗口在概念上与签名窗口类似。类型库保存IDA积累的一些信息,即IDA从最常用的编译器的头文件中搜集到的有关预定义数据类型和函数原型的信息。通过处理头文件,IDA可确定常用库函数所需的数据类型,并为反汇编代码提供相应的注释。同样,IDA还可从这些头文件中了解复杂数据结构的大小和布局。所有这些信息都收集在TIL文件(<IDADIR/til目录>)中,并可在任何时候应用于你分析的二进制文件。与应用签名时一样,在选择加载一组适当的TIL文件之前,IDA必须首先确定一个程序所使用的库。要请求IDA加载其他类型库,可以在类型库窗口中按下INSERT键,或右击窗口并在出现的菜单中选择Load Type Library(加载类型库)。

函数调用窗口

在这里插入图片描述

在任何程序中,一个函数可以调用其他函数,也可以被其他函数调用。实际上,建立一个图形来说明调用方与被调用方之间的关系,是一个相当简单的任务。这样的图形叫做函数调用图形或函数调用树。
有时候,我们并不需要查看程序的完整调用图形,而只对临近函数调用关心,打开函数调用窗口时,IDA会确定光标所在位置的函数的"近邻".

问题窗口

在这里插入图片描述

IDA在问题窗口中显示它在反汇编二进制文件时遇到的困难,以及它如何处理这些困难。有些时候,你可以操纵反汇编代码,帮助IDA解决问题。

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

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

相关文章

位图与布隆过滤器

目录 一、位图 1、问题用位图来解决&#xff1a; 二、 布隆过滤器 1、将哈希与位图结合&#xff0c;即布隆过滤器 2.布隆过滤器的查找 3.布隆过滤器的删除 4.布隆过滤器优点 5、布隆过滤器缺陷 三、海量数据处理问题&#xff1a; 一、位图 问题1&#xff1a;给40亿个不…

【C++】详解 INT_MAX 和 INT_MIN(INT_MAX 和 INT_MIN是什么?它们的用途是什么?如何防止溢出?)

目录 一、前言 二、什么是 INT_MAX 和 INT_MIN &#xff1f; 三、INT_MAX 和 INT_MIN 的用途 四、如何避免溢出问题出现 &#xff1f; 五、 INT_MAX 和 INT_MIN 的运算 六、leetcode 常考面试题 七、共勉 一、前言 大家在平时刷 leetcode 的时候&#xff0c;肯定会碰到 溢出…

谷歌seo网络营销哪家好?

对于一个好的服务商的评判标准其实不难&#xff0c;保证结果&#xff0c;服务透明化&#xff0c;专业的服务&#xff0c;专业的指导&#xff0c;但怕就怕在你什么都不懂&#xff0c;只看重短期的结果&#xff0c;不懂谷歌seo的基础 一些做谷歌seo的反面例子也是需要了解的&…

上位机图像处理和嵌入式模块部署(qmacvisual三维测量)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在qmacvisual软件里面&#xff0c;关于三维测量方面的内容讲的比较少。目前来说只有一个插件完成这个功能。这可能也和作者自己当时的开发环境有关…

springcloud-Nacos 更强大的注册中心组件

Nacos 实际上从设计思想来说 Eureka 和 nacos 是一样的。 后者是Alibaba推出的 一款更强大 功能更丰富的注册中心 你可以理解为Eureka的高配版 技多不压身既然了解了 Eureka, nacos也来学习一下吧&#xff01; 安装 首先nacos不像eureka 直接pom里面引个依赖就搞定了&#…

查看angular版本的问题The Angular CLI requires a minimum Node.js version of v18.13.

angular版本与node.js版本不匹配的问题 下载安装angular 查看版本&#xff0c;发现不匹配 安装指定版本即可 查看版本并运行

diandian数据聚合平台参数分析(水)

diandian数据聚合平台参数分析&#xff08;水&#xff09; 链接地址&#xff1a;‘暂无’&#xff08;懂的都懂&#xff09; 1. 打开网页链接&#xff0c;f12 打开控制台&#xff0c;任意搜索。 2 经过对比分析 需要分析参数key 3 通过debugger分析回溯 发现以下参数生成位置 …

许战海战略文库|向宗老致敬!祝娃哈哈未来三十年行稳致远

摘要&#xff1a;许战海咨询对宗老先生的崇高敬意与对民族品牌的坚定支持,许战海咨询运用其独特的战略视角深入剖析产品战略&#xff0c;旨在帮助娃哈哈有效利用自身的竞争优势,打造爆品,实现进一步的高速增长。 娃哈哈品牌当前所面临的种种挑战,其根源在于缺乏明确和有力的主…

智慧公厕:卫生、便捷、安全的新时代厕所变革

在城市快速发展的背景下&#xff0c;公共厕所的建设和管理变得越来越重要。智慧公厕作为厕所变革的一项全新举措&#xff0c;通过建立公共厕所全面感知监测系统&#xff0c;以物联网、互联网、大数据、云计算、自动化控制技术为支撑&#xff0c;实现对公共厕所的智能化管理和运…

论文阅读之AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

文章目录 原文链接主要内容模型图技术细节实验结果 原文链接 AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 主要内容 这篇文章的主要内容是介绍了一种新的计算机视觉模型——Vision Transformer&#xff08;ViT&#xff09;&#xff0c;这是…

机器之心 | 基于DiT,支持4K图像生成,华为诺亚0.6B文生图模型PixArt-Σ来了

本文来源公众号“机器之心”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;基于DiT&#xff0c;支持4K图像生成&#xff0c;华为诺亚0.6B文生图模型PixArt-Σ来了 这个模型和 Sora 一样采用了 DiT 框架。 1 前言 众所周知&#x…

latex如何让标题section取消数字标号

解决方法——加一个*号 在LaTeX中&#xff0c;如果你想让section标题取消数字标号&#xff0c;可以使用section*代替section。section*将生成一个不带数字标号的节标题。 例如&#xff0c;你可以这样写&#xff1a; \section*{这是不带数字标号的节标题}这将生成一个标题&am…

protobuf原理解析-基于protobuf-c实现序列化,反向序列化

1.一个实例 前面介绍了使用protobuf的流程&#xff0e; (1). 定义proto文件来描述需要序列化和反向序列化传输的消息&#xff0e; (2). 借助proto-c&#xff0c;为proto文件生成对应的代码控制文件&#xff0e; (3). 程序借助生成的代码控制文件和protobuf-c动态库的支持实现类…

【C语言】数组结构体枚举联合详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;C语言_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.数据在内存中的存储 1.1 数据类型 1.2 整型在内存中的存储 1.2.1原码、反码、补码 1.2.2 大小端介绍 1.2.2.1 什么是大端小端 …

生骨肉冻干喂养有哪些优点?对猫身体好的生骨肉冻干分享

随着科学养猫知识的普及&#xff0c;生骨肉冻干喂养越来越受到养猫人的青睐。生骨肉冻干不仅符合猫咪的饮食天性&#xff0c;还能提供均衡的营养&#xff0c;有助于维护猫咪的口腔和消化系统健康。很多铲屎官看到了生骨肉冻干喂养的好处&#xff0c;打算开始生骨肉冻干喂养&…

module ‘mpmath‘ has no attribute ‘rational‘ 报错解决

**报错&#xff1a;**AttributeError: module ‘mpmath’ has no attribute ‘rational’ 解决&#xff1a; pip install mpmath1.3.0原因&#xff1a; 最新版本的mpmath有变动&#xff0c;直接使用旧版本即可

【virtio-networking 和 vhost-net 简介】

文章目录 Virtio 基本构建块Virtio spec 和 vhost 协议Vhost-net/virtio-net architectureVirtio-networking and OVS总结参考链接 Virtio 是作为虚拟机 (VM)访问简化device&#xff08;如块设备和网络适配器&#xff09;的 标准化开放接口而开发的。Virtio-net是一种虚拟以太…

some/ip CAN CANFD

关于SOME/IP的理解 在CAN总线的车载网络中&#xff0c;通信过程是面向信号的 当ECU的信号的值发生了改变&#xff0c;或者发送周期到了&#xff0c;就会发送消息&#xff0c;而不考虑接收者是否需要&#xff0c;这样就会造成总线上出现不必要的信息&#xff0c;占用了带宽 …

基于 Vue3打造前台+中台通用提效解决方案(中)

33、实现全屏展示功能 我们知道在原生dom上,提供了一些方法来供我们开启或关闭全屏: Element.requestFullscreen()Document.exitFullscreen()Document.fullscreenDocument.fullscreenElement一般浏览器 使用requestFullscreen()和exitFullscreen()来实现 早期版本Chrome浏…

基于python的4s店客户管理系统

技术&#xff1a;pythonmysqlvue 一、背景 进入21世纪网络和计算机得到了飞速发展&#xff0c;并和生活进行了紧密的结合。目前&#xff0c;网络的运行速度以达到了千兆&#xff0c;覆盖范围更是深入到生活中的角角落落。这就促使管理系统的发展。网上办公可以实现远程处理事务…