Hook KiUserExceptionDispatcher参数指针错误的问题

跟了一个晚上,终于解决了

大概要实现的是用这个函数替换ntdll中的KiUserExceptionDispatcher,实现方法如下:

 VOID NTAPI KiUserExceptionDispatcher(PEXCEPTION_RECORD pExcptRec,PCONTEXT pContext) { DWORD retValue; if (RtlDispatchException(pExcptRec,pContext)) { retValue=::ZwContinue( pContext,0); }else{ retValue=::ZwRaiseException(pExcptRec,pContext,0); } /*略过.............*/ }

参考:http://www.longene.org/techdoc/0359381001224576966.html

这样看着只是通过KiUserExceptionDispatcher来调用ZwContinue与Zw...函数,看着很正常,几乎网上所有代码都是这个形式来写的(不知道他们是怎么通过的- -!)

运行时就出问题了,当有异常发生时 要么就是在RtlDispatchException里面不出来也没反应,要么就是一直循环的调用他,这个函数是R3异常处理的入口点,只要这里面发生异常还是调用他 - -!

在正常情况下,进入函数第一条指令时:

ESP=返回地址,ESP+X才是参数

..........................................................................

跟到刚刚才发现,跑到函数入口点时[ESP]=第一个参数,[ESP+4]=第二个参数,根本没有返回地址

而自己写的这个函数,永远是[ESP+4]=第一个参数,[ESP+8]=第二个参数.. - -! 这样不错才惨了...

----------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------

这是KiUserExceptionDispatcher,异常无数,但从没见过执行到77C7014A, ZwContinue直接进入内核了,而进ZwRaiseException后,估计程序就崩了,RtlRaiseException这里也是没见执行过的,- - 都摆设..

-----------------------------------------------------------------------------------------------------

问题点找着了,翻遍了GG BING也没见有说无返回地址参数问题,最后为了省事把他当作跳板转到其它函数中处理(没有汇编基础的感觉这方法是最简单*_*-)

VOID NTAPI KiUserExceptionDispatcher_BT(PEXCEPTION_RECORD pExcptRec,PCONTEXT pContext) { DWORD retValue; if (RtlDispatchException(pExcptRec,pContext)) { ::AfxMessageBox("ZwContinue"); retValue=::ZwContinue( pContext,0); }else{ ::AfxMessageBox("ZwRaiseException"); retValue=::ZwRaiseException(pExcptRec,pContext,0); } } VOID NTAPI KiUserExceptionDispatcher(PEXCEPTION_RECORD pExcptRec,PCONTEXT pContext) { __asm { /* -_-! 这里入栈看着有些不顺似的-如果真不会执行到RETN貌似不用压栈也得 */ push [esp+4] push [esp+4] call KiUserExceptionDispatcher_BT /* 看着不顺眼,问题解决就成 - -! */ /*补充:需Release下,Debug栈是乱的*/ } }

 

哎,真走了不少弯路,当时以为是参数顺序错了..结果_估计_是该函数是由内核空间转入用户空间入口,则无返回地址入栈,网上文章也没细看,问题解决百岁!

---------------------------------------------------------------------------------------------------------------------

注:

RtlDispatchException在Ntdll中未导出,需按各个版本处理该函数地址

处理如下:

typedef NTSTATUS(NTAPI *pRtlDispatchException)(PEXCEPTION_RECORD pExcptRec,CONTEXT * pContext); pRtlDispatchException RtlDispatchException=NULL; /*这是WIN7 64位旗舰版下的地址,也就是在反汇编中看到的第一个Call地址*/ RtlDispatchException=(pRtlDispatchException)0x77CB865B;

经过上面的函数处理,能够捕捉到的异常貌似都能够通过了,然后就能在程序中制造出种种异常,一一奸杀,=_=

转载于:https://www.cnblogs.com/SilenceRet/archive/2010/12/04/6805047.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker image Introduce

Docker 的image是运行的基本.例如我们build一个image时, 在Dockerfile每条指令会产生一个可读写的image, 下一条指令使用上一条指令产生的image为基础, 继续产生image(然后删除上一个image), 如果指令没有对image有修改的动作, 那么可以使用image cache. 所有的指令执行完, 生成…

vue 筛选组件_记一个复杂组件(Filter)的从设计到开发

此文前端框架使用 rax,全篇代码暂未开源(待开源)原文链接地址:Nealyang/PersonalBlog前言貌似在面试中,你如果设计一个 react/vue 组件,貌似已经是司空见惯的问题了。本文不是理论片,更多的是自…

Adobe称Flash技术遭排斥 呼吁政府介入

据国外媒体昨日报道,Adobe在一份提交给美国证交会的申报文件中抱怨称,Flash技术遭到苹果的全面排斥,这有可能对Adobe的业务产生影响。一位业内人士指出,此举彰显出Adobe可能要求政府机构的介入。 呼吁政府介入苹果旗下iPod Touch、…

python的正则表达式 re

2019独角兽企业重金招聘Python工程师标准>>> 原文发表在: http://luy.li/2010/05/12/python-re/ 延伸阅读:python的 内建函数 和 subprocess 。此文是本系列的第三篇文章了,和之前一样,内容出自官方文档,但…

python爬取图书信息_Python3 爬虫爬取中国图书网(淘书团) 记录

本人为一名刚开始学Python爬虫的小白,开贴仅为记录下自己的学习历程,方便做review要爬取链接:http://tuan.bookschina.com/要爬取内容: 图书名称, 图书价格, 以及对应预览图的link本文用到py packages: req…

求1到100中9的个数

个位9的数目十位9的数目 #include<stdio.h> int main() {int num 0;int count 0;for (num 1; num < 100; num){if (num % 10 9) //个位9的个数count;if (num / 10 9)//十位9的个数count;}printf("%d", count);return 0; }

Android 核心已经从 Linux kernel 代码库中删除

Greg Kroah-Hartman Novell 的开发人员&#xff0c;他主要负责维护 Linux 操作系统的启动&#xff0c;USB和驱动核心&#xff0c;近日他表示谷歌 Android 系统的驱动核心 已经从 Linux kernel 2.6.33 代码库中删除。Greg Kroah-Hartman 也是一个 Android 手机系统的爱好者&…

福克斯保养明细

福克斯轮胎厚度&#xff1a; 胎冠厚度在13mm左右(胎冠花纹深7mm、胎冠厚6mm&#xff09;&#xff0c; 胎侧厚度5mm。 现在的轿车轮胎一般胎面胶层厚度都比较厚&#xff0c;以165/70R13 锦湖KR19轮胎为例:花纹深度为7毫米&#xff0c;缓冲层1&#xff0d;1.5毫米&#xff0c;冠带…

python中英文半角还是全角_Python3全角转半角的方法

相信大家都对全角半角的概念已经有所了解了。中文文字永远是全角&#xff0c;只有英文字母、数字键、符号键才有全角半角的概念,一个字母或数字占一个汉字的位置叫全角&#xff0c;占半个汉字的位置叫半角。标点符号在中英文状态下、全半角的状态下是不同的。转换说明全角半角转…

USACO 1.1 Your Ride Is Here

今天开始切USACO 加油 /* ID: aznfy1 PROG: ride LANG: C */ #include <iostream> #include <fstream> #include <string> #include <stdio.h>using namespace std;char a[10],b[10];int main() {freopen("ride.in","r",stdin);f…

C语言分数求和

eg.1-1/21/3-1/41/5-1/6…1/99-1/100 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>int main() {int i 0;double sum 0.0;int flag 1;for (i 1; i < 100; i){sum flag*1.0 / i;flag -flag;}printf("%lf\n", sum);return 0; }

Mysql支持的数据类型(总结)

2019独角兽企业重金招聘Python工程师标准>>> 一.数值类型 Mysql支持所有标准SQL中的数值类型&#xff0c;其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC)&#xff0c;以及近似数值数据类型(FLOAT,REAL,DOUBLE PRESISION),并在此基础上进行扩展。 扩展后增…

chrome web store的信息

chrome web store终于现身了&#xff0c;期待好久了啊&#xff01;以后好玩了&#xff0c;哈哈。迅速记录一下几个链接&#xff1a;https://chrome.google.com/webstorehttp://groups.google.com/a/chromium.org/group/chromium-apps/topicshttp://code.google.com/intl/zh-CN/…

uniapp 获取到js文件var一个变量怎么获取到这个变量值_浅析Js中const,let,var的区别及作用域...

理解&#xff1a;let变量的作用域只能在当前函数中js中const,let,var的区别及作用域_lianzhang861的博客-CSDN博客​blog.csdn.net全局作用域中&#xff0c;用 const 和 let 声明的变量不在 window 上&#xff0c;那到底在哪里&#xff1f;如何去获取&#xff1f;​blog.csdn.n…

C语言求十个数中最大值

一.代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int arr[] { 1,2,3,4,5,63,7,8,9,11 };int sz sizeof(arr) / sizeof(arr[0]);int max arr[0];int i 0;for (i 1; i < 10; i){if (arr[i] > max)max arr[i];}printf("%d\n&qu…

ubuntu20.04安装timeshift最新方法

总结&#xff1a; 现在可以使用如下代码安装 sudo apt-get update sudo apt-get install timeshift原因&#xff1a; 在尝试Timeshift系统备份与还原中的方法时&#xff0c; sudo apt-add-repository -y ppa:teejee2008/ppa运行失败。 更改为以下代码&#xff1a; sudo a…

js基础练习---面向对象浅理解分析

function createPerson(name,sex,color) //构造函数{var objnew Object();//创建一个空对象obj.namename; obj.sexsex;obj.colorcolor;obj.Shownamefunction(){alert("我的名字是"this.name);};obj.Showsexfunction(){alert("我是"this.sex"的")…

前端一些面试问题3

DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。 DOM操作——怎样添加、移除、移动、复制、创建和查找节点。 1.创建新节点 createDocumentFragment() createElement() createTextNode() 2.添加、移除、替换 appendChild() removeChild() replaceChild(…

SQL Server安全(6/11):执行上下文与代码签名(Execution Context and Code Signing)

在保密你的服务器和数据&#xff0c;防备当前复杂的攻击&#xff0c;SQL Server有你需要的一切。但在你能有效使用这些安全功能前&#xff0c;你需要理解你面对的威胁和一些基本的安全概念。这篇文章提供了基础&#xff0c;因此你可以对SQL Server里的安全功能充分利用&#xf…

索引超出数组界限是什么意思_从V8源码分析一个JS 数组的内存占用问题

前段时间&#xff0c;在排查一个问题的时候&#xff0c;遇到了一个有点令人困惑的情况&#xff0c;有下面这两段代码&#xff1a;const a new Array(99999); a[99998] undefined;const b new Array(99999); b[99999] undefined;我们通过 node --inspect-brk 来分别运行这两…