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] 即可。

     

  • 相关阅读:
    C++考试篇二:继承与派生
    当初的愿望实现了么?
    Ckeditor 的使用
    2012 年取公积金
    CodeWarrior下载程序到9S12XS128
    [置顶] CentOS6.3三种安装方法(U盘,硬盘,光盘)
    重大改变!DotMSN于今天开放了源代码,并升级到2.0版本!!
    创建跨平台的Ajax应用
    创建跨平台的Ajax应用
    C#编写最小花时隐藏为任务栏图标的Window appllication
  • 原文地址:https://www.cnblogs.com/onetrainee/p/12563955.html
Copyright © 2011-2022 走看看