当前位置:网站首页>【软件逆向-分析工具】反汇编和反编译工具

【软件逆向-分析工具】反汇编和反编译工具

2022-07-05 03:33:00 黑色地带(崛起)

目录

一、IDA

1.1、简介:

1.2、使用方法:

(1)IDA打开文件

(2)IDA主窗口介绍

(3)IDA的基本使用

二、调试器

2.1、简介:

2.2、Ollydbg

(1)主界面

(2)断点操作

(3)代码跟踪操作

2.3、gdb

(1)简介:

(2)安装

(3)基本的调试操作

三、Trace类工具

3.1、简介:

3.2、Qira


一、IDA

1.1、简介:

反汇编工具有很多,但功能最强大、应用最广泛的当属IDA Pro(简称IDA)。在反编译方面,最好的反编译工具为IDA自带的Hex-Ray插件(快捷键为F5),所以这里主要介绍IDA。

IDA支持的文件类型非常丰富,除了包括PE格式、ELF格式之外,还包括DOS、Mach-O、.NET等文件格式。同时IDA还支持几十种不同的处理器架构。

1.2、使用方法:

(1)IDA打开文件

通过菜单栏中的File→Open,选择要分析的目标程序,IDA自动识别出了程序为x86_64的ELF程
序,直接点击OK即可。


(2)IDA主窗口介绍

(1)工具栏区域:常用工具

(2)导航带:加载文件的地址空间的线性视图,其会呈现二进制文件的整个地址范围。不同的颜色表示不同类型的文件

(3)函数窗口:显示了所有的函数

(4)数据显示窗口:数据显示窗口包括:反汇编窗口、反编译窗口、导入表窗口、导出表窗口、结构体窗口等。

(5)消息窗口:是IDA输出的信息,等同于一个控制台输出设备。


(3)IDA的基本使用

(1)函数修正

以push ebp/rbp指令开头的地址为一个函数的起始地址,但是有时候IDA并没有将其正确地识别为函数,此时就需要手动地将其创建为函数,创建函数之后通常就能对该函数进行反编译操作

创建函数的方式为:在函数的起始地址的汇编代码处,点击右键,选择Create Function,对应的快捷键为P

(2)指令修正

在IDA中,如果某些指令或者数据识别有误,可以进行手动修正(如使用快捷键D可转化为数据,使用快捷键C可转化为代码)

(3)数据修正

在数据段中,一个数据的长度可能为1、2、4或8字节,此时可以通过快捷键D来修改为对应的类型。

如果数据段中的某个部分为一个字符串,但是IDA并没有正确识别,那么可以使用快捷键A将其转换为一个ASCII字符串。

(4)注释信息与重命名

修改程序中的变量或者函数名等信息帮助读者理解,点击右键,选择Rename即可进行重命名。

此外,还可以为代码添加注释,使用快捷键“;”可以在反汇编窗口中添加注释,使用快捷键“/”可以在反编译窗口添加注释。

对于一些针对不常用处理器架构编写的程序,可以开启汇编的自动注释功能。开启的方式为勾选界面中的Auto comments

(5)二进制程序的patch

将修正后的多余字节转化为空指令(nop指令,对应的字节码为0x90),这样函数就能够正常地反编译

选择菜单栏中的Edit→Patch program→Change byte功能进行修改

(6)交叉引用

IDA中包含了两类:代码交叉引用和数据交叉引用。

代码交叉引用:

用于表示一条指令将控制权转交给另一条指令。通过代码交叉引用,可以知道哪些指令调用了哪个函数或指令。

数据交叉引用:

可用于追踪二进制文件访问数据的方式。通过数据交叉引用,可以知道哪些指令访问了哪些数据。



二、调试器

2.1、简介:

在逆向分析领域,分析者也会利用相关的调试工具来分析软件的行为并验证结果

调试器的两个最基本的特征是:断点设置和代码跟踪。

断点允许用户选择程序中任意位置的某行代码,一旦程序运行到这一行,那么它将指示调试器暂停运行程序,并显示程序的当前状态。

代码跟踪允许用户在程序运行时跟踪它的执行,跟踪意味着程序每执行一条汇编代码然后暂停,并允许用户观察甚至改变程序的状态。

常用的调试器包括:Ollydbg、x64dbg、Windbg和gdb等。其中,Ollydbg可以调试Windows下的32位用户态程序;x64dbg可以调试Windows下的64位应用程序;Windbg是微软提供的调试器,可以对用户程序和系统内核进行调试,但是GUI界面相对来说没有那么友好;gdb是Linux系统下所用的主要调试器。下面主要讲解最常用到的Ollydbg和gdb。

2.2、Ollydbg

Ollydbg(简称OD)是Windows下的一款具有可视化界面的用户态调试工具。OD具有GUI界面,非常容易上手。专用版Ollydbg,该版本具有强大的对抗反调试的功能。


(1)主界面

反汇编窗口:载入程序后,窗口内显示的是程序反汇编后的源代码。

信息窗口:进行动态调试时,窗口内会显示出当前代码行的各个寄存器的信息,或者API函数的调用、跳转等信息,可以用来辅助了解当前代码行的寄存器的运行情况。

数据窗口:默认以十六进制的方式显示内存中的数据。

寄存器窗口:动态显示CPU各个寄存器的内容,包括数据寄存器、指针及变址寄存器、段寄存器,以及控制寄存器中的程序状态字寄存器。

堆栈窗口:显示堆栈的内容。调用API函数或子程序时,通过查看堆栈可以知道传递的参数等信息。

命令行:在原本的OD中是没有命令行的,这个是一个外置的插件,可以方便地在动态调试时输入命令。一般来说,主要是输入下断点或者清除断点的命令。“命令行命令.txt”文件中有详细的命令及
功能介绍,大家可以查看。


(2)断点操作

动态调试时要使程序在关键代码处中断,然后根据显示的动态信息进行动态分析,这就需要对程序下断点。断点有一般断点、内存断点、硬件断点等类型,一般断点是最常使用的断点方式。

1)一般断点
一般断点就是将输入的断点地址处的第一个字节用INT3指令来代替。当程序运行到断点地址时,就会执行INT3指令,Ollydbg就会捕捉到这个指令而中断下来。

下断点一般有如下两种方式:

F2键:在反汇编窗口中的代码行上面按F2键就可以下断点。下
断点后,虚拟地址处将呈红色状态。如果想取消断点,再按一下F2键
即可。

命令行方式:可以在命令行中使用bp命令下断点。如bp 4516B8
或者bp MessageBoxA。

2)内存断点

内存断点分为两种:内存访问断点和内存写入断点。OD每一时刻只允许有一个内存断点。

内存访问断点:在程序运行时调用被选择的内存数据就会被OD中断。根据这个特点,在破解跟踪时只要在关键数据内存中下断点,就可以知道程序在什么地方和什么时候用到了跟踪的数据。该功能对于一些复杂算法的跟踪有很大的帮助。从破解上讲,一个注册码的生成一定是由一些关键数据或者原始数据计算而来的,所以在内存中一定会用到这些关键数据,那么内存访问断点就是比较好的中断方法。

内存写入断点:在程序运行时向被选择的内存地址写入数据就会被OD中断。根据这个特点,在破解时可以跟踪一个关键数据是什么时候生成的,生成的代码段在什么地方。所以,如果不知道一个关键数据的由来,就可以用内存写入断点的方式查看计算的核心。

如果想要设置内存断点,则可以在数据窗口中的十六进制栏内选择一部分内存数据,然后单击鼠标右键出现功能菜单,选择“断点”,然后从中选择内存访问断点或者内存写入断点。

3)硬件断点

硬件断点并不会将程序代码改为INT3指令,如果有些程序有自校验功能,就可以使用硬件断点了。下中断的方法和下内存断点的方法相同,共有三种方式:硬件访问、硬件写入、硬件执行。最多一共可以设置4个硬件断点。


(3)代码跟踪操作

代码跟踪操作主要包括一些常见的快捷键,用于对程序进行动态跟踪。

F9键:载入程序后,按F9键就可以运行程序了。

F7键:单步跟踪(步入),即一条代码一条代码地执行,遇到Call语句时会跟入执行该语句调用地址处的代码或者调用的函数代码。

F8键:单步跟踪(步过),遇到Call语句时不会跟入。

F4键:执行到所选代码。

ALT+F9键:执行到程序领空,如果进入到引用的DLL模块领空,则可以用此快捷键快速回到程序领空。

2.3、gdb

(1)简介:

gdb是一个由GNU开源组织发布的、UNIX/Linux操作系统下的、基于命令行的、功能强大的程序调试工具。


(2)安装

在大多数Linux发行版中,gdb都是默认安装的,如果没有,那么在Ubuntu下可以通过apt-get进行安装

安装命令为:sudo apt-get install gdb

如果需要调试其他架构的elf程序,则可以安装gdb-multiarch

安装命令为:sudo apt-get install gdb-multiarch

此外,gdb也有很多插件,如peda、gef、pwndbg等,这里的插件提供了一些额外的命令,便于对程序进行逆向分析。这些插件都可以在Github上找到,根据其安装说明进行安装即可。图9-9为gdb安装了peda插件之后运行的界面,可以通过peda help命令查看新增的命令。


(3)基本的调试操作

1)启动和结束gdb

2)通用命令

3)断点

4)运行调试目标

5)查看和修改程序状态

6)其他命令



三、Trace类工具

3.1、简介:

通过一定的方式监控并记录程序的运行,然后使分析者在记录的信息中得到程序的一些动态信息

eg:strace工具是Linux下的一个用来跟踪系统调用的工具。一个更为强大的Trace类工具:Qira。

3.2、Qira

官方主页为http://qira.me/,由著名的黑客geohot开发。安装完成之后,运行命令qira-s/bin/ls,这样相当于在4000端口开启服务/bin/ls,使用nc localhost 4000即可连接上去。同时,还会开启3002的Web端口,如图9-10所示。

浏览器Web界面主要包括:

1)最左边两列为fork,每次用nc连一次4000端口,就会多一个fork。图9-10中的两列表示链接过两次4000端口。

2)右边的最上面有4个框,分别对应如下信息。

113表示程序运行的第113条指令。

0表示第0个fork。

0x80484c7表示指令的地址。

0xf6fff01c表示数据的地址。

3)右边的下面是程序运行的指令、寄存器、内存、调用的系统调
用等。

原网站

版权声明
本文为[黑色地带(崛起)]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_53079406/article/details/125600348