IDA基本使用

这篇具有很好参考价值的文章主要介绍了IDA基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习逆向工程需要熟悉一个反汇编器的使用,学会阅读汇编语言,学会编写脚本和查找资料

IDA是功能很强大的一款反汇编机器,本文保姆级讲解了IDA的基本使用

关于汇编语言的学习我总结了另一篇文章汇编语言快速入门_光无影的博客-CSDN博客

IDA基本使用

目录

序言

IDA Pro简介

IDA的基本用法

ida文件加载

IDA桌面简介

导航带

反汇编窗口

函数窗口

十六进制窗口

Hex view

结构体窗口

枚举窗口

Strings窗口 

Names窗口

ACDU

交叉引用

概念

代码交叉引用(函数调用,顺序执行和跳转)

数据数据交叉引用

访问交叉引用列表

IDA静态分析

名称

修改参数,局部变量,函数名称

修改地址的名称

重命名寄存器

IDA注释 

函数操作

新建函数

删除函数

代码和数据的相互转换 

字符串

指定数组

显示汇编语言对应的机器码

打补丁

Patch

修改exe文件并保存运行

IDA脚本

脚本的使用方式和IDC语法

IDA插件

概念

构建插件

安装插件

插件配置

IDAPython

IDA动态调试

调试器通常用于执行以下两种任务(大概了解)

开始动态调试

进程控制

断点

软件断点

硬件断点

跟踪

寄存器变量

监视

IDA的拓展用法

IDA的第三方图形

外部流程图

外部调用图

外部交叉引用图


序言

It was the best of times,it was the worst of times,it was the age of wisdom,it was the age of foolishness,it was the epoch of belief,it was the epoch of incredulity.

it was the season of Light,it was the season of Darkness,it was the spring of hope,it was the winter of despair,we had everything before us,we had nothing before us.

we were all going direct to Heaven,we were all going direct the other way.

                                                                                                     ——A Tale of Two Cities

今天,万物互联,普适计算。整个世界的构造都由程序操纵起来。

A handful of people working at a handful of tech companies steer the thoughts of billions of people every day.

你可曾听过赛博朋克这个词,科幻作家布鲁斯·博斯克创造了这个词。

赛博朋克Cyberpunk是由网络Cyber和朋克Punk组成。

而cyber的词源是控制论cybernetics,是20世纪重要的思想运动。

punk则代表着治理与反叛两个概念的纠缠。

IDA基本使用

科幻作家布鲁斯·博斯克创造了“赛博朋克”,并把该名设定为自己短篇小说的名字,形容迷失的年轻一代:他们是抗拒父母的权威、与主流社会格格不入、利用电脑技术钻漏洞和制造麻烦的技术宅。经典的赛博朋克角色是边缘且性格疏远的独行者。

赛博朋克深受科幻作者的喜爱,很成功的电影作品有《黑客帝国》。

赛博朋克类小说中的世界是反乌托邦式的,涉及日常生活受到急剧改变的科技影响,普及的计算机化信息笼罩全球,以及侵入性的人体改造。在赛博朋克的作品中,一边是闪烁着霓虹灯光的摩天大楼,富人们在此享受生活,但在阴暗的角落里,到处是黑帮、流氓、抢劫犯的身影,穷人们只能靠电子产品来麻痹自己。闪烁的霓虹灯和摩天大楼上五彩斑斓的大屏幕,让人联想到了《三体》中的超信息时代。

赛博朋克有时也专指这种视觉美学风格。

IDA基本使用

Hacker ,这个词是用来形容那些热衷于解决问题、克服限制的人。

他们是崇尚自由的,乐于追根究底、穷究问题的特质。

从广义上来说,任何职业都可以成为Hacker 。你可以是一个木匠黑客。不一定是高科技。只要与技能有关,并且倾心专注于你正在做的事情,你就可能成为黑客。

Hacker有别于Cracker,真正的Hacker遵守黑客守则,不破坏任何系统。

IDA基本使用

时代是朝前走的,发展不是情怀的敌人,相反,只有发展才会给情怀创造基础。

                                                                                ——人民日报

IDA是一个功能强大的反汇编器,学习逆向有别于按照一个框架去编写程序,需要灵活的头脑和痴迷于逆向分析的精神。你是在玩解密游戏而不是去建造一座大厦。

本文是将最核心的IDA的使用做了一个总结,删去了为了逻辑严密,内容全面的教科书式的讲解,只总结最和核心有用的实际操作,并且详细配置了图片,对于一些动态调试的具体内容,后续会有专门的博客,将链接贴在这篇文章中,希望大家在阅读完这篇文章之后就能上手使用IDA。

开始阅读核心部分吧

IDA基本使用

IDA Pro简介

IDA Pro就是一款递归下降反汇编器

反汇编器使用的算法包括:线性扫描反汇编算法、递归下降反汇编算法

IDA并非一款免费软件,为用户提供了一款功能有限的免费版本,不提供最新版本的功能

百度词条:

交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为IDA Pro,或简称为IDA。是最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器!IDA Pro是一款交互式的,可编程的,可扩展的,多处理器的,交叉Windows或Linux WinCE MacOS平台主机来分析程序, 被公认为最好的花钱可以买到的逆向工程利器。IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。它支持数十种CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。

IDA的基本用法

这一段介绍IDA最基本的界面信息和最基础的操作

ida文件加载

可以打开IDA->菜单栏file->open(选择一个二进制文件)

也可以将要分析的二进制文件拖到ida图标上

IDA桌面简介

你看过有关黑客的视频吗,一台性能很高的电脑上下着绿色的字符串雨,黑客盯紧屏幕检索其中的关键信息。

IDA基本使用

当然这是有一定艺术化处理的,不一定都是绿色的界面。当然你可以根据自己的喜好配置成这样。但是有一点是肯定的,IDA的有关操作需要你查看很多界面,有很多不同的信息需要你整合分析。涉及栈,反汇编代码,反编译代码,程序中包含的字符串等等很多有关需要逆向分析的程序的信息。资深搞逆向工作可以考虑准备一台很大的显示屏。

IDA基本使用

下面我们来认识一下IDA的这些窗口(View)。

导航带

IDA基本使用

 概况导航栏,也叫作导航带,光标悬停在导航带任何位置会指出其在二进制文件中的位置

Options-color可以修改导航栏的颜色

反汇编窗口

IDA基本使用

上图是图形视图,按空格键可以和文本视图相互切换,下图是文本视图

IDA基本使用

.text:004028EE为区域名称加虚拟地址

图中.text是代码段

 Ctrl+“+”可以或者Ctrl加鼠标滚轮实现界面的缩放

views->open subviews->Disassembly可以打开另一个反汇编窗口,每个反汇编窗口互相独立,可以一个查看图形,另一个查看文本

IDA基本使用

 IDA使用不同的箭头颜色来表示不同的流

条件跳转Yes是绿色箭头,No是红色箭头,默认为蓝色箭头

IDA基本使用

文本窗口右边是箭头窗口

用于描述非线性流程 ,虚线是条件跳转,实线是非条件跳转

粗实线表示程序将控制权交给程序中的以前的某个地址,通常表示程序中存在循环

IDA基本使用

是反汇编形成的汇编语言代码

IDA基本使用

按下“;”可以添加注释,用于逆向分析时使用

图中  ; CODE XREF: _main+209↑j是自动生成的表示此处有交叉引用的注释

_main+209↑j表示一个地址,形式是函数+偏移量,↑表示该地址在上面

交叉引用暂不做介绍

图形视图可以用鼠标滚轮加Ctrl进行拖动,进行缩放

IDA基本使用

有时我们需要用缩小的抽象图片来观察程序执行流程的一些特点 

函数窗口

IDA基本使用

为 IDA在数据库中识别的每一个函数,双击一个函数,会跳转到反汇编窗口这个函数所在的位置

十六进制窗口

Hex view

IDA基本使用

 显示的是程序内容和列表的标准十六进制代码

每行十六个字节

还会显示对应的ASCII字符(!!!所以有时string窗口显示的字符串不好查看时,可以打开Hex view查看)

右键->Sychronize with可以选择时是否与某个反汇编窗口相互关联,关联后,两个窗口会同时改变位置

结构体窗口

IDA基本使用

显示二进制文件中使用的任何复杂的数据结构(C结构体和联合)

使用:

为标准数据结构的布局提供现成的参考

为你提供一种方法,发现程序使用的自定义数据结构时,帮助你创建自己的,可用作内存布局的数据结构

枚举窗口

IDA基本使用

显示检测到的标准枚举数据类型(C enum)

可以自定义枚举类型

Strings窗口 

views->open subviews->Strings打开窗口

显示的是从二进制文件中提取出来的一组字符串,以及字符串所在的地址

IDA基本使用

从中可以查找程序中使用的字符串(有时也可以用Hex view查勘字符串,但是一般在string窗口中检索想要的关键字符串)

与交叉引用相结合可以快速定位字符串,跟踪到程序中引用这个字符串的位置

Names窗口

IDA基本使用

 显示全局名称

名称是指对一个程序虚拟地址的符号引用

F常规函数

L库函数

I导入的名称

C命名代码

D数据

A字符串数据

ACDU

反汇编的代码并不是完美的,需要手动进行调试

ACDU可以将一段数据类型转化成代码(C),数据(D),未定义的二进制数据(U),字符(A)

例如:

IDA基本使用

 选择一段数据,按下A

IDA基本使用

交叉引用

文件中存储的一些数据,我们知道计算机是存储程序式结构,代码部分会对数据进行操作,使用IDA的交叉引用可以查看对于一个地址处的数据被哪些地方的代码进行了引用

我们就可以根据一个数据进行跟踪

概念

交叉引用是一个地址引用一个地址

根据图论的知识,可以把地址看成节点,把交叉引用看成边

分为代码交叉引用和数据交叉引用

代码交叉引用(函数调用,顺序执行和跳转)

三种基本的流

普通流,跳转流,调用流

普通流:就是顺序执行,默认执行流,执行紧跟在后面的指令

跳转流:无条件分支和条件分支分配到一跳转流,注释中出现j后缀

调用流:调用一个函数使用调用流,使用后缀p

数据数据交叉引用

读取交叉引用:访问某个内存位置

写入交叉引用:写入内内存

偏移量交叉引用:引用某个位置的地址

访问交叉引用列表

将光标放在指定位置

指定位置Ctrl+X

指定位置Views->Open Subviews->Cross—References

IDA基本使用

 双击一个位置就可以跳转到这个位置

IDA静态分析

静态分析,就是根据反汇编器生成的结果,在不运行这个程序的情况下,逆向分析这个程序的运行过程。

当然反汇编器是机械的根据算法来生成反汇编代码,而逆向和防止逆向是相互竞争的,为了防止逆向,机器代码掺杂了脏字节之类的东西,导致反汇编算法不能正确分析,这是也需要我们手动来调整。而且反汇编生成的代码的变量没有任何实际意义,当我们分析清楚其功能的时候,可以重命名。也可以加注释辅助逆向分析。

IDA基本使用

名称

IDA会自动生成生成与虚拟地址和与栈帧变量有关的名称,这些名称不能帮助我们认识位置和变量的用途,称为哑名

IDA可以修改名称

修改参数,局部变量,函数名称

按快捷键N可以将光标位置的变量,函数重命名,输入一个空名称IDA会生成默认名称

IDA基本使用

修改地址的名称

按快捷键N将光标位置的地址重命名

IDA基本使用

重命名寄存器

按快捷键N将光标位置的寄存器重命名

IDA基本使用

当编译器将变量分配在寄存器中,而不是程序栈上时

为了更好地引用这个变量,需要重命名寄存器

IDA注释 

使用“:”,或者“;”快捷键

函数操作

新建函数

IDA基本使用

添加一个手动分析,IDA没有分析出来的函数

删除函数

IDA基本使用

删除一个认为IDA分析错误的函数

代码和数据的相互转换 

使用快捷键ACDU

字符串

IDA能是识别大量的字符串格式,默认会搜索并格式化成C风格

可以切换字符串格式

IDA基本使用

指定数组

IDA生成的反汇编代码很少提供数组大小的信息

只有数组第一个元素被引用

要生成一个便于分析的数组需要手动创建

选择数组第一个元素,菜单栏选择Edit->Array

IDA基本使用

创建数组的时候,确保将数组中的第一个元素的大小更改为适当的值,从而为数组的元素选择适当的大小 

显示汇编语言对应的机器码

IDA基本使用

选中这部分汇编代码

IDA基本使用

IDA基本使用

 将Number of opcode bytes改为10,OK

 IDA基本使用

提取数据

IDA基本使用

 选中数据,shift+e

打补丁

Patch

Patch就是打补丁,什么是打补丁,就是修改汇编代码

选中汇编代码

IDA基本使用

Chang bytes可以修改汇编语言对应的机器码

IDA基本使用

Assemble instruction可以修改汇编指令

IDA基本使用

修改exe文件并保存运行

按照上述操作进行修改之后,我们修改的信息存在了数据库中

IDA基本使用

exe文件是不会修改的,若我们想得到修改后的一个exe文件 ,进行下面的操作

IDA基本使用

IDA基本使用

IDA脚本

脚本可以帮助我们完成很多重复的工作,IDA的脚本是针对IDA的工作的脚本。

脚本语言又被称为扩建的语言, 或者动态语言, 是一种编程语言, 用来控制软件应用程序。

IDA基本使用

脚本的使用方式和IDC语法

脚本是什么

英文是Script,就是脚本,剧本的意思

就是我们可以将一些IDA的操作写在一个程序里面,让这个脚本程序运行这些操作,按照你定义的剧本让这个IDA运转

比如批量修改内存中的数据,批量打印内存中数据等等都需要脚本,人工一个一个修改或提取很麻烦

当对IDA的最基本操作有了解之后,我们可以尝试编写脚本来方便我们的工作

速成IDC语法看下面这一篇

IDC语法

了解更多看这一篇

IDA脚本

关于IDC的自动化动态调试,以及一些题目中可以用到的IDC脚本示例

可以在下面博客查看

IDC 自动化动态调试&&IDC 常用的脚本

IDA插件

IDA基本使用

概念

IDA插件是经过编译的,功能更加强大的IDC脚本

通常和热键,菜单关联

插件可能是通用的

处理各种二进制文件或者提供各种处理器体系结构使用

构建插件

插件在Windows上是有效的DLL文件,扩展名为.plx,.pmc,.plx64,lmc64

安装插件

将编译好的插件模块复制到<IDADIR>plugins目录当中

IDA基本使用

Windows不能覆写一个正在使用的可执行文件,安装一个插件必须确保IDA卸载了旧版本的插件

插件配置

配置插件通过<IDADIR>/plugins/plugins.cfg文件中的设置 

IDA基本使用

存有插件的如下信息

  • 插件的一个备选菜单说明,这个值重写插件的want_name数据成员
  • 插件的一个非标准存储位置或文件扩展名。默认情况下,IDA在<IDADIR>/plugins下搜索插件,期待插件拥有一个默认的,特定于平台的文件扩展名
  • 插件的热键
  • 供调试器可选DEBUG标志

IDAPython

IDAPython最初由Gergely Erdelyi和Ero Carrera在2004年合作开发,目的是取代IDA自带的idc脚本引擎,提供更强大的扩展能力和自动化分析能力。

受到IDA用户的普遍欢迎。是一个开源项目,可以下载该插件。对其进行修改。

IDAPython信息

存放IDAPython的github网址

IDA动态调试

有时候程序在运行过程中会生成一些关键的数值,而人力通过静态分析的结果模拟程序的运行来推出这些中间的数值可能很麻烦。简单重复的工作是计算机所擅长的而不是人,所以我们可以让这个程序运行起来,得到这些中间过程的数值。这就是动态调试。

IDA基本使用

调试器通常用于执行以下两种任务(大概了解)

分析与已崩溃进程有关的内存映像,以一种完全受控的方式执行进程

调试会话以一个接受调试的进程为起点

大多数调试器能够依附在一个正在进行的进程上

选择一个进程之后,调试器将捕获该进程的内存快照,以此创建一个临时数据库。除这个正在运行进程的内存映像之外,临时数据库中还包含该进程加载的所有共享库,这使得这个数据库比我们常见的数据库要复杂得多

开始动态调试

1.Debugger->Select Debugger    或按快捷键F9

使用EXE文件可以使用Local Windows Debugger

如果是ELF文件应该放在Linux上用远程调试IDA动态调试ELF文件_光无影的博客-CSDN博客

2.Debuugger->Start Process 或者F9开始调试

3.IDA将显示警告信息

IDA基本使用

 选择Yes,选择No会退出

进程控制

调试器的功能是能严密监控并修改它所调试的进程的行为

所以有一些调试的命令

IDA基本使用

Continue 继续执行一个暂停的进程。执行将继续,直到遇到一个断点暂停 F9

Pause 暂停一个正在运行的进程  使用工具栏按钮

Terminate  终止一个正在运行的进程 

Step into 执行下一条指令,如果下一条是函数调用,就进入函数第一条 F7

Step over 执行下一条指令 如果下一条是一个函数调用,会跨过 F8

Run Until Return 执行当前函数到返回 Ctrl+F7

Run to  Cursor 执行进程,直到执行到达当前的光标位置 F9

断点

软件断点

调试时候执行到设置断点的位置会中断

指定位置F2快捷键设置断点

IDA基本使用

 断点处红色显示

IDA调试器支持硬件断点和条件断点

硬件断点

IDA基本使用

在一个选定的断点处右击

IDA基本使用

选Hareware,按照需求选择读写或者执行断点,一般打在数据区域

IDA基本使用

跟踪

Debugger->Tracing->Tracing Options

IDA基本使用

IDA基本使用

寄存器变量

提供了一些特殊的寄存器,用于直接访问断点表达式中寄存器的内容

只有在调试器激活的时候才能使用寄存器变量

监视

可以持续监视一个或几个变量的值,不需要每次进程暂停后导航到相关内存的位置

显示监视列表

IDA基本使用

IDA的拓展用法

IDA的第三方图形

外部流程图

Views->Graphs->Flow Chart

外部调用图

Views->Graphs->Function Calls

显示函数调用的层次结构

外部交叉引用图

Views->Graphs->Xrefs From

本文是基本的IDA使用操作,想写一篇有些技巧性的IDA使用

Now, you can try to do some really interesting things with IDA.

Come!

Let's act.

本文是IDA的基本使用,大家想快速上手CTF逆向,可以关注本专栏中对于别的工具的介绍的博文,本专栏中还有BUUCTF逆向题的详细题解

通过这个专栏,你可以从零开始,掌握所有的CTF逆向入门知识

Reverse专栏

Ollydbg使用指南

Ollydbg使用指南_烨鹰的博客-CSDN博客

BUUCTF Reverse题解汇总

BUUCTF reverse题解汇总_烨鹰的博客-CSDN博客

大家需要找CTF有关教学资源和各种大赛WP的可以关注B站UKFC安全团队

非常平滑的讲解了CTF各个方向如何入门,对计算机零基础的同学也很友好

UKFC安全团队的个人空间-UKFC安全团队个人主页-哔哩哔哩视频

IDA基本使用文章来源地址https://www.toymoban.com/news/detail-455637.html

到了这里,关于IDA基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis的逆向工程

    正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类 Mapper接口 Mapper映射文件 添加依赖和插件 创建MyBatis的核心配置文件 创建逆向工程的配置文件

    2024年02月09日
    浏览(42)
  • android 逆向工程(待续)

    资源汇总 reverse-engineering Android App Reverse Engineering 101 Awesome-Android-Reverse-Engineering ***** Awesome-Hacking 程绍银-中科大 Radare2 Radare2是一个强大的、开源的、跨平台的逆向工程框架和命令行工具。它主要用于分析、调试和操作二进制文件,包括但不限于 ELF、PE、Mach-O、DEX 和 RAW 等多种

    2024年02月04日
    浏览(51)
  • 解决xorm逆向工程问题

    问题 xorm : 无法将“xorm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 今天在用xorm做逆向工程的时候碰到了一个普遍问题,xorm : 无法将“xorm”项识别为 cmdlet、函数、脚本文件或可运行程序的名

    2024年02月05日
    浏览(50)
  • Android 逆向工程,反编译心得

    apk的反编译是我们在Android开发中绕不开的一个坎,对于反编译这门技术,我们应该抱着学习的态度,学的越多,也越能防备别人反编译我们,这就是所谓的知己知彼吧,哈哈 Apktool ,解包和重新打包都需要它 dex-tools ,可以直接把apk中的classes.dex文件反编译为.jar文件 jd-gui ,

    2024年02月06日
    浏览(166)
  • ARM软件逆向工程入门 00

    ARM指令集是一种低功耗、小尺寸和低成本的指令集,它具有以下特点: ARM指令集具有良好的可移植性,可以在不同的架构上运行; ARM指令集支持32位和64位,减少指令的数量,提高运行效率; ARM指令集支持硬件加速,可以更有效的利用处理器的资源; ARM指令集可以节省系统

    2024年02月07日
    浏览(51)
  • MyBatis --- 缓存、逆向工程、分页插件

    一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问 使一级缓存失效的四种情况: 1、不同的SqlSession对应不同的一级缓存 2、同一个SqlSession但是查询条件不同 3、同一个SqlSession两次查询期

    2023年04月09日
    浏览(43)
  • NO.08 MyBatis创建逆向工程

    目录 1、前言 2、添加依赖和插件  3、创建MyBatis的核心配置文件  4、创建逆向工程的配置文件  5、执行MBG插件的generate目标 工程的创建有正向工程和逆向工程之分。正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表,如Hibernate是支持正向工程的。 逆向工程:

    2024年02月11日
    浏览(45)
  • 小程序逆向工程:这个开源的小程序逆向工具真不错,2023年亲测成功

    安全部门的大哥又双叒叕报了一个小程序的高危漏洞,他使用逆向工程破解了加密信心,用抓包修改了请求参数。又是头疼的一天… 想成为一名微信小程序的开发者,前端思路的学习和安全意识是非常有必要的,故务必掌握小程序反编译技能。 这里用到了2个工具《解密》与

    2023年04月19日
    浏览(62)
  • 【Spring】SpringBoot整合MybatisPlusGernerator,MybatisPlus逆向工程

       📝个人主页:哈__ 期待您的关注  在我们写项目的时候,我们时常会因为需要创建很多的项目结构而头疼。项目中的表很多的时候,我们连实体类都创建不完,这时候就需要我们的逆向工程来帮助我们生成我们的框架结构。这些结构都差不多,实体类,表现层,业务层和

    2024年04月15日
    浏览(49)
  • 【MyBatis】五、MyBatis的缓存机制与逆向工程

    MyBatis的一级缓存是默认开启的,是基于SqlSession级别的缓存,也就是说,只要是同一个sqlSession,只要执行的语句相同,则不会去数据库中进行查找,而是会从缓存中找到对应的结果。 使用了不同的sqlsession对象 同一个sqlsession对象,但查询条件不同 两次查询之间进行了增删改

    2024年02月09日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包