看到国外某网站提供的一个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>
代码:
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>
如何使用
现在,你只需要调用我库文件的函数在你的exe或者dll中,像这样
代码:
MASM32: invoke HookThis, 0040106Bh, Offset MyProcedure, 1 C++: HookThis(0040106B, MyProcedure, 1) Resumed: HookThis(HookOffset, MyProcedure, ID)
接下来,你可以做任何事情在你的代码中,但是要记得再你退出或者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
代码:
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