使用 delphi 語言來 Hook 指定的 API 函數,比較簡便的方法如下:
1、下載 CnPack 小組的免費開源組件包 CnVCL,將之安裝到 delphi 系統中:
2、在 CnVCL 組件包中,提供了?CnInProcessAPIHook 單元,該單元文件提供了?TCnInProcessAPIHook 組件,及其他相關的函數,提供了“進程內實現 APIHook ”功能:
其主要定義如下:
3、編寫代碼實現 HOOK 指定 API 函數的示例:
(1)先要引入單元文件:
uses?CnInProcessAPIHook;(2)建立 TCnInProcessAPIHook 實例,並指定需要 HOOK 的 API :
procedure?TForm1.FormCreate(Sender:?TObject);begin
FCnAPIHook?:=?TCnInProcessAPIHook.Create(Self); FCnAPIHook.DllFunction?:=?'MessageBoxA';//需要?HOOK?的?API? FCnAPIHook.DllName?:=?'User32.dll';//API所屬動態庫名稱 FCnAPIHook.ParamCount?:=?4; FCnAPIHook.Mutex?:=?True; FCnAPIHook.RestoreWhenOnHook?:=?True; FCnAPIHook.OnAPIHookProc?:=?CnHookAPI1APIHookProc;//指定響應事件end;
(3)開始 HOOK 代碼:
procedure?TForm1.Button2Click(Sender:?TObject);begin
FCnAPIHook.Active?:=?True;end;
終止 HOOK 代碼:
procedure?TForm1.Button3Click(Sender:?TObject);begin
FCnAPIHook.Active?:=?False;end;