SEH hook 的一种方法
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 的一种方法的更多相关文章
- 利用Objective-C运行时hook函数的三种方法
版权声明:转载请注明出处:http://blog.csdn.net/hursing 方法一,hook已有公开头文件的类: 首先写一个Utility函数: #import <objc/runtim ...
- 【原创】内核ShellCode注入的一种方法
标 题: [原创]内核ShellCode注入的一种方法 作 者: organic 时 间: 2013-05-04,04:34:08 链 接: http://bbs.pediy.com/showthre ...
- VB模拟键盘输入的N种方法
VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计 ...
- 分析函数调用关系图(call graph)的几种方法
绘制函数调用关系图对理解大型程序大有帮助.我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历.如果运气好一点,借助调试器的单步跟踪功能和call sta ...
- [Hook] 免root,自己进程内,startActivity hook的几种姿势
首先关于startActivity 我们平时会经常使用到 在activity内 直接startActivity(intent) 其实这里还有一种start方式 我们可能没怎么用过 getApplica ...
- Java应用中使用ShutdownHook友好地清理现场、退出JVM的2种方法
Runtime.getRuntime().addShutdownHook(shutdownHook); 这个方法的含义说明: 这个方法的意思就是在jvm中增加一个关闭的钩子,当jv ...
- 为了弄懂Flutter的状态管理, 我用10种方法改造了counter app
为了弄懂Flutter的状态管理, 我用10种方法改造了counter app 本文通过改造flutter的counter app, 展示不同的状态管理方法的用法. 可以直接去demo地址看代码: h ...
- DISCUZ论坛添加页头及页尾背景图片的几种方法
先给大家分享页头添加背景图片的两种方法:1. 第一种效果,是给discuz的整体框架添加背景图片,见图示: 添加方法如下:找到你现在使用模板common文件下的header.html文件,在<h ...
- JS 判断数据类型的三种方法
说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...
随机推荐
- 数组累计-reduce
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值. reduce() 可以作为一个高阶函数,用于函数的 compose. array.reduce(f ...
- 如何用上新版本的 IDEA(IDEA 2019.2.2版本)
转载请注明出处 电脑重装系统后,重新安装了最新版的IDEA发现,用原来的方式弄得话不成功.又下载了2018版本的,用原来的方式还是可以到2099年的.原来是IDEA现在很重视这方面,原来的方法在新版本 ...
- mysql中的事务隔离级别
事务是逻辑上的一组操作,要么都执行,要么都不执行. 事务最经典的.经常被拿出来说的例子就是转账了.假如小花要给小白转账1000元,这个转账会涉及到两个关键操作就是:将小花的余额-1000,将小白的余额 ...
- Python 从入门到进阶之路(四)
之前的文章我们简单介绍了一下 Python 的几种变量类型,本篇文章我们来看一下 Python 中的函数. 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性, ...
- 被忽略的CSS规则
说起CSS规则,除了普通规则(属性和值,key:value),可能大家都会想到@media,@keyframes,@fontface等常用的,那剩余的大家是否有所了解呢. 我们先来看一看CSS有哪些规 ...
- 【AGC035F】Two Histograms
Problem Description 你有一个 \(N\) 行.\(M\) 列的.每个格子都填写着 0 的表格.你进行了下面的操作: 对于每一行 \(i\) ,选定自然数 \(r_i\) (\(0\ ...
- 发布方式一:发布.netcore流程
通过注册世纪互联,发布网站 注册需要上传身份证正反照片,以及打款一元,试用期一个月 https://www.azure.cn 注册完成后,进入主页面: 如图所示,创建完成后的效果: 点开详情, ...
- maven仓库之第一篇
maven jar仓库 :存放maven项目使用的jar包. 中央仓库,存放99%免费开源项目jar包,apache公司负责维护的,以T为单位的存储. 例如 : struts2-core-2.3.24 ...
- Navicat Premium12.0 常用快捷键
- JavaScript 语句解析
在 HTML 中,JavaScript 语句是由 web 浏览器“执行”的“指令”. 实例 var x, y, z; // 语句 1 x = 22; // 语句 2 y = 11; // 语句 3 z ...