zoukankan      html  css  js  c++  java
  • 一段构造SEH异常来调用恶意代码的片段分析

    一段构造SEH异常来调用恶意代码的片段分析

     

     众所周知,FS三环下指向TEB,TEB+0x0处为_NT_TIB,其详细结构如下:

    nt!_TEB
       +0x000 NtTib            : _NT_TIB
       +0x01c EnvironmentPointer : Ptr32 Void
       +0x020 ClientId         : _CLIENT_ID
       +0x028 ActiveRpcHandle  : Ptr32 Void
       +0x02c ThreadLocalStoragePointer : Ptr32 Void

    nt!_NT_TIB
       +0x000 ExceptionList    : Ptr32 _EXCEPTION_REGISTRATION_RECORD
       +0x004 StackBase        : Ptr32 Void
       +0x008 StackLimit       : Ptr32 Void
       +0x00c SubSystemTib     : Ptr32 Void
       +0x010 FiberData        : Ptr32 Void
       +0x010 Version          : Uint4B
       +0x014 ArbitraryUserPointer : Ptr32 Void
       +0x018 Self             : Ptr32 _NT_TIB

    nt!_EXCEPTION_REGISTRATION_RECORD
       +0x000 Next             : Ptr32 _EXCEPTION_REGISTRATION_RECORD
       +0x004 Handler          : Ptr32     _EXCEPTION_DISPOSITION

    因此数据结构如下图:

     

    下面来分析其汇编代码:

    1. 向SEH链中添加代码:

    push 恶意代码

    push large dword fs:0

    mov fs:0,esp

    其借助栈来构造ExceptionList

    xor ecx,ecx

    div ecx

    其会首先触发SEH异常,然后操作系统找寻SEH链,找到第一个handler(替换为恶意代码并执行)

    2.将ExceptionList还原的:

    mov eax,large fs:0 // 获取Esp

    mov eax,[eax] // 获取ExceptionList

    mov eax,[eax] //  获取Next

    mov large fs:0 eax; // 还原fs:0

    该代码有个明显的错误,其将第一个ExceptionHandler也从链表中摘除,正常只有一个 mov eax,[eax] 即可。

     

  • 相关阅读:
    mysql BETWEEN操作符 语法
    mysql IN操作符 语法
    mysql LIKE通配符 语法
    mysql TOP语句 语法
    mysql DELETE语句 语法
    mysql Update语句 语法
    mysql INSERT语句 语法
    mysql ORDER BY语句 语法
    mysql OR运算符 语法
    mysql AND运算符 语法
  • 原文地址:https://www.cnblogs.com/onetrainee/p/12563955.html
Copyright © 2011-2022 走看看