有谁hook过KeBugCheckEx的?
hook住KeBugCheckEx真的能防止蓝屏吗?最近NV显卡驱动nvlddmkm.sys总是导致蓝屏,搞得我心里烦啊。。。
蓝屏代码是0x116,由于这个不是什么致命的错误,所以我估计拦截BugCheck函数是可行的。。。
我的思路是在Fake_KeBugCheckEx里ret 20【经测试不可行】,大家也说说自己的看法。防蓝屏成功者,给予添加核心会员奖励。如果已经是核心会员,给予一定数额的人民币奖励(通过话费充值实现)。 为什么不直接搞搞sys呢?说不定NV就把你拉过去做他们驱动的开发了。 naylon 发表于 2011-8-1 16:15 static/image/common/back.gif
直接返回肯定不行吧,因为原本的程序假定KeBugCheckEx不会返回了,所以根本没有处理返回后的情况,所以直接 ...
等待是小问题,大问题是这个死线程狂占CPU。。。
另外曾经听小力说冰刃是用hook kebugcheckex来判断地址有效性的。。。不知道PJF是怎么实现的。。。 Tesla.Angela 发表于 2011-8-1 16:28 static/image/common/back.gif
等待是小问题,大问题是这个死线程狂占CPU。。。
另外曾经听小力说冰刃是用hook kebugcheckex来判断地址 ...
TA,你忘记了啊?记得我们说过那啥 bypass pageguard的paper。
里面不就是HOOK这个函数,然后KILL掉这个线程吗?
不过paper觉得直接KILL掉后可能有问题,后来就JMP回起始地址。 KindOf 发表于 2011-8-1 17:14 static/image/common/back.gif
TA,你忘记了啊?记得我们说过那啥 bypass pageguard的paper。
里面不就是HOOK这个函数,然后KILL掉这个 ...
额???我啥时候跟你说过话???
我的fxxk PG是在bugcheck里死循环,但问题是cpu占用率有50%!!! naylon 发表于 2011-8-1 18:03 static/image/common/back.gif
表示不信。。。
不管你信不信!反正我信了!见:
http://www.baidu.com/s?wd=%B1%F9%C8%D0+hook+kebugcheckex
做个实验:
1.把进程设置为“结束就蓝屏”
2.用“任务管理器”结束,蓝屏
3.重复步骤1
4.用“冰刃”结束,不蓝屏
你去看看冰刃在fake_KeBugCheckEx里是怎么处理的,反正我没看明白。。。 本网站最菜的人 发表于 2011-8-1 20:24 static/image/common/back.gif
我以前文章里貌似说过了,创建一个EVENT,然后无限等待,然后线程就死在那儿,也就不会被调度了, 不占CPU: ...
感谢您的建议! Tesla.Angela 发表于 2011-8-1 18:26 static/image/common/back.gif
额???我啥时候跟你说过话???
我的fxxk PG是在bugcheck里死循环,但问题是cpu占用率有50%!!!
。。。
那你再看下那个paper.里面就说到 如果是由于PG而蓝屏的话,BSOD的error code是一个特殊值,然后就可以进行判断处理 本网站最菜的人 发表于 2011-8-2 20:32 static/image/common/back.gif
如果成功的话记得给我添加核心会员呵~
这是木有问题的。。。
不过麻烦你提供一下源代码,至少是核心源码。。。 本网站最菜的人 发表于 2011-8-2 21:48 static/image/common/back.gif
您自己实现一下吧,我对WIN7 X64一无所知。。。
PS:我目前除了玩游戏都不用WINDOWS了。。。
给个X86的实现代码我吧,懒得写了,反正成功就给你进核心会员,说话算数。。。
如果代码是我自己写出来的,就只能给你加分了。。。
PS:除了玩游戏和必须用电脑做的事情,我一般不用电脑。 本网站最菜的人 发表于 2011-8-2 21:48 static/image/common/back.gif
您自己实现一下吧,我对WIN7 X64一无所知。。。
PS:我目前除了玩游戏都不用WINDOWS了。。。
根据你的建议,今天花了1分钟写了代码,成功了。。。
//tested in XP x86 and WIN7 x86
KeWaitForSingleObject(System进程的EPROCESS, Executive, KernelMode, FALSE, NULL);
老大你这个成功的概念是什么?是不会蓝屏还是怎么样? http://www.uninformed.org/?v=3&a=3&t=pdf 多年之前,有个垃圾软件,故意引起4和5代码的蓝屏,我做过拦截
HookKebugCheck PROC @dwBugCheckCode:DWORD
.if @dwBugCheckCode==4 || @dwBugCheckCode==5
if DEBUG
invoke DbgPrint,CRLFTXT("检测到蓝屏操作,蓝屏代码:%08X,此行为已经被驱动程序阻止!"),@dwBugCheckCode
endif
mov eax, STATUS_ACCESS_DENIED
ret
.endif
;模拟压入堆栈,否则会导致堆栈不平衡而无法返回,使用STDCALL调用约定
;push .... ;压入参数n
;push xxxx ;压入参数2
;push zzzz ;压入参数1
push @dwBugCheckCode ;压入参数1
push offset @F ;压入返回地址,注意由于前面的5字节执行了函数帧创建操作,因此到跳转为至的所有指令绝对
;不可操作堆栈,也不可使用CALL指令,所有的压栈操作要在创建函数帧之前完成,且不能使用CALL
;这里最后压入返回地址,以便使得函数能得以返回
RealKebugCheck INLINE_HOOK_TAIL_EX <,,lpKebugCheck,,INLINE_HOOK_HEAD_SIZE,,>
@@:
ret
HookKebugCheck ENDP
页:
[1]