动态函数监控技术在缓冲区溢出检测中的应用

缓冲区溢出漏洞实战:从栈溢出到堆利用的GDB调试指南 缓冲区溢出是计算机安全领域的经典漏洞类型,其核心原理是程序向固定大小的缓冲区写入超出其容量的数据,导致相邻内存区域被意外覆盖。从技术价值看,理解缓冲区溢出不仅是掌握漏洞利用的基石,更是深入理解程序内存布局、函数调用机制和操作系统安全防护的关键。在应用场景上,无论是栈溢出覆盖返回地址实现控制流劫持,还是堆溢出篡改元数据实现任意地址写,都是渗透测试和二进制安全研究的核心技能。本文聚焦于缓冲区溢出漏洞的实战调试,通过GDB工具逐步演示栈与堆的溢出利用技巧,涵盖栈溢出、堆溢出、Use-After-Free等常见漏洞 阅读详情
动态函数监控技术在缓冲区溢出检测中的应用
摘要:本文通过对Window环境下函数劫持方法的分析,并结合调试器技术,提出了动态监测进程函数调用的方法。同时,对缓冲区溢出shellcode进行了分析,用有限状态自动机的模型描述了缓冲区溢出的入侵及检测模型。最后,将缓冲区溢出的检测模型与函数调用监测结合,提出了一种对缓冲区溢出行为进行动态检测的手段。
关键字:入侵检测 函数劫持 调试器 自动机
Abstract:This paper discusses both the method of API function Inject and the Debuger technology,at last brings forward a dynamic method of detecting the Process API calls. And then, analyse the buffer overflow shellcode,and using Finite Automata to describe the Module of the buffer overflow Attack. Finally, brings forward a dynamic method to detect buffer overflow Attack using API Injec4 and Mode Match.
KeyWord: IDS API Injection Debugger Finite Automata
目录
第一章   绪论   1
1.1课题背景   1
1.2发展现状   1
第二章   技术原理   3
2.1函数劫持   3
2.2调试器技术   4
HYPERLINK /L "_TOC75167249" 2.3函数劫持与调试器相结合实现函数调用分析   7
2.4基于有限状态自动机的缓冲区溢出检测模型   8
第三章   用函数劫持与调试器技术实现SOFTIDS   13
3.1 SOFTIDS简介   13
3.2技术实现   14
3.3效率问题   14
后 记   16
参考文献   17
 

第一章   绪论
1.1课题背景
缓冲区溢出漏洞是用C/C++语言开发的程序中常见的漏洞。缓冲区溢出攻击已经成为一种非常重要的攻击手段。对缓冲区溢出攻击的研究以及对缓冲区溢出攻击的防护,已经成为网络安全领域重要的研究方向。IDS(入侵检测)成为一种重要的检测缓冲区溢出的方法。
1.2发展现状
IDS(入侵检测)是一种能够比较有效的检测网络攻击行为的手段。
1980年,James P.Andeson为美国空军做了一份题为《Computer Security Threat Monitering And Surverlance》的技术报告,第一次详细阐述了入侵检测的概念,被称为入侵检测的开山之作。
1984 年—1986年,乔治敦大学的Doroty Denning和SRI/CSL的Petter Neumann 研究出了一个实时的入侵检测系统,该模型由六个部分组成:主体、对象、审计记录、应用环墁、系统弱点以及入侵类型,为构建通用的入侵检测系统提供了通用的框架。
1990年是入侵检测系统发展的一个分水岭,这一年,加州大学戴维斯分校的L.T.Heberlein等开发了NSM(NetWork Security Monitor),该系统第一次将网络流作为数据来源,从这以后,入侵检测的两大阵营正式形成:基于网络的IDS和基于主机的IDS。
现代IDS一般都具有如下功能:
(1)   监测并分析用户和系统的活动
(2)   检查系统配置和漏洞
(3)   评估系统关键资源和数据文件的完整性
(4)   识别已知的攻击行为
(5)   统计分析异常行为
(6)操作系统日志管理,并识别违反安全策略的用户行为。
IDS 分为HIDS和NIDS两种。HIDS即基于主机的IDS,提供对单个主机的监控及保护。NIDS是基于网络的IDS,为某一特定网络提供保护。HIDS 能够对攻击行为提供比较准确的报警及监控,但是这种IDS往往会占用大量的资源,影响目标主机的效率。NIDS有一台专门的服务器对网络中的异常行为进行监控,所NIDS对系统效率的影响比较小,但NIDS在入侵检测的准确性上要逊于HIDS。
现在的IDS一般都是通过Shellcode关键字匹配来实现对缓冲区溢出攻击的检测的,这种方法的好处是检测的速度快,效率高,对系统资源的消耗较小,缺点是容易漏报攻击行为。
本文提出的基于进程行为分析的缓冲区溢出检测模式可以比较精确的检测出缓冲区溢出攻击。
 
第二章   技术原理
2.1函数劫持
一、函数劫持的作用
Windows操作系统提供的API函数调用接口为用户空间的程序设计提供了非常强大的函数库。API函数调用实际上构成了Windows应用程序的骨架。
通过对API函数的劫持,可以在程序调用API函数之前加入自己的处理程序,这对软件行为分析、函数调用关系图分析以及入侵检测等具有非常重要的意义。
在Windows环境下开发的商业软件几乎都没有公开源代码,很多情况下需要对这些软件进行评估与测试,而评估和测试的一个非常重要的方面就是对这个软件调用API函数的情况进行分析,这时候就需要利用函数劫持来实现函数调用的分析。
二、函数劫持的实现
一个比较简单有效的劫持API函数调用的方法是通过更改目标进程空间中函数入口指令来实现。
Windows系统中采用了虚拟内存管理机制,每个进程都有2G的私有内存空间,同时共享2G的内核空间。普通进程是不能访问内核空间的。
在Windows2000以后的操作系统中,进程不但能够访问本进程的私有空间,同时还能通过专门的内存管理函数访问其他进程的内存空间。这就为劫持其他进程中的API函数调用提供了基础。
在Windows系统中,每一段内存区都被赋予某种属性:
(1)可写
(2)可读
(3)可执行
程序的代码段默认所具有的属性为可执行可读不可写,但是我们可以通过VirtualProtectEx函数将内存区的属性改为可写可执行。不仅对其他进程空间的.text段可写,对进程本身的.text段,我们也可以通过这个函数调用来更改相应的内存单元属性。这样,我们就可以通过更改函数入口指令来实现对 API函数的劫持。
三、函数劫持的两种方式
通过更改函数入口指令实现函数劫持有三种不同的方式。
第一种方式是将函数第一条指令改为一条jmp指令,跳转到用户提供的地址进行执行,在执行完用户功能后恢复原来的指令,然后再跳转回函数入口地址,实现函数正常的功能。这种方法的缺点就是不能对函数调用进行重复的劫持,每发生一次函数调用就需要进行一次劫持。
第二种方式是将函数入口的五个字节指令保存到某个空间,同时将函数入口指令更改到相应的用户功能代码处,在执行完用户需要添加的功能代码后,跳转到所保存的函数入口指令处,执行完函数入口指令后再回到正常的API函数内完成正常的函数功能。这种方法的好处就是不需要重复劫持,速度快。但是这种方法要求函数本身的入口指令不能使用相对寻址方式。MicroSoft提供的detour函数库就是基于这个思想。
第三种方式就是将函数劫持与调试器配合起来使用,将函数的第一条指令改成int 3,每次产生一个用户中断供调试器处理,由调试器负责实现用户要求的功能,保存和恢复现场,保证函数正常功能的实现。用int 3劫持和调试器相结合的方式实现函数劫持,最大的好处就是功能强大,结构清晰,但是在效率上会有一些折扣。
2.2调试器技术
一、调试器概述
在程序设计和调试的过程中,调试器是一个非常重要的工具。一些常见的功能强大的调试器包括OllyDbg、SoftIce、WinDbg,以及VC编程环境中自带的调试器。这些调试器都是一种通用型的调试器,为我们的程序调试提供了方便。
调试器可以对被调试进程进行一系列的操作,包括读写内存,读取和设置线程环境变量,设置目标进程的寄存器等。同时被调试进程中每产生的一个调试事件都会先将自己挂起,通知调试器进行处理后才继续程序执行。这些调试事件包括进程创建,进程结束,线程创建,线程结束,装载DLL,卸载DLL,以及一切用户中断和异常。
调试器的功能并不只是为我们的程序设计和编译提供有力的支持,调试器技术还可以用于入侵检测,漏洞分析等方面。这就需要专门的调试器,将调试功能应用到这些方面。
微软的函数库里面提供了一组调试函数供用户使用实现自己的专用调试器。这组函数包括:
ContinueDebugEvent //继续被调试进程
DebugActiveProcess //调试一个正在运行的进程
DebugBreak         //产生一次调试中断
FatalExit         //退出调试
FlushInstructionCache //清空指令缓存
GetThreadContext      //取得目标线程环境块   
GetThreadSelectorEntry //取得线程选择子入口
IsDebuggerPresent    //进程是否被调试
OutputDebugString      //输出调试信息
ReadProcessMemory      //读取目标进程内存空间
ReadProcessMemoryVlm //读取特定进程空间内存
SetDebugErrorLevel   //设定被调试进程错误通知等级
SetThreadContext      //设置目标线程环境
WaitForDebugEvent     //等待目标进程产生调试时间
WriteProcessMemory  //写目标进程内存空间
WriteProcessMemoryVlm //写特定进程空间内存单元
通过这些函数,就可以定制自己的调试器。
二、调试进程
要实现对进程的调试,可以通过两种方法来实现。
一是创建新进程用于调试。在父进程调用CreateProcess创建被调试进程的时候指定为调试。这样,父进程和子进程之间就是一种调试和被调试的关系。在进程被完全装入内存空间后,系统会将子进程挂起,并调用DBGBreakPoint产生一次int 3中断,当调试器处理完这个int 3中断后,程序才会继续执行。
二是调用DebugActiveProcess绑定正在运行的进程。要调试正在运行的进程,调试器必须首先获得对目标进程的调试权限。
对于Administrator运行的调试器来说,默认情况下可以获得所有非SYSTEM用户组用户所创建的进程的调试权。对于SYSTEM用户组的进程,比如Lsass,Winlogon,svchost等,就必须先提升调试器进程的权能,授予自己调试权能,实现对这些系统进程的调试。
在完成绑定工作后,被调试进程同样会调用DBGBreakPoint产生一次int 3中断,调试器必须处理这个中断才能继续改进程的运行。
三、调试器主循环
在完成调试前的准备工作后,调试器循环调用WaitForDebugEvent等待调试事件的产生,然后进行相应的处理。WaitForDebugEvent是一个可阻塞的函数,当被调试进程没有调试事件产生时,调试器不会因为大量的循环工作而消耗CPU时间。
四、同时调试多个进程
调试器可以同时调试多个进程。每个被调试的进程都必须有一个相应的调试线程与之对应。在这个调试线程里面必须实现全部的包括绑定目标进程、调试循环在内的所有的调试器功能,这就意味着在系统中是以线程为单位通知相应的调试事件的。这就使得我们可以通过一个进程监控多个进程。

2.3函数劫持与调试器相结合实现函数调用分析
使用函数劫持和调试器相结合的技术可以很方便的对进程的函数调用情况进行分析,包括函数调用关系,函数调用的参数等。
调试器可以获得被调试进程的完全权限。这样,调试器就可以通过WriteProcessmemory和ReadProcessmemory来对目标进程的内存空间进行操作,包括读,写内存,并设置进程的线程环境,控制目标进程的执行。
(1)调试目标进程
(2)保存函数入口指令
为了在劫持函数调用后恢复函数本身功能,需要保存目标函数入口指令。
定义一个类来描述API函数:
class apiInfo{
   char name[128];      //API函数名
   ULONG entry;      //API函数入口地址
   UCHAR inst[4];      //API函数入口指令   
}
利用STL库的List模板将所有的被劫持函数组织成一个列表。
(3)通过int 3劫持函数
用int 3的机器指令更改函数的入口指令。
(4)调试器对目标进程进行分析和处理
在完成以上三步工作之后,调试器等待int 3用户中断的产生。当调试器检测到int 3中断的时候,分析函数调用,包括函数调用关系和函数调用的参数。同时,遍历函数信息列表,恢复相应的函数入口指令。将被调试线程EIP减一,设置单步中断,恢复进程执行。
调试器响应单步中断,重新劫持相应的函数,实现函数劫持的可持续性。
通过以上步骤,调试器在不影响目标进程功能的情况下实现了对目标进程的劫持,对目标进程函数调用的分析。
2.4基于有限状态自动机的缓冲区溢出检测模型
一、缓冲区溢出攻击
缓冲区溢出是一种非常重要和有效的攻击手段。在溢出之后攻击者往往可以直接拿到目标主机的最高权限。
Windows系列的操作系统中存在着很多缓冲区溢出漏洞,包括已经公布的和没有公布的,这些漏洞往往会给用户造成非常重大的安全隐患。著名的冲击波病毒和最近爆发的震荡波病毒就是利用Window系统进程的缓冲区溢出漏洞来进行传染的。
对于已经公布的漏洞,我们可以通过安装补丁程序或进行相应的配置来防范攻击者对这些漏洞的溢出攻击。而对于那些由于某种目的暂时没有公布的漏洞,就可以通过专门的缓冲区溢出入侵检测系统来防护。
二、对溢出攻击的检测
缓冲区溢出攻击针对系统中运行的一个特定进程(线程),所以对缓冲区溢出攻击的检测可以通过基于进程的监控与检测来实现。
对缓冲区溢出攻击的检测方法很多,包括堆栈执行状态分析,以及特定函数调用模型匹配等。
本文讨论采用特殊函数调用监控及入侵模式匹配的方法来实现对缓冲区溢出的检测。
入侵检测系统基于两项关键技术,一是对异常的检测,第二就是对检测到的异常行为进行匹配。
函数劫持与调试器相结合的技术已经解决了对异常的监测。我们通过对入侵行为的抽象来构建检测模型,然后用检测到的敏感函数调用情况与这个模型进行匹配,实现对溢出的检测。
(1)溢出攻击函数调用序列
在缓冲区溢出之后会执行一段shellcode,攻击者通过这段shellcode来实现相应的黑客行为。
现在比较普遍的shellcode有三种:
①直连型shellcode
这种shellcode调用API函数的情况是:
connect + CreateProcess,CreateProcess + connect。
②反连型shellcode
这种shellcode调用API函数的模型是:
Accept + CreateProcess,CreateProcess + Accept。
③下载文件并执行型shellcode
这种shellcode的函数调用模型为:
URLDownloadToFile + CreateProcess。
(2)构建溢出攻击检测模型
我们可以对这些shellcode所使用的API函数调用进行归纳和总结,得出一个shellcode特定API函数调用的有限状态自动机。通过对这些敏感函数的劫持配合调试器来监视在一个进程中这些函数的调用情况,同时匹配有限状态自动机,检测进程是否正在执行shellcode,实现入侵检测。
用有限状态自动机来模拟被保护线程的状态。P0为初始状态,INVAD状态表示线程已经被入侵。P1...Pn为一系列的中间状态。函数调用及其参数是各个状态之间转换的条件。这样,实际上就构成了一个线程状态转移图,顶点是目标线程的状态,边是函数调用及其参数表示的状态转移条件。
用函数调用以及其参数的情况作为状态之间转换的条件,每发生一次函数调用则产生一个状态转移码,线程根据自动机模型变换一次状态,当受保护进程的某一线程状态最终转移到INVAD时,则可以确定主机受到了缓冲区溢出攻击。

我们定义了一个类ThdST描述线程的状态并描述线程状态之间的变换模型。
//定义线程的状态
#define INVAD      -1         //线程处于被入侵状态
#define P0      0         //初始状态
#define P1      1         //线程建立了网络连接
#define P2      2         //线程创建了一个CMD进程
#define P3      3         //线程从网络上下载了一个文件
//定义状态之间转换代码
#define ACCEPT         0      //接收网络连接
#define CONNECT         1      //主动连接网络
#define CREATEPROCESS      2      //创建CMD进程或下载的文件运行
#define DOWNFILE      3      //下载文件
//线程状态描述
class ThdST
{
public:
   ThdST(DWORD Tid):ThreadID(Tid)   
   {
      Situation = P0;         //将线程状态置为初始状态
   }
   bool IsInvade()            //线程是否被入侵
   {
      if(Situation==-1)
         return true;
      else
         return false;
   }
   bool ChangeSituation(DWORD chCode);   //线程状态变换
   
public:
   DWORD ThreadID;            //线程ID
   DWORD Situation;         //线程状态
};
三、有效性问题
基于函数调用自动机模型的缓冲区溢出检测的有效性决定于线程状态转换自动机模型的完整性。
要使缓冲区溢出检测具有更高的有效性,就必需构造一个完备的函数调用与线程状态转换间的自动机模型。但是这是基于IDS开发者或者使用者经验的模型,并不能证明该模型的有效性和完备性。
当然,只要有相应的函数检测自动机模型,通过这种方法还可以检测到寄生于目标进程中的恶意后门程序。

第三章   用函数劫持与调试器技术实现SoftIDS
3.1 SoftIDS简介
SoftIDS是我在毕业实习中开发的一个专门检测缓冲区溢出攻击的IDS。使用函数劫持及调试器技术配合线程状态转换自动机模型实现对缓冲区溢出攻击的检测。
SoftIDS是一个基于进程的缓冲区溢出攻击检测程序。它能够精确定位缓冲区溢出攻击到线程一级,在攻击造成更大的危害前及时终止被入侵的线程。它能够同时对多个进程进行保护。

3.2技术实现
(1)为每一个需要保护的进程创建一个保护线程。
(2)在保护线程中调用DebugActiveProcess绑定需要保护的进程,使其被本线程调试。
(3)保护线程进入调试循环,WaitForDebugEvent等待被调试进程中产生调试事件。
(4)系统强制被调试进程产生一个int 3中断,同时被调试进程挂起,等待调试线程处理int 3。
(5)保护线程响应第一个int 3中断,用int 3配合调试器的方法劫持需要监控的敏感API函数调用。这些敏感函数调用包括:CreateProcess,Accept,connect, URLDownLoadToFile等。
(6)继续被保护进程的执行,等待int 3中断。
(7)处理int 3中断,分析被保护进程的函数调用情况,包括其参数使用情况,得出线程状态转移码。
(8)根据状态转移码转移线程状态,检查其是否被入侵。如果被入侵,则结束被入侵线程,否则跳转到(6)执行。
3.3效率问题
使用函数劫持配合调试器的方法实现缓冲区溢出入侵检测不会给系统带来太大的效率上的负担。同时,也不会影响被保护的进程的执行效率。
(1)调试事件有限
Windows系统支持的调试事件有限。在一个稳定执行的进程中几乎不会产生任何调试事件。
SoftIDS 本身不会占用太多的CPU资源。因为对于IDS来说,关注和处理的调试事件只有int 3中断和单步中断。SoftIDS大量的时间都用来等待调试事件的产生,而WaitForDebugEvent函数调用是一个基于消息通知机制的函数,这就意味着SoftIDS大部分时间都处于阻塞状态,不会消耗任何CPU资源。
(2)Windows调试机制基于消息通知
Windows调试机制基于消息通知机制。被调试进程只有在产生调试事件之后才会通知调试器对调试事件进行处理。在没有调试事件产生的时候不会对被调试进程产生任何影响。
参考文献
[1] Microsoft Corporation. Detours: Binary Interception of Win32 Functionsdetour. 2001
[2] Jeffrey Richter. Programming Applications for Microsoft Windows . 4th Ed. MicroSoft Press. 2001
[3] David Solomon, Mark Russinovich. Inside win2000. 3rd ed. MicroSoft Press . 2001
[4] HBGary. BugScan Technical White Paper.
http://www.hbgary.com/text/Predator _White_Paper.pdf. 2002
[5] Artemis. System-Wide API Hooks On Win9x.
http://www.codeproject.com/useritems/syswidehook9x.asp.1999
[6] James P.Andersion. Computer Security Threat Monitoring and Surveillance. http://csrc.nist.gov/publications/history/ande80.pdf. 1980
[7] Intel. IA-32 Intel Architecture SoftWare Developers'Manual. Intel Corporation. 2003
[8] 陈有祺.形式语言与自动机.天津:南开大学出版社.1998.8
[9]宋献涛 叶惠敏. IDS 二十年风雨历程.
http://www.chinaitlab.com/www/news/article_show.asp?id=6058
[10] 多友安全网. 入侵检测系统简介. http://www.chinaitlab.com/www/news/article_show.asp?id=2508
[11] Ivo Ivanov. API hooking revealed.
http://www.codeproject.com/system/hooksys.asp.2001


Trackback: http://tb.donews.net/TrackBack.aspx?PostId=543916

38、软件安全:缓冲区溢出与整数溢出防护 本文深入探讨了软件安全中的缓冲区溢出与整数溢出问题及其防护措施。涵盖了静态分析、编译器增强、操作系统加固和硬件辅助等多层面的防御技术,重点介绍了StackGuard、ProPolice、SmashGuard等具体方案,并分析了整数溢出的成因及检测难点。通过污点分析和IOC工具的原理阐述,揭示了动态与静态检测方法的优劣。文章还强调开发者需具备攻击思维,结合持续学习,综合运用软硬件防护手段,提升软件安全性。 阅读详情

相关推荐

20、栈溢出漏洞的检测与修复技术解析

本文深入解析了栈溢出漏洞的检测与修复技术,涵盖易引发错误的函数及整数溢出风险,探讨了源代码和二进制文件的审计方法,并介绍了词法、语义及动态分析工具的应用。通过实际案例分析了OpenBSD和Apache中的缓冲区溢出问题及其修复过程,指出了常见修复误区。文章还总结了防范缓冲区溢出的多种策略,包括使用安全函数、改变内存表示方式、采用C++标准类等,并对比了不同检测工具的优缺点,提出了最佳实践建议。最后,通过mermaid流程图展示了漏洞查找与防范的整体流程,强调了持续监控与安全开发的重要性。

beer8的博客 62

系统进程查看及动态监控

##查看进程 1)图形方式进程 2)进程命令查看 ##ps常用组合 图中\表示的即为进程的父子关系 ##显示进程指定信息 ##进程排序 图中等号后的"-“表示对cpu进行逆向排序,若为”+",则表示正向排序 ##stat中显示的信息 ###进程优先级### 1.进程优先级范围 -20~19 2.优先级查看 3.指定某个优先级开启进程 4.改变进程优先级 ###

weixin_43467083的博客 372

缓冲区溢出实验报告

本文档是关于缓冲区溢出实现的整个流程,对做缓冲区溢出有一定的帮助

Java内存溢出排查

四、通过使用dk自带命令jstack获取该java进程的线程快照并输入到文件中: jstack -l <pid> > ./jstack_result.txt 命令(pid为Java进程的id号)来获取线程快照结果并输入到指定文件。jstat -gcutil <pid> 250 20 (其中pid是进程id)# 监控 jvm 的内存使用情况。三、jmap -histo 实时查看JVM对象大小的排序结果。二、jstat -gcutil 查看内存使用情况。一、通过top命令查看内存溢出的进程id。

Think 1294

Java入门缓冲区溢出编程心得

Java入门缓冲区溢出编程心得

WinAPI (Delphi版)

Creating Windows CreateMDIWindow CreateWindow CreateWindowEx RegisterClass RegisterClassEx UnregisterClass Message Processing BroadcastSystemMessage CallNextHookEx CallWindowProc DefFrameProc DefMDIChildProc DefWindowProc DispatchMessage GetMessage GetMessageExtraInfo GetMessagePos GetMessageTime GetQueueStatus InSendMessage PeekMessage PostMessage PostQuitMessage PostThreadMessage RegisterWindowMessage ReplyMessage SendMessage SendMessageCallback SendMessageTimeout SendNotifyMessage SetMessageExtraInfo SetWindowsHookEx TranslateMessage UnhookWindowsHookEx WaitMessage Window Information AnyPopup ChildWindowFromPoint ChildWindowFromPointEx EnableWindow EnumChildWindows EnumPropsEx EnumThreadWindows EnumWindows FindWindow FindWindowEx GetClassInfoEx GetClassLong GetClassName GetClientRect GetDesktopWindow GetFocus GetForegroundWindow GetNextWindow GetParent GetProp GetTopWindow GetWindow GetWindowLong GetWindowRect GetWindowText GetWindowTextLength IsChild IsIconic IsWindow IsWindowEnabled IsWindowUnicode IsWindowVisible IsZoomed RemoveProp SetActiveWindow SetClassLong SetFocus SetForegroundWindow SetParent SetProp SetWindowLong SetWindowText WindowFromPoint Processes and Threads CreateEvent CreateMutex CreateProcess CreateSemaphore CreateThread DeleteCriticalSection DuplicateHandle EnterCriticalSection ExitProcess ExitThread GetCurrentProcess GetCurrentProcessId GetCurrentThread GetCurrentThreadId GetExitCodeProcess GetExitCodeThread GetPriorityClass GetThreadPriority GetWindowThreadProcessId InitializeCriticalSection InterlockedDecrement InterlockedExchange InterlockedIncrement LeaveCriticalSection OpenEvent OpenMutex OpenProcess OpenSemaphore PulseEvent ReleaseMutex ReleaseSemaphore ResetEvent ResumeThread SetEvent SetPr

数值溢出的问题,如何监控数值溢出?(java)

1.数值溢出问题 当定义一个long给他赋值 long i = Long.MAX_VALUE+1; 在这个基础上+1会直接变成负数 -9223372036854775808 同样的几种基本类型都有这样的情况,数据不对也不会提示我们,并没有什么异常抛出。 2. Math.addExact()监控溢出,抛出异常 long i = Long.MAX_VALUE; System.out.println(Math.addExact(i,1)); 会报出长度溢出 3 BigI

jj89929665的博客 574

squirrel校园二手交易平台

squirrel校园二手交易平台 (适合寻找SSM项目练手的你。) 项目起源:   期末的课程设计,三人一组,我和两个舍友,一时起兴,决定做一个校园二手交易平台,一开始兴致与激情满满,可是后期时间上的冲突,让我们三个人对于这个项目有点累。   这个项目刚定题两天,BezosLee由于通过了360的网上在线笔试,收到了360公司的免费培训邀请,要去北京的360总部进行培训一周,值得庆...

K.SHI的博客 5万+

缓冲区溢出基础(C语言测试程序)

尝试学学二进制安全,补补短板 这次是采用C语言,直接修改目标返回地址的内容,从而达到和使用memcpy等函数进行缓冲区溢出测试同样的效果。 之前在站里找了找案例,发现很多文章没有写明自己的程序是运行在怎样的环境下,以及是多少位系统,我将先把自己的环境列出来: win10 基于X64 64位 VS2019 代码如下 #include<stdio.h> #include<stdlib.h> #include<string.h> void func() { int a, *

rulerrr_r的博客 2615

研究生如何快速发CVPR

研究生如何快速发CVPR,找到科研方向

python_vb的博客 786

【SOC估算】基于EKF与神经网络融合的锂电池SOC高精度估计及Matlab实现

本文探讨了基于EKF与神经网络融合的锂电池SOC高精度估计方法。通过结合扩展卡尔曼滤波(EKF)的模型驱动优势和神经网络的数据驱动学习能力,实现了对电池荷电状态(SOC)的精准预测。Matlab仿真验证了该混合算法在各种工况下均能显著降低估计误差,提升电池管理系统性能。

play7的博客 697

渗透测试-----4-缓冲区溢出

然而,如果攻击者能够进入缓冲区的空间,那么“longjmp(buffer)”实际上是跳转到攻击者的代码。一个典型的例子就是Pe。通过改变程序的返回地址,当函数调用结束时,程序就跳转到攻击者设定的地址,而不是原先的地址。有时,攻击者想要的代码已经在被攻击的程序中了,攻击者所要做的只是对代码传递一些参数。比如,攻击代码要求执行“exec(“/bin/sh”)”,而在libc库中的代码执行“exec(arg)”,其中arg使一个指向一个字符串的指针参数,那么攻击者只要把传入的参数指针改向指向”/bin/sh”。

weixin_62693307的博客 1212

手把手教你绕过Incapsula reese84防护:从JS反混淆到动态Token生成全流程

本文深入解析了以Incapsula reese84为代表的现代Web客户端挑战防护机制,详细介绍了从JS反混淆、算法逆向到动态Token生成的全流程实战方法。文章系统阐述了如何通过模拟浏览器指纹、移植关键算法或嵌入JS引擎来构建自动化应对策略,并提供了稳健的令牌管理与系统架构设计思路,帮助开发者在合规前提下提升自动化工具的适应性。

jenkins8butler的博客 518

AI如何自动检测和修复缓冲区溢出漏洞

来快速验证AI检测工具的效果。这个平台不仅提供便捷的代码编辑环境,还能一键部署测试服务,让我能立即看到修改后的代码在实际运行中的表现。特别是它的实时预览功能,帮助我快速验证AI提供的修复方案是否真正解决了问题,而不会引入新的bug。对于安全敏感的项目,这种即时反馈的体验非常宝贵。缓冲区溢出漏洞一直是软件开发中的"隐形杀手",它可能导致程序崩溃、数据泄露甚至系统被完全控制。传统的手动代码审查方式效率低下且容易遗漏问题,而AI技术的引入正在改变这一局面。在实际开发中,我使用。

IndigoNight21的博客 856

【施磊】C++课程笔记目录

【C++编程】施磊老师C++笔记目录

GeniusAng的博客 4128

第23章:代码迁移——用AI将Vue2迁移到Vue3、将JS迁移到TS

> - 用AI自动将Vue2 Options API转为Vue3 Composition API的完整流程 > - 将JavaScript项目批量迁移到TypeScript,自动添加类型推导 > - 处理依赖冲突、破坏性变更和迁移后的验证方法 > - 一个完整的Vue2到Vue3迁移案例(含路由、状态管理) > - 我如何用AI将公司一个10万行代码的老项目从JS升级到TS

sfishfly的博客 208

C++与安全编程:缓冲区溢出与防御

1.背景介绍 1. 背景介绍 缓冲区溢出是一种常见的安全漏洞,它发生在程序中的缓冲区内存空间不足时,导致数据溢出并破坏其他数据或控制流的情况。这种漏洞可以被攻击者利用,导致程序崩溃、数据泄露或远程执行代码等严重后果。 C++语言在处理动态内存分配和数据结构时,具有较高的灵活性和性能。然而,这也带来了编程错误和安全漏洞的风险。因此,了解C++与安全编程的关系以及如何防御缓冲区溢出至关重要。 ...

AI天才研究院 950

18、基于FSDD数据集的深度学习案例分析

本文基于FSDD(Free Spoken Digit Dataset)数据集,系统介绍了深度学习在语音数字识别中的应用。内容涵盖动态与静态计算图的对比、数据预处理流程(包括数据增强、固定长度处理和归一化)、监督学习与无监督学习的模型构建与训练过程,并通过实验对比了不同网络架构的性能。文中使用PyTorch实现2层全连接网络和自编码器模型,展示了正则化技术对提升模型准确率的关键作用。最后总结了关键技术并提出了实际应用建议,展望了未来在复杂模型、多模态融合和实时应用方向的发展潜力。

vscode6remote的博客 260

#渗透测试#网络安全# 一文搞懂什么是缓冲区溢出!!!

缓冲区溢出(BufferOverflow)是一种常见的计算机安全漏洞,指的是程序向缓冲区写入的数据超过了缓冲区本身的容量,导致多余的数据覆盖了相邻的内存区域。这种漏洞可以被恶意利用,导致程序崩溃、数据损坏,甚至让攻击者获得系统的控制权。缓冲区溢出攻击是一种严重的网络安全威胁,但通过采取上述防御策略,可以有效降低其风险。这些策略包括输入验证、堆栈保护、代码审计、使用安全的编程语言和库、应用安全开发模型、编译器保护、地址空间布局随机化、数据加密、动态测试和模糊测试、网络层面的防御、内核级防御和系统级访问控制。

soc的博客 1790

windows一键安装部署wvp-GB28181-pro视频监控平台

我们可以看到redis、mysql、zlm和wvp都正常运行了。该ip需要修改为wvp服务安装的 服务器的IP。默认用户名和密码分别为admin和admin。

zengliguang的专栏 5749

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

缓冲区溢出零容忍:现代C++编译器强化技术与静态检测工具全盘点

掌握缓冲区溢出防护核心技术,提升系统安全。2025全球C++及系统软件技术大会:C++代码缓冲区溢出防护技术专题,解析现代C++编译器强化机制与静态检测工具,覆盖内存安全、边界检查与自动化漏洞识别,助力高可靠系统开发,值得收藏。

ByteChat的博客 833

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ALSA音频开发实战:如何用snd_pcm_avail避免缓冲区溢出(附完整代码示例)

本文深入探讨了ALSA音频开发中如何使用snd_pcm_avail函数有效管理PCM环形缓冲区,避免音频数据溢出或欠载问题。通过完整代码示例和实战策略,帮助开发者构建稳健的音频处理系统,优化实时音频流的稳定性和性能。

lll78的博客 1042

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【2025 C++安全防护核心技术】:揭秘缓冲区溢出的7大防御策略与实战案例

掌握C++缓冲区溢出防护核心技术,解决系统级安全难题。聚焦2025全球C++及系统软件技术大会:C++缓冲区溢出的防护技术,涵盖编译器加固、边界检查、ASLR等7大策略,适用于操作系统、嵌入式与高性能服务开发。实战案例解析助力高效防御,值得收藏。

Algorhythm的博客 613

缓冲区溢出漏洞分析技术研究进展

缓冲区溢出漏洞分析技术研究进展 一.缓冲区溢出攻击步骤: 注入攻击代码 跳转到攻击代码(核心环节) 执行攻击代码 二.缓冲区溢出按照所攻击对象的不同可分为 3 类 破坏栈数据 ​ 改变 RETADDR 的值,使其存放已经注入到栈中的攻击代码的地址或者是代码区中某些具有特权的系统函数地址(比如 system)。 破坏堆数据 更改类函数指针 三.缓冲区溢出漏洞分析技术 漏洞自动检测技术 静态检测按照对模型节点的遍历方法分类 正向分析:指从可能发生缓冲区溢出漏洞的源节点出发,正向遍历模

阿航的博客 2056

C++缓冲区溢出攻防实战:如何在3步内彻底消除内存安全隐患

掌握C++缓冲区溢出防护核心技术,3步消除内存安全隐患。适用于系统软件开发、嵌入式平台等高安全场景,结合静态分析、边界检查与智能指针,提升代码健壮性。源自2025全球C++及系统软件技术大会:C++代码缓冲区溢出防护技术专题分享,值得收藏。

BreakNexus的博客 700

AddressSanitizer实战:深入解析堆缓冲区溢出检测与调试

内存安全是C/C++等系统级编程语言的核心挑战之一,其中堆缓冲区溢出是常见且危害严重的内存错误类型。这类错误源于程序访问了动态分配内存区域之外的地址,可能导致数据损坏、程序崩溃乃至安全漏洞。AddressSanitizer(ASan)作为编译器集成的运行时检测工具,通过影子内存映射和红区隔离技术,实现了对内存访问的实时监控。其技术价值在于将内存错误的调试从“大海捞针”变为“按图索骥”,能精准定位错误发生的代码行、内存分配点及操作类型。在工程实践中,ASan广泛应用于开发调试、持续集成测试和安全漏洞挖掘等场景

weixin_42537142的博客 337
上一篇: Load and Unload
下一篇: 用VC创建不导入任何DLL的WIN32程序
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值