首页
社区
课程
招聘
[原创]hook 任意函数,任意位置 [共享资源] soucre
发表于: 2010-4-7 22:35 50306

[原创]hook 任意函数,任意位置 [共享资源] soucre

2010-4-7 22:35
50306
看到国外某网站提供的一个hook库,蛮好用的,翻译下给大家共享

Hook This !

Library for coders

你可能经常会打开OD,将一些地址改成 jmp xxxx到你的dll然后过一会再恢复他们

那么,我发的这个东西会将你做的这些全部做掉,你可以hook任意位置的任意函数,并且不用一遍又一遍的检查堆栈是否平衡,这意味着什么?看下面的例子
00401087   . 68 B80B0000        PUSH 0BB8                                                         ; |ControlID = BB8 (3000.)
0040108C   . FF75 08            PUSH DWORD PTR SS:[EBP+8]                                         ; |hWnd
0040108F   . E8 6A010000        CALL <JMP.&user32.SetDlgItemTextA>     


这是X项目的一段汇编,在我没hook之前看起来是这样的
0040106B   . E8 9D41C00F        CALL IndigoGS.1000520D                                            ; |Message
00401070   . E8 83010000        CALL <JMP.&user32.SendMessageA>    


调用它提供的函数之后,代码被改写成上面这样了。接下来只需要再调用一次我库里的函数,就可以让代码看起来和原来一样
00401087   . 68 B80B0000        PUSH 0BB8                                                         ; |ControlID = BB8 (3000.)
0040108C   . FF75 08            PUSH DWORD PTR SS:[EBP+8]                                         ; |hWnd
0040108F   . E8 6A010000        CALL <JMP.&user32.SetDlgItemTextA>    

这个lib支持masm32 和C++编译器并且是开源的

如何使用
现在,你只需要调用我库文件的函数在你的exe或者dll中,像这样
MASM32:
invoke HookThis, 0040106Bh, Offset MyProcedure, 1

C++:
HookThis(0040106B, MyProcedure, 1)

Resumed:

HookThis(HookOffset, MyProcedure, ID)


第一个参数,我们要hook的地址,第二个参数,我们代码中的回调地址,第三个参数是我们当前做的第几个hook;
接下来,你可以做任何事情在你的代码中,但是要记得再你退出或者ret之前,要这样调用
MASM32:
invoke UnHookThis, 0040106B, 1

C++:
UnHookThis(0040106B, 1)

Resumed:
UnHookThis(HookedOffset, ID)


在这之后,目标程序会像没有发生过任何事情一样,继续运行;

【软件限制】
唯一的限制是,你只能hook 100个函数,当然我会在接下来的updata中增加,或者你自己diy,因为是开源的。

【例子】
Invoke HookThis, 00401064h, Offset MyProcedure1, 1
Invoke HookThis, 00401074h, Offset MyProcedure2, 2
Invoke HookThis, 00401094h, Offset MyProcedure3, 3

MyProcedure1 Proc
 ;DO ALL YOU WANT HERE
 invok UnHookThis, 00401064, 1
MyProcedure1 Endp

MyProcedure2 Proc
 ;DO ALL YOU WANT HERE
 invok UnHookThis, 00401074, 2
MyProcedure2 Endp

MyProcedure3 Proc
 ;DO ALL YOU WANT HERE
 invok UnHookThis, 00401094, 3
MyProcedure3 Endp



接下来是另外一个例子,hook你自己的dll只需要调用LoadLibrary,忘记那烦人并浪费时间的GetProcAddress

In hooked program:

0041000: invoke LoadLibrary, "MyDLL"
0041005: Other instructions

In our DLL:

DllEntry Proc hInst:HINSTANCE, reason:DWord, reserved1:DWord
 .if (reason == DLL_PROCESS_ATTACH)
      invoke HookThis, 0041005h, Offset InitAll, 1       
 .endif
 mov eax, TRUE
 ret
DllEntry EndP


请尽情享受,source code + Library + Include file in attachment

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (85)
雪    币: 207
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
此贴必火,先占位,广告位招租!
2010-4-7 22:45
0
雪    币: 86
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
跟这个贴应该会很火爆的 站位留学习
2010-4-8 01:25
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
8错~顶一下
2010-4-8 01:27
0
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
第一页占位......
2010-4-8 07:57
0
雪    币: 2586
活跃值: (920)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
6
不错,不错,支持一下
2010-4-8 08:25
0
雪    币: 55
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个收藏下来……
2010-4-8 09:12
0
雪    币: 72
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
额,这个东西。先顶了。
2010-4-8 09:17
0
雪    币: 357
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
目前国外的论坛看,貌似这个库还不是很成熟,还有某些情况没考虑
2010-4-8 09:26
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
正是需要的东西,吸收了
2010-4-8 12:49
0
雪    币: 136
活跃值: (424)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
11
做个标志,看起来不错,呵呵
2010-4-8 13:44
0
雪    币: 327
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
谁能改为一个VC的,不胜感谢!
2010-4-8 15:59
0
雪    币: 336
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
InitAll,函数能带参数吗?
2010-4-8 16:35
0
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
跟CAPIHook比起来咋样
2010-4-8 17:17
0
雪    币: 238
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
下载,后测试,再说话
2010-4-8 17:50
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
16
TAG:API FUNCTION HOOK LIB
2010-4-8 18:52
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
是个好东西,谢谢
2010-4-8 19:35
0
雪    币: 292
活跃值: (110)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
18
需要研究一下
2010-4-8 21:54
0
雪    币: 221
活跃值: (2256)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
有没有实例来看看???
2010-4-8 22:25
0
雪    币: 233
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
额..原来是这个...这个其实早有了 很多人很早就用上了  不过还是感谢公布
刚进来吓我一跳...差点看错以为是"HOOK任意指令".....
2010-4-8 22:35
0
雪    币: 264
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
能给出作者的网站吗???????
2010-4-8 23:54
0
雪    币: 266
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
刚刚成为正式会员了,此帖收了。
2010-4-9 00:05
0
雪    币: 143
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
能比微软的detours更好么?
2010-4-9 01:57
0
雪    币: 555
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
多谢分享~~
2010-4-9 02:15
0
雪    币: 207
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
楼主给个实例啊,vc的。
2010-4-9 08:41
0
游客
登录 | 注册 方可回帖
返回
//