-
-
VEH_Hook时遇到的问题
-
发表于:
2014-7-27 23:24
3987
-
LONG NTAPI CALL_MessageBoxA(struct _EXCEPTION_POINTERS *ExceptionInfo)
{
PVOID addr;
if(ExceptionInfo->ExceptionRecord->ExceptionCode==EXCEPTION_BREAKPOINT)
{
addr=ExceptionInfo->ExceptionRecord->ExceptionAddress;
//获取当前异常的地址
if (addr!=(PVOID)0)
{
char *lpText=(char*)ExceptionInfo->ContextRecord->Esp+8;
char *lpCaption=(char*)ExceptionInfo->ContextRecord->Esp+0xC;
lpText="Hello World!";
lpCaption="Hello World!";
//获取参数,修改参数
//::MessageBox(0,lpText,lpCaption,MB_OK);
//*(LPBYTE)(ExceptionInfo->ContextRecord->Eip)=0x90;
//ExceptionInfo->ContextRecord->Eip++;
ExceptionInfo->ContextRecord->EFlags |= 0x100;
//设置状态寄存器
VirtualProtect((void*)addr,BREAKPOINTLEN,dwNewProtect,&dwOldProtect);
*(BYTE*)(addr) = MessageBoxA_Ole_INT;
//恢复int3的原代码
VirtualProtect((void*)addr,BREAKPOINTLEN,dwOldProtect,&dwNewProtect);
AddVectoredExceptionHandler((ULONG)ExceptionInfo,NULL);
return ExceptionContinueExecution;
int lpaddr=(int)addr+(int)1;
addr=(PVOID)lpaddr;
__asm jmp addr;
}
}
return EXCEPTION_EXECUTE_HANDLER;
}
上面代码 是通过int 3 造成异常后 获取异常的代码 我处理完成之后 如何才能让代码继续运行呢????求助啊
原因找到了 感谢楼下三位的帮助 为我提供了不少思路 由衷地感谢~~
原因是我的返回值错误 如果想让程序继续任务除了修改EIP 和还原代码外 还需要
ExceptionInfo->ContextRecord->ContextFlags=CONTEXT_CONTROL;
返回EXCEPTION_CONTINUE_EXECUTION(-1)让程序从EIP继续执行。留下答案 希望别人碰到问题时可以帮到。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)