Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

技术学习来源:火哥(QQ:471194425)

该方法的一些原理暂时还不太了解,整理之后一定会补充的。

SEH hook 的一种方法

一、当函数中有try语句时编译器的处理

  首先,我们必须知道,当一个函数中有try时,编译器对其的函数头部分的处里和平常有些不一样的,如下图。

  

  1)关键是压入的第二个参数 0A65E00h,其通过 (test+6) 可以拿到该值。

    1> 这个值指向一个数据结构,其第五个成员代表指向except的语句。

    2> 因此,我们只要修改这个地址来到我们的函数,这很容易就执行了。

    

二、实现代码

  1)采用Debug模式下,则必须关闭增量链接。

    关闭方法:[debug] 关闭vs的增量链接

  2)实现代码:

// SEH.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// #include "pch.h"
#include <windows.h>
#include <stdio.h> int test3(ULONG ecode, PEXCEPTION_POINTERS p)
{
if (ecode == 0xc0000094)
{
p->ContextRecord->Eip += ;
return EXCEPTION_CONTINUE_EXECUTION; }
return EXCEPTION_EXECUTE_HANDLER;
} void test2()
{ __try
{ __asm
{
xor edx, edx;
xor eax, eax;
mov ecx, ;
div ecx;
}
}
__except ()
{
printf("exception语句也被执行了!");
} } int WINAPI ExcepFilter(PEXCEPTION_POINTERS p)
{
printf("HOOK上的函数执行了!\r\n");
return ;
} int __declspec(naked) catchExcepFilter()
{
__asm
{
mov eax, [ebp - 0x14];
push eax;
call ExcepFilter;
ret;
}
} int main(int argc, char* argv[])
{ ULONG hookAddress = *(PULONG)((ULONG)test2 + );
ULONG pro = ;
//exceptionInfoAddr = (ULONG)_exception_info;
if (VirtualProtect((PVOID)hookAddress, 0x1000, PAGE_READWRITE, &pro))
{
*((PULONG)hookAddress + ) = (ULONG)(catchExcepFilter);
//修复回去
VirtualProtect((PVOID)hookAddress, 0x1000, pro, &pro);
} test2(); //TestException();
getchar();
return ;
}

  3)执行结果

    

SEH hook 的一种方法的更多相关文章

  1. 利用Objective-C运行时hook函数的三种方法

    版权声明:转载请注明出处:http://blog.csdn.net/hursing 方法一,hook已有公开头文件的类: 首先写一个Utility函数: #import <objc/runtim ...

  2. 【原创】内核ShellCode注入的一种方法

    标 题: [原创]内核ShellCode注入的一种方法 作 者: organic 时 间: 2013-05-04,04:34:08 链 接: http://bbs.pediy.com/showthre ...

  3. VB模拟键盘输入的N种方法

    VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计 ...

  4. 分析函数调用关系图(call graph)的几种方法

    绘制函数调用关系图对理解大型程序大有帮助.我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历.如果运气好一点,借助调试器的单步跟踪功能和call sta ...

  5. [Hook] 免root,自己进程内,startActivity hook的几种姿势

    首先关于startActivity 我们平时会经常使用到 在activity内 直接startActivity(intent) 其实这里还有一种start方式 我们可能没怎么用过 getApplica ...

  6. Java应用中使用ShutdownHook友好地清理现场、退出JVM的2种方法

    Runtime.getRuntime().addShutdownHook(shutdownHook);    这个方法的含义说明:        这个方法的意思就是在jvm中增加一个关闭的钩子,当jv ...

  7. 为了弄懂Flutter的状态管理, 我用10种方法改造了counter app

    为了弄懂Flutter的状态管理, 我用10种方法改造了counter app 本文通过改造flutter的counter app, 展示不同的状态管理方法的用法. 可以直接去demo地址看代码: h ...

  8. DISCUZ论坛添加页头及页尾背景图片的几种方法

    先给大家分享页头添加背景图片的两种方法:1. 第一种效果,是给discuz的整体框架添加背景图片,见图示: 添加方法如下:找到你现在使用模板common文件下的header.html文件,在<h ...

  9. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

随机推荐

  1. 原子类解决i++问题

    原子类解决i++问题 import java.util.concurrent.atomic.AtomicInteger; /** * 一个完整的i++,多线程并发安全问题演示.及使用java.util ...

  2. shadertoy使用教程

    shadertoy使用教程 /** *常量定义 */ uniform vec3 iResolution; // 窗口分辨率,单位像素 uniform float iTime; // 程序运行的时间,单 ...

  3. ETCD:配置参数

    原文地址:Configuration flags etcd通过配置文件,多命令行参数和环境变量进行配置, 可重用的配置文件是YAML文件,其名称和值由一个或多个下面描述的命令行标志组成.为了使用此文件 ...

  4. ubuntu18.04 安装 flameshot截图工具

    安装flameshot:https://github.com/lupoDharkael/flameshot sudo apt-get install flameshot 然后设置一个快捷键,设置> ...

  5. 什么是DaemonSet

    DaemonSet只管理Pod对象,通过nodeAffinity和Toleration两个调度器,保证每个节点上只有一个Pod 集群动态加入了新Node,DaemonSet中的Pod也会添加在新加入N ...

  6. PHP中发送qq邮件

    <?php namespace app\home\logic; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Except ...

  7. docker: manifest for elasticsearch:latest not found

    今天在docker安装es出现坑,是这样. 使用: docker pull elasticsearch 提示:manifest for elasticsearch:latest not found如图 ...

  8. NIO基础方法一

    1.remaining();返回当前位置与limit之间得元素数. int[] intArray={1,2,3,4}; IntBuffer intBuffer=IntBuffer.wrap(intAr ...

  9. Bootstrap 基于Bootstrap和JQuery实现动态打开和关闭tab页

    基于Bootstrap和JQuery实现动态打开和关闭tab页   by:授客 QQ:1033553122 1.   测试环境 JQuery-3.2.1.min.j Bootstrap-3.3.7-d ...

  10. 简单的LNMP安全加固

    安全加固 Nginx安全加固: Nginx配置文件 (nginx.conf):/usr/local/nginx/nginx.conf 禁用autoindex: autoindex:是Nginx的目录浏 ...