使用INT3进行HOOK处理

来源:互联网 发布:炉石传说淘宝金币代刷 编辑:程序博客网 时间:2024/05/21 20:22

原理:设置异常捕获,然后将需要HOOK的代码直接修改成INT3即可

用的一个关键的API:SetUnhandledExceptionFilter

//异常处理函数function MyInt3(CONST P:EXCEPTION_POINTERS):Integer;cdecl;var add:Pointer;begin  OutputDebugString(PChar(inttohex(P.ExceptionRecord.ExceptionCode,2)));  Add:=p.ExceptionRecord.ExceptionAddress;  OutputDebugString(PChar(Format('Address:%x ',[Cardinal(Add)])));  inc(p.ContextRecord.Eip);  result:=-1;end;

执行  SetUnhandledExceptionFilter(@MyInt3);


为了防止DELPHI自身捕获到异常,先要对其进行清除

asm   @Loop:    mov eax,fs:[0]    cmp dword ptr [eax],$FFFFFFFF    je @SEHCleared    mov eax,[eax]    mov fs:[0],eax    jmp @Loop   @SEHCleared:end;