
C/C++逆向
文章平均质量分 92
WolvenSec
这个作者很懒,什么都没留下…
展开
-
C/C++逆向:虚函数逆向分析
(Virtual Function)是C++中实现的一种机制,它允许在运行时通过基类的指针或引用调用派生类中的函数,而不是基类中的版本。虚函数通常与和结合使用。通过在基类中使用virtual关键字声明函数,允许派生类重写该函数。当通过基类指针或引用调用时,根据对象的实际类型决定调用哪个版本的函数;它依赖虚函数表(vtable)实现,用于动态绑定,常用于多态场景下的接口设计和扩展。每个包含虚函数的类都有一张虚函数表:如果类没有派生类,则虚函数表存储类自身的虚函数地址。原创 2024-11-25 21:35:59 · 1357 阅读 · 0 评论 -
C/C++逆向:对象布局&thiscall
在逆向工程中,类的逆向分析非常重要,尤其逆向分析的对象为面向对象的编程语言(如C++)所编写的程序时类的分析就显得更加重要。这是因为类结构往往承载了程序的核心逻辑和设计模式。通过还原类的结构、继承关系和成员函数,逆向工程师能够理解程序的整体架构、功能实现以及开发者的设计意图,从而有效识别关键模块、提升分析效率。类的分析比结构体更复杂,因为类除了数据成员外,还包含了方法(函数)和继承关系。原创 2024-11-17 10:51:52 · 1091 阅读 · 0 评论 -
C/C++逆向:结构体逆向分析
在C/C++程序的逆向分析中,结构体的逆向分析是非常重要的。结构体是C/C++中管理和组织数据的一种主要方式。了解它们的布局可以帮助你理解程序是如何存储、处理和传递数据的,结构体常用于组织和管理复杂的数据,理解结构体有助于我们更好地还原程序的逻辑、推断数据布局,并解读与操作这些数据的函数。因此,识别并分析结构体可以帮助你更全面地理解程序的内存布局和数据流。接着我们可以来简单说一下如何识别结构体。原创 2024-11-11 08:29:26 · 1251 阅读 · 0 评论 -
C/C++逆向:二维数组分析
多维数组是指包含两个或两个以上维度的数组。常见的多维数组有二维数组、三维数组等。对于程序的逆向工程,多维数组的分析通常需要理解数组的内存布局、存储方式以及程序对数组的访问方式。原创 2024-10-31 11:58:24 · 1112 阅读 · 0 评论 -
C/C++逆向:字符数组与字符串对比
在逆向工程中,字符数组和字符串的处理是一个重要的方面。字符数组通常是由相同类型的数据元素组成的集合,存储在连续的内存空间中,而字符串则是字符数组的一种特殊形式,用于表示文本信息。字符数组和字符串的区别主要体现在它们的定义、使用方式以及内存管理上。从逆向工程的角度来看,字符数组和字符串的差异可以通过分析汇编代码、内存布局、以及程序运行时的行为来进一步理解。这种差异会在二进制级别影响程序的结构、数据操作方式和函数调用。下面我们先给出一个C代码例子:#include<stdio.h>#incl原创 2024-10-25 09:28:18 · 354 阅读 · 0 评论 -
C/C++逆向:数组逆向分析
数组在逆向工程中是一个重要的分析对象,数组是存储数据的重要数据结构,尤其在程序中用于存储一系列相同类型的元素。通过逆向分析数组,可以理解程序是如何处理和组织这些数据的,从而揭示程序的内部逻辑。在软件安全领域,逆向分析数组可以帮助安全研究人员发现程序中的潜在安全漏洞,例如缓冲区溢出、数组越界访问等。这些漏洞可能会被恶意利用,因此通过逆向分析可以增强软件的安全性。原创 2024-10-19 12:37:22 · 967 阅读 · 0 评论 -
C/C++逆向:函数逆向分析-总体流程(整型&指针)
在逆向工程中,函数的初始化操作是函数在开始执行时,为正确运行而进行的准备工作。在本文中,我们深入探讨了函数逆向工程的整体流程,通过对函数的结构、调用约定及其参数传递方式的详细分析,能够有效地识别和理解目标程序的行为,为后续的漏洞分析和安全研究奠定基础。这些保存寄存器的指令通常出现在函数的序言阶段,他们是函数初始化的一部分,标志着对调用者上下文的保护。进入函数后,直接将四个寄存器中的参数值压入栈中(可以看到x64架构的程序虽然是使用寄存器进行参数传递,但是在函数中还是需要将这些寄存器中的值压入栈中)原创 2024-10-11 14:11:08 · 1111 阅读 · 0 评论 -
C/C++逆向:函数逆向分析-调用约定分析
在进行函数逆向分析时,分析其具有非常重要的作用,因为调用约定直接影响了函数的参数传递、返回值、栈管理、寄存器使用等多个方面,不同的编译器和平台可能有不同的默认调用约定,识别调用约定可以帮助判断代码是由哪种编译器生成的。例如:①Windows API 函数通常使用 stdcall 调用约定。②在 x64 平台,Windows 使用的调用约定与 Linux 的 System V 调用约定有所不同。③通过调用约定,可以更好地识别代码的上下文,甚至推断出目标程序使用的编译器和编译选项。原创 2024-10-04 18:43:19 · 1044 阅读 · 0 评论 -
C/C++逆向:数据类型识别
在逆向工程中,数据类型识别是理解程序逻辑的重要步骤,因为它直接影响对程序逻辑和功能的理解,识别出数据类型有助于确定变量的含义和函数的行为。在分析恶意软件或者寻找安全漏洞时,识别数据类型能够帮助发现代码中的潜在问题。例如,缓冲区溢出问题通常与错误的数据类型或者数组边界检查不当有关,了解变量的类型和大小有助于发现这类安全问题。那接下去我们就通过一个简单的例子来针对不同类型的数据进行特征分析。原创 2024-09-30 09:36:57 · 1480 阅读 · 0 评论 -
C/C++逆向:循环语句逆向分析
初始化:var_2C 初始化为 0。条件检查:每次循环开始时,比较 var_2C 是否小于 5。递增计数器:在每次循环结束时,var_2C 增加 1。累加操作:每次循环中,将 var_2C 的值加到 var_8 中。循环终止:当 var_2C >= 5 时,跳出循环。var_2C < 5;var_2C++);这段代码实现了一个do-while循环,其中var_44作为循环计数器,从 0 开始,每次循环中都会将计数器的值累加到var_20,直到计数器达到 5 后,循环结束。do {原创 2024-09-25 23:04:56 · 1539 阅读 · 0 评论 -
C/C++逆向:switch语句逆向分析
在逆向分析中,switch语句会被编译器转化为不同的底层实现方式,这取决于编译器优化和具体的场景。原创 2024-09-22 23:21:23 · 1662 阅读 · 0 评论 -
C/C++逆向:if语句逆向分析
在逆向工程中,分析汇编代码中的if语句是一项常见任务,因为条件分支是程序控制流的重要组成部分。在高级语言(如 C/C++、Java)中,if语句用于控制程序逻辑的分支。在汇编层面,if语句的逻辑通常会被编译器转换为条件跳转指令,如JEJNEJGJL(Jump if Less)等。if。原创 2024-09-05 09:00:11 · 1151 阅读 · 0 评论 -
C/C++逆向:寻找mian函数(其他编译配置特征)
在上篇文章中写了在逆向中定位main函数几种方法,其中有一种方法是通过编译器特征定位main函数(使用IDA分析简单demo程序获取特征,根据得到的特征可以定位相同编译器编译程序的main函数)。在上一篇文章中我们提取了VS环境(VS2017)中MSVC编译器编译配置与目标平台架构分别为Debug和x86生成的程序特征,从而正确定位到了main函数所在位置。本篇文章主要写一下根据编译器特征定位main函数的方法,提取VS环境(VS2017)生成的编译配置与目标平台架构分别为Debugx64Release。原创 2024-09-01 22:27:10 · 1699 阅读 · 0 评论 -
C/C++逆向:寻找main函数(Debug-x86)
在程序的逆向分析中,寻找main函数在逆向分析中是非常重要的,它是程序的核心执行点,从这里开始,程序的主要逻辑开始展开;和;它们分别指代了程序的不同阶段的执行起点。原创 2024-08-25 22:50:32 · 1694 阅读 · 0 评论 -
C/C++逆向:x96dbg(x64dbg/x86dbg)的使用
这篇文章主要来说一下x96dbg(x64/x86)的基本使用,这里还是使用上篇文章中的简单程序用来作为本篇文章的实例,因为上篇文章再生成程序时选用的解决方案平台为x86所以生成的程序则需要我们使用x32dbg来进行分析。这边与IDA一样,我们可以将程序拖到图标上。此时x32dbg就会自动针对该程序进行加载,接下去我们就可以进行调试了。在加载完成后可以看到调试器下方显示。这个系统断点通常指的是调试器在程序启动时自动设置的第一个断点,也称为断点。原创 2024-08-19 14:52:34 · 2650 阅读 · 0 评论 -
C/C++软件逆向:IDA基本使用
这篇文章主要来说一下IDA的基本使用,那么在此之前先来准备一个简单的程序,作为IDA使用的实例。VS 创建一个C++项目,并设置项目属性:设置运行库为MTd(默认是MDd)在Visual Studio中,运行库选项(Runtime Library)决定了项目在编译和链接时使用的C/C++运行时库。Visual Studio中的主要运行库选项包括:直接生成程序:打开当前项目所在目录,找到生成的exe程序;可以看到与exe同目录下还存在着和两个文件;那么这两个文件是什么,与exe文件的关系又是什么。有文件时,静原创 2024-08-18 12:45:31 · 2316 阅读 · 0 评论 -
C/C++逆向:概念&工具安装
软件逆向工程(Software Reverse Engineering,简称逆向工程)是指通过分析现有软件系统的代码、结构和功能,来推测或重建其设计、算法和实现细节的过程。在逆向工程中,混合分析是一种结合静态分析和动态分析的策略,利用两者的优势,全面理解和分析目标程序。静态分析是在不运行程序的情况下,对软件的代码或二进制文件进行分析,分析的内容可以包括源代码(如果可用)、反汇编代码、反编译后的伪代码、程序结构、数据流、控制流等。不依赖于特定的运行环境,因此可以在不同平台上进行分析。这类行为通常是不合法的。原创 2024-08-17 11:44:09 · 1372 阅读 · 0 评论