打印

Hook Api lib 0.4 for C

本主题由 小力 于 2008-7-25 09:11 移动

Hook Api lib 0.4 for C

标 题: 【原创】Hook Api lib 0.4 for C
作 者: 海风月影
时 间: 2008-01-11,13:51
链 接: http://bbs.pediy.com/showthread.php?t=58101

前一段时间,一位朋友提出了GetOpCodeSize计算不正确,小小更新了一下
现在用的是deroko 的LDEX86来取指令长度,比较通俗易懂

Stub也小小更新了一下,完善一些功能

引用:
/*
//////////////////////////////////////////////////////////////////////////
HookApi 0.4

thanks to xIkUg ,sucsor ,deroko

by 海风月影[RCT] , eIcn#live.cn
2008.01.11

//////////////////////////////////////////////////////////////////////////
//更新内容

2008.01.11  0.4
1,修改了HookBeforeStub,可以支持hookproc决定是否需要调用真实API,详见函数定义

2,重新修改了HookBeforeStub() ,和HookAfterStub() ,使得Stub内容更容易理解

2008.01.10
1,重新编写GetOpCodeSize,使用deroko的LdeX86 (Length disassembler engine for X86)
这样比较容易理解

2,增加了函数定义说明与更新历史


2007.12.15
1,更正GetOpCodeSize里面计算的一个小BUG

2007.xx.xx  0.3
1,修改了Stub,使得hookproc可以收到调用API后的返回地址,SetOnAfter还会收到api调用
后的返回值

2007.xx.xx  0.2
1,在xIkUg的delphi版本上修改成了c版本,并支持函数重入


//////////////////////////////////////////////////////////////////////////
SetOnBefore的函数的定义:

DWORD __stdcall MyApi(BYTE* IsCallApi ,DWORD RetAddr ,...);

RetAddr:调用该Api函数的返回地址
IsCallApi:是否需要继续调用真实API
      TRUE表示需要继续调用API
      FALSE表示直接返回
      当*IsCallApi==FALSE的时候,整个函数的返回值会返回给调用的地方
      当*IsCallApi==TRUE的时候,整个函数的返回值会忽略掉

注:由于不是必须调用真实API,因此函数类型必须是 __stdcall,否则会堆栈不平衡

//////////////////////////////////////////////////////////////////////////
SetOnAfter的函数的定义:

DWORD __stdcall MyApi(DWORD Eax ,DWORD RetAddr, ...);

Eax    :调用该Api后的返回值
RetAddr  :调用该Api函数的返回地址

MyApi返回值:返回给调用该api后的返回值
一般情况下可以这样返回:
  return Eax;

*/


附件

HookAPILib 0[1].4.rar (6.88 KB)

2008-6-10 21:51, 下载次数: 1

世事无常亦如此,我心欲绝随风去!

TOP

又可学习了

TOP

Processed in 0.155750 second(s), 7 queries, Gzip enabled.