阅读:1984回复:10
[请教]如何在Inline-Hook的代理函数中阻止原函数执行?
好不容易写了一个Inline-HOOK,结果只能记录函数执行而不能阻止原函数执行.大侠们帮忙看看是哪儿出的问题.
// Inline过程. 原函数开头 JMP 0008:MyFunction // void MyFunction(LPVOID lparam) { if(/* 条件判断*/) { DbgPrint("Forbid."); return; //一个RETURN就蓝屏了.换成_asm ret 4也没戏,如果去掉后就不会蓝屏. } JMP_OrgFunction(lparam); } __declspec(naked)void JMP_OrgFunction(LPVOID lparam) { // 其中下面的区域在DRIVERENTRY时写入了原函数的前七个字节与JMP到原函数第八个字节的指令. _asm { nop nop ...... } } 看了下DMP文件,竟然报RAV的驱动memcan.sys与hookapi.sys的错误.在虚拟机中测试时说是内存错误. 已经搞了两天多了,一点点头绪也没.哪位大牛帮忙看看啊.... |
|
沙发#
发布于:2007-08-13 23:48
你确定原来那个函数没有参数的?如果有的话,光用个return,不知道会跳到什么地方哦,呵呵。
|
|
板凳#
发布于:2007-08-14 10:04
你在你的HOOK函数里别调用原函数不就完了?!
|
|
地板#
发布于:2007-08-14 17:05
小声地说一句,被HOOK 的函数是PspExitThread.不调用是找XX啊.
|
|
地下室#
发布于:2007-08-14 17:06
见炉子的代码中HOOK掉了PspExitThread,结果成功.我用IS反了一下他的proxy,照原样写.还是出错..
|
|
5楼#
发布于:2007-08-14 19:35
PspExitThread never return!
|
|
|
6楼#
发布于:2007-08-14 19:48
MJMM的意思是................
|
|
7楼#
发布于:2007-08-14 19:49
按炉子的说法
DECLSPEC_NORETURN void Hook_PspExitThread { if(...!=....) { JMP... } } 一样蓝屏 |
|
8楼#
发布于:2007-08-14 19:52
反炉子一下.
ee463ad0 55 push ebp ee463ad1 8bec mov ebp,esp ee463ad3 e86e0d0000 call ee464846 ee463ad8 50 push eax ee463ad9 ff15205046ee call dword ptr ds:[0EE465020h] ee463adf 3b05306246ee cmp eax,dword ptr ds:[0EE466230h] ee463ae5 740a je ee463af1 ee463ae7 8b4508 mov eax,dword ptr [ebp+8] ee463aea 50 push eax ee463aeb ff15406246ee call dword ptr ds:[0EE466240h] ee463af1 5d pop ebp ee463af2 c20400 ret 4 这些不会蓝屏. |
|
9楼#
发布于:2007-08-14 23:44
还是HOOK的毒瘤,看来是百试不爽阿。
|
|
|
10楼#
发布于:2007-08-15 12:06
老大已经把HOOK都玩透了,偶还只是菜鸟...
|
|