|
二年级
 
H-S-T - 帖子
- 438
- 精华
- 0
- 威望
- 0 度
- 金币
- 1335 枚
- 性别
- 男
- 最后登录
- 2008-9-4
|
1#
大 中
小 发表于 2008-6-10 21:51 只看该作者
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
世事无常亦如此,我心欲绝随风去!
|