首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏全栈程序员必看

    SEH学习

    因为最近分析的一个壳用到了SEH相关的代码,所以要学习一下 内容转述自《软件加密技术内幕》 一些问题和回答 异常是谁提出的 Intel 提出了中断和异常的概念,中断跟外部硬件设备有关,而异常跟内部事件有关 现在如果异常还没被线程/进程相关的异常处理程序解决的话系统就会显示一个框框告诉你程序崩溃了,让你关闭或者调试这个程序 6 在程序终结之前,系统再次调用异常线程中的所有线程(这是释放资源最后的机会) 一些关于SEH * include hhd.h ;编译所必需的头文件 .DATA szTit db "SEH 你可以在OD菜单中的查看-SEH链中找对最前的一个SEH handler地址在反汇编中查看 你也可以在其第一句代码处下断点,然后SHIFT+F9运行程序,程序会断在SEH handler第一句处 线程 SEH 注册线程SEH的方法(汇编),进OD调试下就知道为什么了 assume fs:nothing push SehHandler push [fs:0]mov [fs:0],esp 线程SEH使用例子

    85020编辑于 2022-11-15
  • 来自专栏技术杂记

    VMP处理SEH

    基础 SEH(Structured Exception Handling)结构化异常处理 SEH实际包含两个主要功能:结束处理(termination handling)和异常处理(exceptionhandling 如果没有SEH,在这种情况下,将会给用户显示一个很常见的ApplicationError对话框。当用户忽略这个错误对话框,该进程就结束了。

    1.8K33发布于 2020-03-14
  • 来自专栏信创系统开发

    wine 的 seh 日志通道

    理解seh日志通道,对于分析程序崩溃、异常处理等底层问题至关重要。 1. seh 通道是什么? 您可以把SEH想象成一个“安全网”。 Wine的seh日志通道,就是专门用来记录Wine在模拟这套复杂的SEH机制时,所有关键活动的日志。 2. seh 日志里有什么? 追踪 seh 的所有活动 (信息量巨大):如果你想看到最详细的SEH处理流程,可以使用 trace 级别。 seh: 通道名是seh

    72910编辑于 2025-07-12
  • 来自专栏Eureka的技术时光轴

    Delphi异常机制与SEH

    SEH简介 SEH(struct exception handling)结构化异常处理是WIN32系统提供一种与语言无关的的异常处理机制。 编程语言通过对SEH的包装,使程序异常处理更加简单,代码结构更加清晰。 SEH提供了两种方式供开发者使用,一种是线程级的,通过设置线程的SEH链表结构。 线程的TIB信息保存在FS:[0],而TIB的第一项就是指向SEH链表,所以,FS:[0]就是指向SEH链表,关于SEH结构后面介绍。 当处理完后恢复原来的SEH结构,再还原堆栈,处理完毕。

    1.7K10发布于 2019-07-24
  • 来自专栏红队蓝军

    VEH&SEH异常详解

    里面是没有这个函数的 跟进RtlCallVectoredExceptionHandlers,首先找全局链表(VEH链表),存储了很多个异常处理函数,如果在全局链表里面没有找到,就会继续往下找局部链表(SEH 7.线程再次返回3环后,从修正后的位置开始执行 SEH SEH就是一个跟0环异常处理结构类似的链表 首先看一下RtlpGetStackLimits 取出了fs:[8]和fs:[4] 我们知道fs 0] 拿到一系列的参数之后,会首先进行一系列的判断 RtlpExecuteHandlerForException 最后调用RtlpExecuteHandlerForException处理异常 SEH 链表的第一个成员 2.SEH的异常处理函数必须在当前线程的堆栈中 3.只有当VEH中的异常处理函数不存在或者不处理才会到SEH链表中查找 SEH异常流程 1.RtlpGetStackLimits取出_NT_TIB EXCEPTION_EXECUTE_HANDLER:EXCEPTION_CONTINUE_SEARCH) { printf("SEH function run"); } } int main(

    1.3K10编辑于 2022-05-17
  • 来自专栏技术杂记

    VMPROTECT处理异常3--seh4

    构建及调用SEH链的代码如下: EXCEPTION_DISPOSITION HGYSEH( IN struct _EXCEPTION_RECORD *ExceptionRecord, mov fs:[0],esp // 设置到fs:[0]位 mov eax, DWORD PTR fs:[0] call DWORD PTR[eax+4] // 调用HGYSEH } 构建SEH mov ecx,dword ptr [ebp-10h] 15 0122142b 64890d00000000 mov dword ptr fs:[0],ecx//恢复 SEH ; int trylevel; int _ebp; PEXCEPTION_POINTERS xpointers; }; 因为_except_handler4是缺省SEH

    2.6K302发布于 2020-04-06
  • 来自专栏Eureka的技术时光轴

    SEH分析笔记(X64篇)

    系统内核中的 SEH 实现。 之所以在这里重温这个流程,是因为 x64 中 SEH 的流程总体思路也是如此,只是细节上做了一些修改。但这并不表示熟悉 x86 SEH 就能很轻松的掌握 x64 SEH。 登记的信息包括: 函数是否使用了 SEH、 函数使用的是什么组合的 SEH(__try/__except?__try/__finally?) 到这里,我们就讲完了 x64 SEH 的实现。可以发现,x64 和 x86 的 SEH 思想或者说框架是一样的: 1. 所有的非叶函数都参与到 SEH,尽管大部分的函数都没有使用到 SEH。 以上我们主要讲述的是 x64 SEH 的内部实现。

    1.9K10发布于 2019-07-24
  • 来自专栏技术杂记

    VMPROTECT处理异常4--seh4(2)

    { dwTemp = 0; } } IDA可以解析了它的所有filter和hander: EH4的结构 EH4的完整解析可以参看http://www.mouseos.com/windows/SEH8 \x68\x00\x00\x00\x00",指令长为5,后四字节随意,比如:按EH4结构,这里可能会push ExceptionHandler push offset SEH_4113B0 步骤3

    2.3K352发布于 2020-04-06
  • CC++ 使用SEH让崩溃进程转存

    这段代码实现的效果是基于SEH异常实现的,一旦我们的进程崩溃了,则自动将其转存成一个dump文件,方便后期的分析工作。

    64000编辑于 2022-12-28
  • 来自专栏极安御信安全研究院

    反调试专题丨反调试之基于SEH异常

    反调试之基于SEH异常在如果程序出现异常,如果有调试器,根据优先级,调试器会优先接管异常,从而就会跳过异常处理,如果没有调试器,那么程序就会接收异常。

    80230编辑于 2023-07-18
  • pymc3运行报错Error: invalid register for .seh_savexmm

    ,后来发现其实还是模块问题 pymc3 Exception: ('Compilation failed (return status=1) Error: invalid register for .seh_savexmm

    7600编辑于 2025-07-20
  • 来自专栏微卡智享

    Delphi中利用SEH屏蔽退出时的Runtime Error

       CALL EDX   TEST EAX,EAX   JNE @@common   JMP @@exit … End; 所以,需要借助SHE机制来处理这个问题,代码如下:   asm    //挂上SEH

    1.3K40发布于 2019-07-24
  • 【详解】使用Metasploit实现基于SEH的缓冲区溢出攻击

    SEH是Windows操作系统中用于处理程序异常的一种机制,如果能够覆盖SEH记录中的指针,就可以控制程序的执行流程。 触发SEH覆盖通过发送特定的输入数据,尝试覆盖SEH记录。这通常需要构造一个特定的payload,其中包含足够的填充数据以覆盖SEH记录中的指针。利用Metasploit进行攻击1. SEH溢出基本原理SEH溢出是一种利用程序中异常处理机制的漏洞来执行恶意代码的技术。Windows操作系统中的异常处理机制允许程序在遇到错误时恢复执行。 SEH链表是由一系列的异常处理器(ExceptionHandler)和下一个SEH记录指针(Next SEH Record Pointer)组成的,这些记录存储在栈上。 缓冲区溢出攻击可以通过覆盖SEH链表来改变程序流,从而执行恶意代码。使用Metasploit实现SEH攻击的基本步骤目标选择与信息收集:确定目标应用程序及其版本。

    44600编辑于 2025-01-12
  • 来自专栏网络安全技术点滴分享

    利用SEHOP防御结构化异常处理程序(SEH)覆盖攻击

    利用SEHOP防御结构化异常处理程序(SEH)覆盖攻击微软安全工程中心的一项职责是研究纵深防御技术,使攻击者更难成功利用软件漏洞。 攻击技术:SEH覆盖SEHOP缓解措施的目的是防止攻击者能够使用结构化异常处理程序(SEH)覆盖利用技术。 自该论文发表以来,SEH覆盖技术已成为攻击者的标准武器。最新版Metasploit框架中约20%的漏洞利用使用了SEH覆盖技术。 从高层次看,SEH覆盖技术利用软件漏洞通过滥用Windows提供的32位异常调度功能来执行任意代码。在功能层面,SEH覆盖通常通过使用基于栈的缓冲区溢出来覆盖存储在线程栈上的异常注册记录实现。 我们鼓励用户在默认未启用此功能时启用它,以更好地防御SEH覆盖利用技术。有关SEH覆盖和SEHOP起源的更多信息,可以参考引用的文献1,5。参考文献详见原文

    22700编辑于 2025-07-31
  • 来自专栏技术杂记

    VMPROTECT处理异常2-各种异常处理(VEH,VCH,SEH,UEF)

    VEH,VCH,SEH,UEF VEH: 向量化异常处理程序(进程相关) VCH: 同上,也是向量化异常处理程序,不过它总是在最后被调用(进程相关) SEH: 结构化异常处理程序,这个不用解释了吧。 就是fs:[0]那个(线程相关) UEF: 即TopLevalEH,基于SEH的,是进程相关 因为SEH的的头部被保存在TEB(fs:[0]),所以它是线程相关的 UEF、VEH、VCH异常处理函数定义 PEXCEPTION_RECORD ExceptionRecord; PCONTEXT ContextRecord; } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; 函数调用 SEH 弹框,但是,如果把VEHFilter的返回值改为EXCEPTION_EXECUTE_HANDLER,不在调试状态下运行,不会弹VCH框,在调试状态(VS或WINDBG之类),会弹VCH框 相关结构体 SEH 链,如果存在,则交由它处理 5.如果SEH链的某个处理了异常,并且返回EXCEPTION_CONTINUE_EXECUTION,则查找VCH链,如有,则执行VCH,再执行程序 6.如果SEH链的某个处理了异常

    3.4K402发布于 2020-04-06
  • 来自专栏用户7692554的专栏

    渗透测试|Triologic Media Player 8 .m3l 缓冲区溢出 (Unicode) (SEH)

    xhr.send(); exp代码 # Exploit Title: Triologic Media Player 8 - '.m3l' Buffer Overflow (Unicode) (SEH \x61\x32\x4c\x61\x53\x6c\x6e\x43\x35\x51\x68\x6f" buf += b"\x75\x4d\x30\x41\x41" nseh = "\x71\x41" seh x50\x71" # push eax, padding alignment += "\xC3" # retn buffer = "A" * 536 + nseh + seh

    61610编辑于 2022-09-08
  • 来自专栏逆向技术

    异常处理第三讲,SEH(结构化异常处理),异常展开问题

               异常处理第三讲,SEH(结构化异常处理),异常展开问题 不知道昨天有木有小伙伴尝试写一下SEH异常处理的代码.如果没写过,请回去写( :) 不写也没关系 ( ̄┰ ̄*)) 那么说下昨天的异常处理的问题 二丶什么是异常展开 上面我们说了异常展开,也把我们的代码贴出来了.那么现在思考一个问题 当 fun1函数调用fun2函数  的时候,fun2函数也注册一个SEH筛选器异常,(注册相当于往链表头插入) 例如下面的代码 offset HANDLER2 //注册回调函数 push fs:[0] //压入旧的链表指针 mov fs:[0],esp //新的位置变成当前的SEH 在判断程序是否在调试状态,如果在就接着给调试器 5.如果没有的话,或者不处理,那么操作系统就会调用筛选器异常 6.如果没有,那么系统会调用默认的异常处理,也就是崩溃的的界面 7.在终结之前,对其展开操作,然后依次调用设置的SEH

    1.7K100发布于 2018-01-08
  • windows上安装mingw教程及mingw64国内下载地址汇总

    点击x86_64-posix-seh进行下载。 _64-14.2.0-release-mcf-seh-ucrt-rt_v12-rev0.7z GCC14.2.0 点我下载 mingw-x86_64-14.1.0-release-win32-seh-ucrt-rt_v12 _64-14.1.0-release-posix-seh-ucrt-rt_v12-rev0.7z GCC14.1.0 点我下载 mingw-x86_64-14.1.0-release-posix-seh-msvcrt-rt_v12 _64-13.2.0-release-win32-seh-ucrt-rt_v11-rev1.7z GCC13.2.0 点我下载 mingw-x86_64-13.2.0-release-win32-seh-msvcrt-rt_v11 _64-13.2.0-release-posix-seh-msvcrt-rt_v11-rev1.7z GCC13.2.0 点我下载 mingw-x86_64-13.2.0-release-mcf-seh-ucrt-rt_v11

    45.2K32编辑于 2025-07-22
  • 5.1 缓冲区溢出与攻防博弈

    如何绕过该保护实际上GS保护机制并没有保护存放在栈上的SEH异常处理结构,因此,如果能够写入足够的数据来覆盖栈上的SEH记录,并在函数收场白和Cookie检测之前触发SEH异常,那么将会绕过Cookie SEH Overwrite攻击的基本思路是利用缓冲区溢出漏洞,将恶意代码写入SEH记录中,从而覆盖SEH处理程序的返回地址,从而控制程序的执行流程。 /safessh:yes 来开启,采用SEH句柄验证技术验证堆栈中SEH的合法性,来确保SEH结构不会被非法覆盖。 它通过验证SEH处理程序是否在可信的SEH链表中来保护程序免受SEH Overwrite攻击的影响。 SEHOP通过验证整个异常处理链表的完整性,防止攻击者通过覆盖单个SEH处理程序来破坏整个链表,从而使得SEH处理程序难以被利用。

    72920编辑于 2023-07-12
  • 5.1 缓冲区溢出与攻防博弈

    如何绕过该保护 实际上GS保护机制并没有保护存放在栈上的SEH异常处理结构,因此,如果能够写入足够的数据来覆盖栈上的SEH记录,并在函数收场白和Cookie检测之前触发SEH异常,那么将会绕过Cookie SEH Overwrite攻击的基本思路是利用缓冲区溢出漏洞,将恶意代码写入SEH记录中,从而覆盖SEH处理程序的返回地址,从而控制程序的执行流程。 /safessh:yes 来开启,采用SEH句柄验证技术验证堆栈中SEH的合法性,来确保SEH结构不会被非法覆盖。 它通过验证SEH处理程序是否在可信的SEH链表中来保护程序免受SEH Overwrite攻击的影响。 SEHOP通过验证整个异常处理链表的完整性,防止攻击者通过覆盖单个SEH处理程序来破坏整个链表,从而使得SEH处理程序难以被利用。

    80640编辑于 2023-10-11
领券