- 博客(155)
- 收藏
- 关注
原创 Web基础:CSS快速入门
CSS(Cascading Style Sheets,层叠样式表)是用于控制网页外观和布局的代码语言,它与 HTML 配合使用,可以让网页从“纯内容”变成“美观的界面”。CSS是一种样式语言,告诉网页浏览器如何呈现HTML元素。CSS溢出就像你往一个小盒子里塞了太多东西,盒子装不下了,这时候内容就会“溢出来”。用专业的话说,当元素的内容(比如文字、图片)超过了它自己设定的大小(比如固定宽高),多出来的部分就会溢出到盒子外面。
2025-03-10 08:34:54
987
原创 Win32:关闭窗口
当用户关闭窗口时,该操作会触发一系列窗口消息。用户可以通过单击“ 关闭 ”按钮或使用 Alt+F4 等键盘快捷方式来关闭应用程序窗口。 任何这些操作都会导致窗口接收 WM_CLOSE 消息。
2025-01-22 15:29:47
407
原创 Win32:窗口消息
在 GUI(图形用户界面)应用程序中,事件驱动编程是核心概念。应用程序需要响应用户和操作系统的事件,以提供交互性和动态行为。
2025-01-22 10:14:13
746
原创 Win32:WinMain 应用程序入口点
每个 Windows 程序都包含一个名为 WinMain (使用ANSI 字符集)或 wWinMain (使用Unicode 字符集)的入口点函数。
2025-01-21 16:23:06
636
原创 Win32:窗口概念
如下是一个窗口:这种类型的窗口称为应用程序窗口或main窗口。它通常具有带有标题栏、最小化和最大化按钮以及其他标准 UI 元素的框架。
2025-01-21 15:32:01
702
原创 Win32:字符串的使用
为了在 Windows 编程中更方便地使用宽字符,Windows SDK 提供了一些相关的数据类型和定义。头文件 WinNT.h 还定义了以下typedef。若要声明宽字符文本或宽字符字符串字面量,请将L置于文本前面。#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 设置入口地址在反汇编界面查看字符串地址。Windows SDK 提供的通用机制(如TCHARTEXT。
2025-01-21 09:31:33
1149
原创 Win32编程:编码约定
如果你刚开始接触Windows编程,确实会遇到一些独特的编码风格和约定,这些可能会让你感到困惑。不过,一旦你熟悉了这些约定,它们实际上会帮助你更好地理解和使用WindowsAPI。
2025-01-19 09:19:47
721
原创 PE文件:节表-添加节
在所有节的空白区域都不够存放我们想要添加的数据时,这个时候可以通过添加节来扩展我们可操作的空间去存储新的数据(如导入表、代码或资源)。
2025-01-17 23:32:23
1033
原创 PE文件结构:节表
在 PE(Portable Executable)文件结构中,是 PE 文件的重要组成部分之一,位于 PE 头之后。节表记录了各节的虚拟地址、大小、节在 PE 文件中的实际大小和节属性等内容,用于定义程序在内存中的逻辑布局,操作系统加载 PE 文件时,根据节表将不同节的数据映射到正确的内存区域;定义了各节的属性,如是否可执行、可读、可写等,操作系统会根据这些属性对相应内存区域进行保护。在调试过程中,节表可以用来定位代码和数据在文件和内存中的位置,辅助调试器解析程序结构。
2024-12-19 17:47:52
902
1
原创 PE文件结构:NT头部
RVA,全称为Relative Virtual Address(相对虚拟地址),是PE(Portable Executable,可移植执行文件)格式中用于指定地址的一种方式。在PE文件中,RVA是一种相对于PE文件的基地址(ImageBase)的偏移量,用于在内存中定位各个部分(如代码、数据、资源等)的位置。基地址(ImageBase)子系统是操作系统提供的环境,用于支持不同类型的程序。PE 文件中的子系统信息决定了程序将运行在什么样的环境中。
2024-12-10 15:02:38
1052
原创 工具集:010 Editor基本使用
010 Editor是一款功能强大的十六进制编辑器,专门设计用于查看、编辑和分析二进制文件。它提供了丰富的功能,广泛应用于软件开发、逆向工程、数据恢复、文件格式分析等领域。以下是010 Editor。
2024-12-01 11:24:25
2751
原创 PE文件结构-DOS头部
(Portable Executable File)是Windows操作系统下可执行文件使用的一种文件格式,广泛用于存储可执行程序(EXE文件)、动态链接库(DLL文件)、驱动程序(SYS文件)以及其他类型的程序代码,它是Windows应用程序的基本运行单元。PE文件结构是经过精心设计的,以支持程序在不同版本的Windows操作系统上能够移植、执行,并能与操作系统的加载机制和动态链接功能兼容。事实上,在Windows上,文件的拓展名并不直接决定文件是否是PE(Portable Executable)文件。
2024-11-30 16:15:58
863
原创 C/C++逆向:虚函数逆向分析
(Virtual Function)是C++中实现的一种机制,它允许在运行时通过基类的指针或引用调用派生类中的函数,而不是基类中的版本。虚函数通常与和结合使用。通过在基类中使用virtual关键字声明函数,允许派生类重写该函数。当通过基类指针或引用调用时,根据对象的实际类型决定调用哪个版本的函数;它依赖虚函数表(vtable)实现,用于动态绑定,常用于多态场景下的接口设计和扩展。每个包含虚函数的类都有一张虚函数表:如果类没有派生类,则虚函数表存储类自身的虚函数地址。
2024-11-25 21:35:59
1357
原创 C/C++逆向:对象布局&thiscall
在逆向工程中,类的逆向分析非常重要,尤其逆向分析的对象为面向对象的编程语言(如C++)所编写的程序时类的分析就显得更加重要。这是因为类结构往往承载了程序的核心逻辑和设计模式。通过还原类的结构、继承关系和成员函数,逆向工程师能够理解程序的整体架构、功能实现以及开发者的设计意图,从而有效识别关键模块、提升分析效率。类的分析比结构体更复杂,因为类除了数据成员外,还包含了方法(函数)和继承关系。
2024-11-17 10:51:52
1091
原创 C/C++逆向:结构体逆向分析
在C/C++程序的逆向分析中,结构体的逆向分析是非常重要的。结构体是C/C++中管理和组织数据的一种主要方式。了解它们的布局可以帮助你理解程序是如何存储、处理和传递数据的,结构体常用于组织和管理复杂的数据,理解结构体有助于我们更好地还原程序的逻辑、推断数据布局,并解读与操作这些数据的函数。因此,识别并分析结构体可以帮助你更全面地理解程序的内存布局和数据流。接着我们可以来简单说一下如何识别结构体。
2024-11-11 08:29:26
1249
1
原创 C/C++逆向:二维数组分析
多维数组是指包含两个或两个以上维度的数组。常见的多维数组有二维数组、三维数组等。对于程序的逆向工程,多维数组的分析通常需要理解数组的内存布局、存储方式以及程序对数组的访问方式。
2024-10-31 11:58:24
1110
原创 C/C++逆向:字符数组与字符串对比
在逆向工程中,字符数组和字符串的处理是一个重要的方面。字符数组通常是由相同类型的数据元素组成的集合,存储在连续的内存空间中,而字符串则是字符数组的一种特殊形式,用于表示文本信息。字符数组和字符串的区别主要体现在它们的定义、使用方式以及内存管理上。从逆向工程的角度来看,字符数组和字符串的差异可以通过分析汇编代码、内存布局、以及程序运行时的行为来进一步理解。这种差异会在二进制级别影响程序的结构、数据操作方式和函数调用。下面我们先给出一个C代码例子:#include<stdio.h>#incl
2024-10-25 09:28:18
352
原创 C/C++:指针数组与数组指针
指针数组:数组中的每个元素都是指针。,表示一个数组,数组内有 5 个指针,每个指针指向int类型的数据。数组指针:一个指向数组的指针。,表示一个指向含有 5 个int类型元素的数组的指针。
2024-10-23 14:42:29
411
原创 C/C++逆向:数组逆向分析
数组在逆向工程中是一个重要的分析对象,数组是存储数据的重要数据结构,尤其在程序中用于存储一系列相同类型的元素。通过逆向分析数组,可以理解程序是如何处理和组织这些数据的,从而揭示程序的内部逻辑。在软件安全领域,逆向分析数组可以帮助安全研究人员发现程序中的潜在安全漏洞,例如缓冲区溢出、数组越界访问等。这些漏洞可能会被恶意利用,因此通过逆向分析可以增强软件的安全性。
2024-10-19 12:37:22
965
原创 C/C++逆向:函数逆向分析-总体流程(整型&指针)
在逆向工程中,函数的初始化操作是函数在开始执行时,为正确运行而进行的准备工作。在本文中,我们深入探讨了函数逆向工程的整体流程,通过对函数的结构、调用约定及其参数传递方式的详细分析,能够有效地识别和理解目标程序的行为,为后续的漏洞分析和安全研究奠定基础。这些保存寄存器的指令通常出现在函数的序言阶段,他们是函数初始化的一部分,标志着对调用者上下文的保护。进入函数后,直接将四个寄存器中的参数值压入栈中(可以看到x64架构的程序虽然是使用寄存器进行参数传递,但是在函数中还是需要将这些寄存器中的值压入栈中)
2024-10-11 14:11:08
1107
原创 C/C++逆向:函数逆向分析-调用约定分析
在进行函数逆向分析时,分析其具有非常重要的作用,因为调用约定直接影响了函数的参数传递、返回值、栈管理、寄存器使用等多个方面,不同的编译器和平台可能有不同的默认调用约定,识别调用约定可以帮助判断代码是由哪种编译器生成的。例如:①Windows API 函数通常使用 stdcall 调用约定。②在 x64 平台,Windows 使用的调用约定与 Linux 的 System V 调用约定有所不同。③通过调用约定,可以更好地识别代码的上下文,甚至推断出目标程序使用的编译器和编译选项。
2024-10-04 18:43:19
1042
1
原创 C/C++逆向:数据类型识别
在逆向工程中,数据类型识别是理解程序逻辑的重要步骤,因为它直接影响对程序逻辑和功能的理解,识别出数据类型有助于确定变量的含义和函数的行为。在分析恶意软件或者寻找安全漏洞时,识别数据类型能够帮助发现代码中的潜在问题。例如,缓冲区溢出问题通常与错误的数据类型或者数组边界检查不当有关,了解变量的类型和大小有助于发现这类安全问题。那接下去我们就通过一个简单的例子来针对不同类型的数据进行特征分析。
2024-09-30 09:36:57
1479
原创 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
1538
原创 C/C++逆向:if语句逆向分析
在逆向工程中,分析汇编代码中的if语句是一项常见任务,因为条件分支是程序控制流的重要组成部分。在高级语言(如 C/C++、Java)中,if语句用于控制程序逻辑的分支。在汇编层面,if语句的逻辑通常会被编译器转换为条件跳转指令,如JEJNEJGJL(Jump if Less)等。if。
2024-09-05 09:00:11
1149
原创 C/C++逆向:寻找mian函数(其他编译配置特征)
在上篇文章中写了在逆向中定位main函数几种方法,其中有一种方法是通过编译器特征定位main函数(使用IDA分析简单demo程序获取特征,根据得到的特征可以定位相同编译器编译程序的main函数)。在上一篇文章中我们提取了VS环境(VS2017)中MSVC编译器编译配置与目标平台架构分别为Debug和x86生成的程序特征,从而正确定位到了main函数所在位置。本篇文章主要写一下根据编译器特征定位main函数的方法,提取VS环境(VS2017)生成的编译配置与目标平台架构分别为Debugx64Release。
2024-09-01 22:27:10
1697
原创 C/C++逆向:寻找main函数(Debug-x86)
在程序的逆向分析中,寻找main函数在逆向分析中是非常重要的,它是程序的核心执行点,从这里开始,程序的主要逻辑开始展开;和;它们分别指代了程序的不同阶段的执行起点。
2024-08-25 22:50:32
1685
1
原创 C/C++逆向:x96dbg(x64dbg/x86dbg)的使用
这篇文章主要来说一下x96dbg(x64/x86)的基本使用,这里还是使用上篇文章中的简单程序用来作为本篇文章的实例,因为上篇文章再生成程序时选用的解决方案平台为x86所以生成的程序则需要我们使用x32dbg来进行分析。这边与IDA一样,我们可以将程序拖到图标上。此时x32dbg就会自动针对该程序进行加载,接下去我们就可以进行调试了。在加载完成后可以看到调试器下方显示。这个系统断点通常指的是调试器在程序启动时自动设置的第一个断点,也称为断点。
2024-08-19 14:52:34
2637
原创 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
2312
原创 C/C++逆向:概念&工具安装
软件逆向工程(Software Reverse Engineering,简称逆向工程)是指通过分析现有软件系统的代码、结构和功能,来推测或重建其设计、算法和实现细节的过程。在逆向工程中,混合分析是一种结合静态分析和动态分析的策略,利用两者的优势,全面理解和分析目标程序。静态分析是在不运行程序的情况下,对软件的代码或二进制文件进行分析,分析的内容可以包括源代码(如果可用)、反汇编代码、反编译后的伪代码、程序结构、数据流、控制流等。不依赖于特定的运行环境,因此可以在不同平台上进行分析。这类行为通常是不合法的。
2024-08-17 11:44:09
1369
原创 Web渗透:Shiro550漏洞(CVE-2016-4437)
Apache Shiro 是一个强大且易于使用的Java安全框架,提供了身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)和密码学支持等功能。Apache Shiro 550反序列化漏洞(CVE-2016-4437)是一个严重的Java反序列化漏洞,它允许攻击者通过特制的Java序列化对象在目标系统上执行任意代码。该漏洞影响了使用默认“rememberMe”功能的Apache Shiro。
2024-07-17 22:37:28
1065
1
原创 win32:第一个窗口程序-初始化实例(part.5)
函数的作用是在应用程序启动时初始化实例,创建主窗口,并显示它。如果窗口创建失败,函数返回FALSE,否则返回TRUE表示成功。
2024-07-13 17:43:30
441
原创 网络基础:Vlan原理与配置
VLAN(Virtual Local Area Network,虚拟局域网)是一种将一个物理网络划分为多个逻辑子网的技术。它通过在网络交换机上配置,使得不同VLAN中的设备即使连接在同一个物理交换机上,也不能直接进行通信,从而实现网络的逻辑隔离。在使用VLAN技术时,不同VLAN中的设备间通信的行为:①左边部分(Ping 成功):PC1和PC2都连接到同一个交换机,并且PC1和PC2都属于VLAN1,所以这个时候这两台PC是可以相互通信的。
2024-07-11 22:48:49
1098
原创 网络基础:二层交换与多层交换
帧的vlan ID 时接口允许通过的Vlan ID时:当帧的VLAN ID为Hybrid接口允许通过的VLAN ID时,交换机会根据具体配置对该帧进行处理;当帧的Vlan ID与接口的PVID不同:当该帧的VLAN ID在该接口允许通过的VLAN列表中,则保留该帧的Tag,然后将其从该接口发送出去;这个时候的帧又变回了不带标记的帧。当一个未标记的帧进入交换机的某个端口时,交换机会根据该端口的PVID(交换机端口的VLAN ID)为该帧打上VLAN标签,使其在交换机内部转发时被识别为属于指定的VLAN。
2024-07-09 11:42:08
1184
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人