首页
论坛
专栏
课程

Hook API lib (含源码)

2005-8-11 03:45 39925

Hook API lib (含源码)

2005-8-11 03:45
39925
新增 Delphi 的版本
Delphi 版本更新至 1.1
修正了备分原 API 开头时,遇到 B8(call), B9(jmp) 没修改后面的偏移值

按这里进入 Delphi.KTop 观看.
VC 的话,可直接用 MASM 的 obj 即可.

自己写的 hook api lib
可重覆 hook api
共两个 function

1. HookAPI
2. UnhookAPI

要 hook user32.MessageBoxA 的话,就是
invoke HookAPI,CTEXT("User32.dll"),CTEXT("MessageBoxA"),offset myMessageBox

详细例子在附档中有..附件:hooklib.zip

[公告]安全测试和项目外包请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最新回复 (42)
liuyilin 2005-8-11 08:34
2
0
谢谢,讲具体点好吗?
WindElf 2005-8-11 09:14
3
0
实现这样的功能很简单,但是很少见到这样的代码库
monkeycz 11 2005-8-11 11:03
4
0
不错!
Skyer 2 2005-8-11 15:10
5
0
较详细的说明(图解)在文章的 Delphi.KTop 有..

HookAPI lib 的确不难
不过我花了快一星期在上面 QQ

另外有专业级的 madCodeHook 的 API Hook Lib
http://www.madshi.net/

for Delphi/BCB/VC
个人使用免费,商业使用要钱
netsowell 11 2005-8-11 16:37
6
0
支持...
duzaizhe 2005-8-11 16:43
7
0
V lI Thx
aboil 2005-8-11 17:35
8
0
好,学习中
lnn1123 13 2005-8-11 17:50
9
0
支持,并学习
ijia 2005-8-17 16:34
10
0
在win2k3下无法2次hook
示例就只能弹出一个对话框
Skyer 2 2005-8-17 21:36
11
0
因为 2 次 hook 同一个 API, 所以一个对话框是正常的
因为当呼叫 MessageBoxA 后,会先到 callback2。callback2 呼叫 origApi2 时,则到 callback1,callback1 呼叫 origApi1 时,才回到原本的 MessageBoxA..


callback2 取代原 MessageBoxA 的 TEXT
callback1 取代原 MessageBoxA 的 Title
playar 2005-8-18 21:38
12
0
不能跨进程。。感觉没啥用
Skyer 2 2005-8-19 00:07
13
0
这是可以应用的
配合 SetWindowsHookEx 就可以作跨进程的 API Hook

这个 lib 只单纯 Hook 一个 process 中的 dll function
配合 Windows Hook 就可以写一个 DLL inject 到任一个 process 了.

欢迎提供更方便的全局 API Hook 方式
pendan2001 4 2005-8-19 17:52
14
0
ijia 2005-8-20 09:03
15
0
最初由 Skyer 发布
因为 2 次 hook 同一个 API, 所以一个对话框是正常的
因为当呼叫 MessageBoxA 后,会先到 callback2。callback2 呼叫 origApi2 时,则到 callback1,callback1 呼叫 origApi1 时,才回到原本的 MessageBoxA..


callback2 取代原 MessageBoxA 的 TEXT
........

明白了,是自己没看清
另外问一下,包中带的 Catchy32.asm 是不是可以用来反汇编?
Skyer 2 2005-8-20 11:05
16
0
那个 Catchy32.asm 是 Length Disassembler Engine 32bit
只能算每个 instuction 长度而以,没办法反汇编的
像 (call xxxxxxxx [E8 xx xx xx xx] 经 Catchy32 就是 5)

反汇编代码的话,本版或 OllyDBG 都有提供
auser 2005-9-8 16:49
17
0
很是不错!
Saver 2005-9-26 22:31
18
0
保存..研究
analog 2 2005-10-22 23:11
19
0
good,谢谢分享
底层飞鹰 2007-1-21 14:37
20
0
不论何时,apihook,shellcode,都是经典技术,都是值得我们为其发疯,狂热
追求的目标, 同志们,希望大家早日知道这一点,共同推进apihooh技术的大发展。

                              -------底层飞鹰呈上
walkier 2007-5-3 12:41
21
0
thankz!
------------------
clide2000 7 2007-5-8 10:17
22
0
关于说明中
"注:上面等於 Delphi 的
var
oldMessageBox: Pointer;
begin
oldMessageBox = HookAPI('user32.dll', 'MessageBoxA', @myMessageBox);"

问个不明白的地方.
我若是在myMessageBox函数中,再次调用MessageBoxA的,是否就成死循环了?
chinatme 2007-5-8 13:35
23
0
好东西不能下沉,顶一下~
Skyer 2 2007-5-8 15:08
24
0
陈年老帖被翻上来了

对.. 会变成死循环
chinatme 2007-5-8 20:56
25
0
在钩子卸载的时候怎么老是内存读错误~,郁闷~调不出来,老兄你这个东西怎么弄的??给个提示~
foxabu 13 2007-5-8 23:28
26
0
有这么好的Detours不用。。。
聆听雨 2007-6-13 22:50
27
0
学习再学习~
向志 2007-8-24 15:18
28
0
确实 我的也是的
atylon 2008-1-5 15:22
29
0
谢谢,学习学习
maxking 2008-1-7 19:23
30
0
支持,并学习
kakueiken 2008-1-10 23:17
31
0
好东西,有些我多忘记了。
kakueiken 2008-1-10 23:17
32
0
这个地方是圣地啊。。。。。看完这里的帖子,估计可以破windows了。
kakueiken 2008-1-10 23:18
33
0
对不起,最后一贴。。。兴奋过度ing
kakueiken 2008-1-10 23:45
34
0
洗完澡,继续看。
kakueiken 2008-1-10 23:48
35
0
也徐半夜三更也没人。。。最近再想加密算法之类的。
shinechou 2008-1-14 18:04
36
0
谢谢您的精彩分享,试试看!
aopen 2008-1-15 17:02
37
0
谢谢分享,下下来看看,呵呵
ylpx 2008-4-12 23:19
38
0
都是高手,看不懂.下载了收藏学习
xfoxbat 2008-6-3 18:52
39
0
我想看看你的 Delphi 版,為什麼打不開了
Skyer 2 2008-6-4 08:51
40
0
没发现怎么修改原主题..  

我就发在这吧..

Delphi 版
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=76621

上传一份
上传的附件:
hello果皮 2013-9-26 14:07
41
0
修改:
1.对分配的hook块进行了设置可执行权限,避免出现非法访问问题。
2.由于和C++程序混编时,导致HookAPIBegin,HookAPIEnd子程序标签地址为一个跳转地址,去掉了子程序属性,修改为标签
3.为方便VC使用,增加了hookapi.h头文件,API增加了一个输出参数。
使用方式为:
#include <Windows.h>
#include "hookapi.h"
int        (WINAPI* orig_MessageBoxA)(
        _In_opt_ HWND hWnd,
        _In_opt_ LPCSTR lpText,
        _In_opt_ LPCSTR lpCaption,
        _In_ UINT uType);
int        WINAPI my_MessageBoxA(
        _In_opt_ HWND hWnd,
        _In_opt_ LPCSTR lpText,
        _In_opt_ LPCSTR lpCaption,
        _In_ UINT uType)
{
        return orig_MessageBoxA(hWnd,lpText,"hook后的对话框",MB_OK);
}

int WinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPTSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
        HookAPI("user32.dll","MessageBoxA",my_MessageBoxA,&orig_MessageBoxA);
        MessageBox(NULL,"abc","123",MB_YESNOCANCEL);
}
上传的附件:
moodsky 8 2013-12-17 08:57
42
0
正好要用到,记录下~
修莫问 2013-12-17 10:57
43
0
感谢分享~  最近在看HOOKAPI  虽然思路理清了 但是  就是没找到源码啊~~      终于见到了
游客
登录 | 注册 方可回帖
返回