IDA基本使用

简介: IDA基本使用,零基础,新手友好,重点使用摘要。ida文件加载,IDA桌面简介,交叉引用,IDA动态调试,IDA脚本


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

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

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

image.gif


序言

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则代表着治理与反叛两个概念的纠缠。

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

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

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

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

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

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

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

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


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

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

开始阅读核心部分吧

IDA Pro简介

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

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

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

百度词条:

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

IDA的基本用法

ida文件加载

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

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

IDA桌面简介

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

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

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

导航带

image.gif

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

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

反汇编窗口

image.gif

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

image.gif

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

图中.text是代码段

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

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

image.gif

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

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

image.gif

文本窗口右边是箭头窗口

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

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

image.gif

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

image.gif

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

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

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

交叉引用暂不做介绍

函数窗口

image.gif

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

十六进制窗口

Hex view

image.gif

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

每行十六个字节

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

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

结构体窗口

image.gif

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

使用:

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

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

枚举窗口

image.gif

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

可以自定义枚举类型

Strings窗口

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

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

image.gif

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

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

Names窗口

image.gif

显示全局名称

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

F常规函数

L库函数

I导入的名称

C命名代码

D数据

A字符串数据

ACDU

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

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

例如:

image.gif

选择一段数据,按下A

image.gif

交叉引用

概念

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

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

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

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

三种基本的流

普通流,跳转流,调用流

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

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

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

数据数据交叉引用

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

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

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

访问交叉引用列表

指定位置Ctrl+x

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

image.gif

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

IDA静态分析

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

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

名称

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

IDA可以修改名称

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

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

image.gif

修改地址的名称

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

image.gif

重命名寄存器

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

image.gif

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

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

IDA注释

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

函数操作

新建函数

image.gif

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

删除函数

image.gif

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

代码和数据的相互转换

使用快捷键ACDU

字符串

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

可以切换字符串格式

image.gif

指定数组

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

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

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

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

image.gif

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

IDA脚本

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

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

脚本的使用方式和IDC语法

IDA脚本_光无影的博客-CSDN博客

IDA插件

概念

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

通常和热键,菜单关联

插件可能是通用的

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

构建插件

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

安装插件

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

插件配置

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

IDA动态调试

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

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

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

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

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

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

开始动态调试

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

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

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

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

3.IDA将显示警告信息

image.gif

选择Yes,选择No会退出

进程控制

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

所以有一些调试的命令

image.gif

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

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

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

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

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

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

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

断点

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

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

image.gif

断点处红色显示

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

跟踪

Debugger->Tracing->Tracing Options

image.gif

IDA的拓展用法

IDA的第三方图形

外部流程图

Views->Graphs->Flow Chart

外部调用图

Views->Graphs->Function Calls

显示函数调用的层次结构

外部交叉引用图

Views->Graphs->Xrefs From

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

Come!

Let's act.

image.gif


相关文章
|
11月前
|
安全 Python Windows
[笔记]逆向工具IDA Pro之简单使用
[笔记]逆向工具IDA Pro之简单使用
908 0
|
4月前
|
Java Unix Go
ida入门教程
ida入门教程
103 0
ida入门教程
|
4月前
|
Java Android开发 数据安全/隐私保护
安卓逆向 -- IDA基本用法
安卓逆向 -- IDA基本用法
82 0
|
缓存 JavaScript iOS开发
iOS 逆向编程(十四)Cycript 语法入门
iOS 逆向编程(十四)Cycript 语法入门
182 0
|
4月前
|
Linux 数据安全/隐私保护 iOS开发
【教程】使用ipagurd打包与混淆Cocos2d-x的Lua脚本
本文将介绍如何使用ipagurd工具对Cocos2d-x中的Lua脚本进行打包与混淆,以及在iOS应用开发中的实际应用。我们将以Cocos2d-x-2.2.1 samples中的HelloLua为例,详细展示整个处理流程,并提供相应的代码案例演示。
|
缓存 JavaScript iOS开发
iOS 逆向编程(十五)Cycript 语法进阶(封装 .cy 脚本文件)
iOS 逆向编程(十五)Cycript 语法进阶(封装 .cy 脚本文件)
175 0
|
JavaScript 网络协议 前端开发
JS逆向 Frida - 夜神模拟器安装配置 基本使用
Frida 是一款基于 Python + JavaScript 的 Hook 与调试框架,实现app逆向的强大工具;
486 0
JS逆向 Frida - 夜神模拟器安装配置 基本使用
ObjectArx学习笔记-选择文件及ACHAR用法
ObjectArx中实现文件选择的代码如下: static void qxzyGetFileD_SelectFile(void) { // Add your code for command qxzyGetFileD._SelectFile here const ACHAR* title = L"选择图形文件"; const ACHAR* path = L"C:\\";
2791 0
|
编译器 C++
JRtplib开发笔记(二):JRtplib库编译、示例演示
JRtplib开发笔记(二):JRtplib库编译、示例演示
JRtplib开发笔记(二):JRtplib库编译、示例演示
|
Android开发 Python
【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编框架 | PyCharm 中导入 Capstone 反汇编框架 )
【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编框架 | PyCharm 中导入 Capstone 反汇编框架 )
348 0
【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编框架 | PyCharm 中导入 Capstone 反汇编框架 )