自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 收藏
  • 关注

原创 HOOK专题

HOOK是用来获取或更改程序执行时的某些数据,或者是用于更改程序执行流程的一种技术HOOK主要有以下两种形式:1.修改函数代码:如Inline HOOK,HotFix HOOK2.修改函数地址:如IAT HOOK, 虚表HOOK简单的讲,如果一个函数被HOOK,那么这个函数就可以随意的被修改接下来我们将讲解常见的HOOK手法。

2025-07-10 17:01:03 1042

原创 注入技术专题

所谓注入就是在第三方进程不知道或者不允许的情况下将模块或者代码写入对方进程空间,并设法执行的技术。注入主要分为两种方式:dll注入和代码注入。接下来我们将针对这两种注入方式展开讲解。

2025-07-09 16:47:05 698

原创 反调试专题

CloseHanlde检测调试调试器的工作流程调试器工作流程如下:1.被调试程序未运行,通过调试器创建进程,也就是我们常见的直接将被调试程序拖入调试器中。其原理是调试器通过CreateProcess并设置DEBUG_PROCESS模式,此时该进程以调试的形式启动。2.被调试程序已运行,通过调试器附加进程,也就是我们通过调试器内部手动以附加进程的方式调试被调试程序,其原理是调试器通过调用DebugActiveProcess函数,此时该进程以调试的形式启动。

2025-07-03 10:53:14 734

原创 软件安全(四)shellcode安全

但解密和加密的代码通常是写在一起的,解密代码后紧跟着加密的shellcode,且代码大小一旦写好是不会改变的,所以我们可以根据解密代码的大小来获取一个加密shellcode的偏移值,从而来计算真实地址值。如下是一个常见的加密方法:对每个字节进行异或运算,异或运算的key在0-0xff之间选择,然后依次进行加密,直到加密完所有字节都没有出现00时,才是合适的key。将解密代码和加密后的shellcode的十六进制数据放置在有漏洞的程序的栈溢出的位置上就完成了漏洞利用。

2025-05-14 11:30:17 342

原创 软件安全(三)实现后门程序

Win10系统kernelbase .dll中有LoadLibraryA,但Win7中没有。1.修改获取模块功能,遍历list根据模块名称匹配kernel32。2.将LoadLibraryA 改成LoadLibraryExA。接下来我们通过将该后门程序转换为汇编代码,添加至上节课的 中。通过该程序,可以远程操作目标机器的cmd从而进行相应操作。现以上节代码为基础,在payload中进行代码实现。如下是一个经典的后门程序。

2025-05-12 18:13:10 382

原创 网络编程(一)网络编程入门

相关背景知识本节课学习TCP客户端和服务器端编程架构,其分为分为C/S(客户端/服务器模式)和B/S(浏览器/服务器架构模式)两种模式。接下来我们分别了解这两种模式C/S模式C/S模式:服务器首先先启动,并根据客户端请求做出相应的响应。服务器:1.打开一个通信通道,在某一端口接受客户端请求。2.接受到客户端请求后处理请求并返回信息给客户端。3.继续等待客户端请求直到关闭服务器。客户端:1.打开一个通信通道,并连接到服务器所在主机的特定端口。

2025-05-11 17:04:23 1008

原创 软件安全(二)优化shellcode

我们在上一节课中所写的shellcode,其中使用到的相关的API是通过写入其内存地址来实现调用。这种方法具有局限性,如切换其他的操作系统API的内存地址就会发生变化,从而无法正常调用。所谓的shellcode不过是在目标程序中加一个区段使得程序可以执行我们自己的代码。但在这个实现的过程中,存在一个问题:我们无法知晓目标程序中是否包含我们自己的代码中所使用的一些函数的相关库。如果没有相关库的话,也就无法在我们的代码中使用相关函数。为保险起见,我们需要自己加载相关的动态链接库。

2025-05-09 21:15:21 856

原创 软件安全(一)初识shellcode

本节课主要学习一些软件安全的相关术语,属于普及知识造成软件安全的本质原因是因为人类目前还没办法在原点上区分数据与代码,说白了就是目前人们还没理解编写安全代码的真正方法。通过修改自身代码、公共库函数的安全性降低漏洞出现频率,并且通过操作系统干预,使得漏洞攻击变得难以实现。Vulnerability:漏洞、计算机安全隐患。Exploit:漏洞利用。Shellcode:壳代码。

2025-05-03 19:36:50 693

原创 加密壳(二)将shellcode写入PE

DWORD ReadPEFileSize(const char* lpszFile) //获取文件的硬盘内存数据大小if (!pFile)printf("无法打开EXE文件");return 0;if (!printf("分配空间失败");return 0;if (!i)printf("读取数据失败!");return 0;//(char*)pFileBuffer只有此处转换为了char*类型,之后加减是为char的大小为一个单位进行加减。

2025-04-19 12:06:22 786

原创 加密壳(一)壳的原理

在学习壳之前,我们简单回顾一下之前所学的PE文件的相关知识如下是PE文件结构图:PE文件如果想要运行需要把它从硬盘装载到内存中,这个过程有如下几个步骤:1.将pe文件按内存对齐值对齐复制到内存中2.加载pe文件用到的相关dll3.修复IAT、重定位表当PE文件装载到内存以后,便可以运行了:操作系统通过读取PE文件的addressOfEntryPoint+PE文件加载基址imagebase定位程序入口点开始执行代码。

2025-04-17 09:01:08 751

原创 PE文件(十五)绑定导入表

我们在分析Windows自带的一些程序时,常常发现有的程序,如notepad,他的IAT表在文件加载内存前已经完成绑定,存储了函数的地址。这样做可以使得程序是无需修改IAT表而直接启动,这时程序启动速度变快。但这种方式只适用于dll按照预先设定ImageBase装载而不重分配的情况当dll没有按照预先设定的ImageBase进行装载,IAT表在文件加载内存前进行绑定就会出现问题了。

2025-04-14 18:18:10 877

原创 PE文件(十四)shellcode框架

shellcode指在任何环境下,都可以运行的代码。实际上就是把我们编写的代码转换为硬编码然后注入进程使用。在渗透方面,shellcode常用于工具生成,但在二进制漏洞方面,我们经常需要手写shellcode,因此学会手写shellcode是很重要的。

2025-04-06 21:55:55 927

原创 PE文件(十三)系统调用与函数地址动态寻找

当需要分析一个程序时,这个程序一定是可以调试的,操作系统也不例外。在调试过程中下断点是很重要的当我们对一个应用程序下断点时,应用程序是挂起的。但当我们对操作系统的内核程序下断点时,被挂起的不是内核程序而是整个操作系统。当操作系统被挂起时,网卡显卡等功能无法使用,进而无法在挂起的操作系统的机器上进行任何操作,也就无法调试内核程序了。为了能够调试内核程序,Windows提供了一个调试子系统,它是一个独立于操作系统的的子系统,负责与调试器进行数据的交互进而实现调试内核程序。

2025-04-05 23:12:06 1087

原创 PE文件(十二)TLS与延迟导入表

TLS:线程局部存储,用来保存变量和回调函数的数据。TLS中存储的的变量和回调函数都在程序入口点之前执行完了,也就是说当程序在被调试时,在程序入口点断点之前,TLS中的变量和回调函数就已经执行完了,因此TLS可以用作反调试之类的操作。对于一个有多线程的程序而言,全局变量和静态变量被多线程共享,因此多线程可以同时访问共享变量,但这可能会造成一些逻辑问题。因为我们可以通过TLS技术存储这些变量。

2025-03-31 18:47:02 453

原创 PE文件(十一)资源表

所谓的资源也就是我们之前学的MFC中的对话框,按钮,编辑框之类的东西。不仅MFC有资源,我们平时熟悉的控制台程序也有资源当我们平时写一些程序或者木马时,我们通常对其定义一个随机的名称或者路径,然后再向外界进行释放(资源的 二进制数据写入文件)。而这些随机的名称或路径被写入PE文件的资源中。

2025-03-29 16:47:52 1150

原创 Windows系统编程(十)注册表操作及遍历

如图,这就是我们电脑中的注册表,即操作系统的配置文件,我们可以在注册表中找到软件的相关信息如上图就是32位软件安装列表,其路径为:HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall。

2025-03-13 17:12:59 496

原创 Windows系统编程(九)异常处理

在Windows下,有两种异常:1.结构化异常 SEH2.向量化异常 VEH接下来我们学习这两种异常。

2025-03-09 11:28:49 1172

原创 Windows系统编程(八)进程通信

进程是操作系统分配资源和调度的独立单位,由进程内核对象和进程内存地址空间构成。不同的进程内存地址空间相互隔离,因此一个进程无法直接访问另一个进程的内存数据。当进程间需要数据共享或任务协作时,就必须使用进程通信。进程通信是指在不同进程之间的数据传输。简单的说进程通信就是多进程共享一份内存空间。接下来我们讲解几种不同方式的进程通信。

2025-03-06 16:31:06 467

原创 Windows系统编程(七)线程同步

每个线程都有自己独立的堆栈,局部变量是存储在栈中的,这就意味着每个线程都会有一份自己的局部变量,当线程仅仅访问自己的局部变量时就不存在线程安全问题。但是全局变量是存储在全局区的,多线程共享全局变量,当多个线程共用一个全局变量进行非读行为时就会存在线程安全问题如下所示代码,我们创建了两个线程并写了一个线程函数,该函数的作用就是使用全局变量,模拟售卖物品。全局变量countNumber表示该物品的总量,其值是10。如图,我们运行了代码,发现会出现重复售卖,并且到最后总数竟变成了-1。

2025-03-05 17:03:47 1429

原创 硬编码(五)变经典长指令三

在前几节课所学的内容中,ModR/M中reg/opcode一直默认是reg,这一节课,我们讲解reg/opcode是opcode的情况如图这是硬编码的结构,其中opcode部分通过查表A-2可知,该表是硬编码的主表,如下表所示此处只展示一部分,具体请查手册图中的rAX表示可以是64位的RAX(64位模式下才有)、32位的EAX、16位的AX,而eAX则表示这里可以是32位的EAX、16位的AX(默认取决于你的CPU运行模式)

2025-03-02 13:44:39 911

原创 硬编码(四)经典变长指令二

本文我们通过一个变长指令进行引入接下来我们简单的解析0x88 0x84OpcodeModR/M0x84接着我们拆分ModR/M为其内部的三个部分:ModRegR/M10000100通过查表可知:Reg:ALMod:00和R/M:001对应[...][...] + dis32[...]的原因:按照同样寄存器的顺序,100是寄存器ESP。但ESP是一个特殊的寄存器,其用来指向栈顶地址,而栈顶地址的内容是不能随意修改的,因此本该100对应的ESP,替换其他东西进行对应。

2025-03-01 10:26:49 883

原创 硬编码(三)经典变长指令一

我们在前两节的硬编码中学习了定长指令,接下来学习变长指令对于定长指令,我们通过opcode便可知该指令的长度,但是对于变长指令却是不可知的。变长指令长度由opcode,ModR/M,SIB共同决定。变长指令通常在需要操作内存的时候使用。

2025-02-28 20:51:40 634

原创 硬编码(二)经典定长指令二

在CPU中,有一个EIP寄存器,这个寄存器存储着下一次CPU执行指令的地址,通过修改EIP的值,可以改变CPU执行指令的顺序修改EIP有以下四种汇编指令:1.jmp 2.jcc 3.call 4.ret,接下来我们将学习这四种汇编指令的硬编码。

2025-02-21 17:10:08 822

原创 硬编码(一)经典定长指令

当一个程序编译完以后,它就转化成了二进制文件,其内部只有二进制数据,而这二进制数据可以分为数据和机器指令两个部分,它们都有各自的格式。在实际中,数据和机器指令并没有严格的区分,如果数据的格式是机器指令的格式,那么该数据也会被当做机器指令执行,但是会出错。其中机器指令就是硬编码。逆向分析分为两个阶段:1.C代码和汇编的转换。2.汇编和硬编码的转换。因此要想学习好逆向分析的第二个阶段,就需要好好学习硬编码。

2025-02-19 22:00:55 392

原创 Windows系统编程(六)内存操作与InlineHook

我们以代码进行讲解有关系统内存的操作如上代码所提及的API,Ex版本通常可以跨进程,不带Ex版本只可以自己的进程。

2025-02-18 17:26:36 752

原创 MFC程序设计(十三)序列化机制

这是因为我们通过CArchive类存储的age和score,首先二进制数据存储在内存中,而这些二进制数据又从内存中转存到txt文件中。当我们利用序列化机制时,所有的数据都写到了缓冲区中,只需要在最后调用一次write,将缓冲区的数据写入文件即可。序列化机制就是一个存取数据的过程,而我们所学的MFC中的文档类就是用来存储数据的。正如上述代码,我们写了三个不同的数据类型的数据到文件中,如果不利用序列化机制,就需要调用三次wirite将数据写入文件,这个过程很漫长。上述代码是需要添加的宏展开以后的代码。

2025-02-17 17:12:44 1127

原创 MFC程序设计(十二)绘图

只有类对象和绘图设备句柄进行绑定,该类对象才可以进行绘图。

2025-02-12 21:09:28 928

原创 MFC程序设计(十一)单文档架构

在MFC中,文档一般用于存储数据,视图一般用于显示文档中存储的数据。因此我们常常需要将文档和视图相关联。

2025-02-11 17:13:55 524

原创 MFC程序设计(十)文档类

文档类用于管理数据,视图类用于显示数据,两者常常相互关联。

2025-02-10 17:12:49 424

原创 MFC程序设计(九)视图窗口

在MFC中:有应用程序类对象,就有流程;有框架类对象,就有框架窗口。在单文档视图框架程序中,还有视图类和文档类。框架类用于存储控件(子窗口),视图类是用来前台显示数据,文档类用来后台存储和管理数据,它们各司其职互不干扰本文讲解视图窗口,视图窗口就是覆盖在主框架窗口客户区上的另外一个窗口,没有标题栏没有边框,背景白色。一个主框架窗口可以有多个视图窗口,每个视图窗口都有一个id标识。

2025-02-07 18:24:58 1371

原创 MFC程序设计(八)动态创建机制

这两种方法都需要直到类名才可以创建在不知道类名的情况下,就需要依靠动态创建机制来创建对象了。实际上这有点吹,还是需要知道类名的在实际中,我们常见的创建对象的方法是我们自己创建的,而通过这种方法创建的对象是让MFC自己创建的。

2025-02-04 16:54:36 463

原创 MFC程序设计(七)运行时类信息机制

我们在创建对象时,自己是清楚对象属于哪个类,但是计算机却不清楚。而MFC运行时类信息机制就是解决这个问题而存在的。

2025-02-03 21:23:00 610

原创 MFC程序设计(六)消息和控件

自定义的消息,操作系统默认没有这种消息类型,因此也没有对应的消息ID,也不能自行捕捉该消息,所以操作系统只能通过人工发送消息来捕捉,然后进行消息处理函数的响应。接下来我们利用上文中提及的标准window消息OnCreate,来进行发送消息#define WM_MYMESSAGE MY_USER + 1001//定制消息ID,此时只是为了下文使用时方便好看BEGIN_MESSAGE_MAP(CMyFrameWdn,CFreamWnd)//消息映射//类中声明。自定义的函数参数没法过滤。

2025-02-02 17:52:39 906

原创 MFC程序设计(五)消息映射机制

在上一章的内容中,我们找到了真正的窗口消息处理函数AfxWndProc。通过AfxWndProc处理消息存在一个问题:当要自定义处理很多消息时,重写AfxWndProc就会变得很麻烦。我们在通过向导创建的MFC程序中,发现使用了消息映射机制,这种机制会方便我们实现很多消息处理,因此消息映射就变得很重要了。

2025-01-26 21:43:52 580

原创 MFC程序设计(四)窗口创建机制

钩子属于win32技术,具有优先勾取消息的权利:当一个消息产生时,钩子勾取消息进行处理,然后消息才送回程序接下来以一个勾取窗口创建消息的钩子为例进行讲解钩子类型有键盘钩子,鼠标钩子,WH_CBT钩子等等。钩子只勾取自己类型的消息,如WH_CBT钩子只勾取窗口创建的消息钩子执行过程:钩子只勾取指定应用程序指定线程且属于自己类型的消息,然后触发钩子处理函数。当应用程序实例句柄为空时,则勾取所有应用程序的消息。当线程ID为空时,则勾取指定应用程序的线程的消息。

2025-01-25 19:18:32 643

原创 MFC程序设计(三)程序启动机制

这就是MFC执行的流程所使用的虚函数。

2025-01-23 22:24:10 577

原创 MFC程序设计(二)基于对话框编程

向导生成基于对话框MFC应用程序从现在开始,我们将以基于对话框的MFC应用程序来讲解MFC应用向导生成基于对话框MFC应用程序对话框是一种特殊类型的窗口,绝大多数Windows程序都通过对话框与用户进行交互。在Visual C++中,对话框既可以单独组成一个简单的应用程序,又可以成为文档/视图结构程序的资源。

2025-01-22 22:29:02 1890

原创 MFC程序设计(一)MFC入门

简单的理解:DECLARE_MESSAGE_MAP就是一个函数表,BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间的范围表示函数表的范围,表中的每一项都是函数的入口,每个入口都对应特定的函数。主框架窗口(CFrameWnd)是整个应用程序外框所包括的部分,即图中粗框以内的内容,而视类窗口只是主框架中空白的地方。MFC应用程序框架结构的基石是文档/视图体系结构,它定义了一种程序结构,这种结构依靠文档对象保存应用程序的数据,并依靠视图对象控制视图中显示的数据,把数据本身与它的显示分离开。

2025-01-19 15:08:09 2814

原创 计算机网络(六)应用层

互联网广泛使用的动态主机配置协议 DHCP(Dynamic Host Configuration Protocol) 提供了即插即用连网(plug-and-play networking) 的机制。这种机制允许一台计算机加入新的网络和获取 IP 地址,而不用手工配置。域名相比IP地址更容易记忆在因特网中,用户主机只需要在浏览器中输入某web服务器域名便可访问该服务器所提供的内容我们可以通过ping命令来观察用户主机和web服务器之间的连通性。

2025-01-11 20:28:11 1113

原创 计算机网络(五)运输层

IANA:因特网数字分配机构假设主机a发送的每100字节数据都封装成TCP报文段,b的接收窗口为400个字节数据,因此主机a的发送窗口也设置为400。主机a在未收到主机b发来的确认时,可将落入发送窗口中的全部数据发送出去seq是tcp报文段首部中的序号字段取值,值为1表示tcp报文段数据载荷第一个字节序号为1。date表示该数据是tcp数据报文段。ACK表示tcp报文段首部中的标志位,值为1表示这是一个tcp确认报文段。。

2025-01-11 20:25:51 1337

基于MFC的任务管理器

这是本人日常学习所手搓的任务管理器,其包括了进程管理,模块管理,线程管理,窗口管理,启动项管理,软件管理,远程线程注入等功能。由于本人才疏学浅,因此该任务管理器仍有一些功能上的不足。该任务管理器经本人整体测试,暂未发现存在差错。若诸位发现问题或有相关建议,请不吝赐教,不胜感激。

2025-03-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除