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. java全栈项目

    文档地址:https://course.7yue.pro/lin/sleeve/ http://talelin.unna.com.cn/ 1.小程序里,我把结构分为三部分:wxml(view).pag ...

  2. 关于Git和GitHub的一些知识

    git是分布式的版本控制工具,可离线,svn是集中式的,要联网操作.集中式的所有数据都放在服务器端,如果服务器宕机,则历史记录也可能就丢失了,这叫做单点故障.分布式的数据可直接保存在客户端. 为何要版 ...

  3. PHPStorm 初遇 Xdebug (xdebug代码调试及性能分析)

    centos 7 下PHP7安装xdebug # 下载xdebug wget https://xdebug.org/files/xdebug-2.7.2.tgz # 解压 tar -xf xdebug ...

  4. IM开发基础知识补课(七):主流移动端账号登录方式的原理及设计思路

    1.引言 在即时通讯网经常能看到各种高大上的高并发.分布式.高性能架构设计方面的文章,平时大家参加的众多开发者大会,主题也都是各种高大上的话题——什么5G啦.AI人工智能啦.什么阿里双11分分钟多少万 ...

  5. 使用pip安装python库的几种方式

    操作系统 : CentOS7.5.1804_x64 Python 版本 : 3.6.8 1.使用pip在线安装 1.1 安装单个package 格式如下: pip install SomePackag ...

  6. Docker Compose file

    1.  Service configuration Compose file 是一个YAML文件,用于定义 services, networks, 和 volumes.其默认路径是./docker-c ...

  7. js分号问题

    总结一句话: 一行开头是括号(比如IIFE)或者方括号的时候加上分号就可以

  8. m3u8视频格式分析

    “ 学习m3u8格式.” 一段时间之前,乘着某美女CEO的东风,学习了一个新的数据格式,即m3u8格式. 经过一段时间的沉淀,美女CEO的热潮大概已经褪去,今天才对这个格式进行分析,嘻嘻. 先介绍下来 ...

  9. [转]How to enable macros in Excel 2016, 2013, and 2010

    本文转自:https://www.ablebits.com/office-addins-blog/2014/07/22/enable-macros-excel/#always-run-macros T ...

  10. windows提权

    提权辅助 https://bugs.hacking8.com/tiquan/