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

这篇具有很好参考价值的文章主要介绍了【软件逆向-分析工具】反汇编和反编译工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、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://www.toymoban.com/news/detail-441005.html

到了这里,关于【软件逆向-分析工具】反汇编和反编译工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 京东数据分析软件工具(京东618销量查询)

    这一期,我们主要分享今年618京东美妆的预售数据,包括面部护肤、香水彩妆、男士面部护肤品类。 -面部护肤- 今年618,面部护肤品类在京东累计预售量达到130万件,预售额达到13亿元。预售期间,护肤品类均价在1010元左右。期间,约有381个热销品牌和500家热销店铺,是今年

    2024年02月08日
    浏览(51)
  • 电商平台数据查询工具(京东数据分析软件)

    ​“京东爆款如何打造”是很多商家都头疼的问题。 下面,6个步骤分享给大家。 首先是选品。对于处于不同阶段的商家来说,选品方式不同。 针对正准备开店的商家,选品可通过以下方式: (1)市场分析和自身情况,确定主打品类。 (2)行业市场和京东平台市场、品类

    2024年02月04日
    浏览(55)
  • Linux开发工具大全 - 软件包管理器yum | vim编辑器 | gcc/g++编译器 | 自动化构建工具Make/Makefile | gdb调试工具

    目录 Ⅰ.  Linux 软件包管理器 yum 一、yum 背景知识 二、yum 的基本使用 1、查看软件包 2、软件包名称构成 3、安装软件 4、卸载软件 Ⅱ.vim编辑器  一、认识vim 1、vim概念  2、模式及其切换  二、vim使用 1、vim的指令(重要)  命令模式 插入模式 底行模式 2、vim配置 Ⅲ.gcc/g++编

    2024年02月05日
    浏览(55)
  • BI数据分析软件:选择最适合企业发展的工具

    随着大数据时代的到来,数据分析在各个行业中扮演着越来越重要的角色。而BI数据分析软件作为数据处理和可视化的核心工具,既能帮助企业更好地理解和利用数据,又能提升决策的准确性和效率。在市面上,有许多优秀的BI数据分析软件可以供我们选择,那么接下来,数聚

    2024年04月11日
    浏览(41)
  • C++常用软件分析工具从入门到精通案例集锦汇总

    本文是 C++常用软件分析工具从入门到精通案例集锦 专栏的导航贴( 点击链接,跳转到专栏主页,欢迎订阅,持续更新… )。 专栏介绍 :根据近几年C++软件异常排查的项目实践,详细地讲述如何使用PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clum

    2024年02月14日
    浏览(48)
  • C++(Qt)软件调试---静态分析工具clang-tidy(18)

    更多精彩内容 👉个人内容分类汇总 👈 👉C++软件调试、异常定位 👈 现在很多人在开发中完全忽略了编译器、IDE的警告提示,这怎么可能写出稳定的程序。 clang-tidy是一个由LLVM项目提供的开源工具,是一个静态分析工具,用于进行静态代码分析和代码质量改进。 支持C++/C

    2024年01月23日
    浏览(39)
  • [系统安全] 四十五.恶意软件分析 (1)静态分析Capa经典工具的基本用法万字详解

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更

    2023年04月16日
    浏览(46)
  • [系统安全] 四十六.恶意软件分析 (2)静态分析Capa经典工具批量提取静态特征和ATT&CK技战术

    终于忙完初稿,开心地写一篇博客。 您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代

    2024年02月11日
    浏览(42)
  • 软考高级系统架构设计师系列论文八十九:论软件需求分析方法和工具的选用

    软考高级系统架构设计师:论软件需求管理

    2024年02月11日
    浏览(55)
  • 软考140-上午题-【软件工程】-软件工具

    用来辅助软件开发、运行、维护、管理和支持等过程中的活动的软件称为软件工具。 对应于软件开发过程的各种活动,软件开发工具通常有:需求分析工具、设计工具、编码与 排错工具、测试工具等。 辅助软件维护过程中活动的软件称为软件维护工具,它辅助维护人员对软

    2024年04月24日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包