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

     

  • 相关阅读:
    迭代器和生成器
    python装饰器详述
    python爬虫-Response对象的属性
    python爬虫入门-开发环境与小例子
    c语言贪吃蛇详解5.GameOver功能与显示成绩
    c语言贪吃蛇详解4.食物的投放与蛇的变长
    vb实验7-找出小于18000的最大素数
    qt学习教程1.qt开发环境搭建
    链栈类模板实现
    顺序栈类模板实现
  • 原文地址:https://www.cnblogs.com/onetrainee/p/12563955.html
Copyright © 2011-2022 走看看