Delphi Hook API ÒÑ·è¿ñ
×÷Õß: yangyxd תÔØÇë×¢Ã÷³ö´¦ http://hi.baidu.com/yangyxd 2009-3-12
ÂÛ̳ÀïÓйØÓÚHOOK APIµÄÌù×Ó£¬ µ«ÆäʵÏÖÔÚ·½Ê½ÏÔʾµÃÂé·³£¬ ÆäʵÏÖÔÚÀ¹½ØAPIÒ»°ã²»ÓÃÄÇÖÖ·½Ê½£¬ ´ó¶¼²ÉÓÃinline Hook API·½Ê½¡£ÆäʵҲ¾ÍÊÇÖ±½ÓÐÞ¸ÄÁËÒªÀ¹½ØµÄAPIÔ´ÂëµÄÍ·²¿£¬ÈÃËüÎÞÌõ¼þÌøתµ½ÎÒÃÇ×Ô¼ºµÄ´¦Àí¹ý³Ì¡£
²»¶à˵±ðµÄÁË£¬¿ªÊ¼ÎÒÃÇ×Ô¼ºµÄHook API°É¡£
ÎÒÃǽñÌìÒªÀ¹½ØµÄAPIÈçÏ£º
MessageBoxA¡¢MessageBoxW¡¢MessageBeep ºÍ OpenProcess ¡£
Ê×ÏÈ£¬´ó¼Ò¶¼ÖªµÀÒªÔÚÕû¸öϵͳ·¶Î§ÖÐÀ¹½Ø£¬ÐèҪʹÓÃDllÀ´Íê³É¡£ÏÖÔÚÎÒÃÇ´ò¿ªDelphi 2009£¬Ð½¨Ò»¸öDll¹¤³Ì£ºhookDll¡£ÐèҪ˵Ã÷µÄÊÇ£¬DelphiÊÇÍêÈ«ÃæÏò¶ÔÏóµÄ±à³ÌÓïÑÔ£¬ËùÒÔÎÒÃDz»ÒªÀË·Ñ£¬Õâ¸öDll´òËãÓÃÀàµÄ·½Ê½Íê³É¡£ÓÚÊÇ£¬ÔÚн¨µÄDLL¹¤³ÌÖÐÔÚÌí¼ÓÒ»¸öUnit Pas£¬ÃüÃûΪunitHook£¬ ÓÃÀ´Ð´À¹½ØÀàµÄ´¦Àí¡£unitHook.pasÖеĴúÂëÈçÏ£º
unit unitHook;
interface
uses
Windows, Messages, Classes, SysUtils;
type
//NtHookÀàÏà¹ØÀàÐÍ
TNtJmpCode=packed record //8×Ö½Ú
MovEax:Byte;
Addr:DWORD;
JmpCode:Word;
dwReserved:Byte;
end;
TNtHookClass=class(TObject)
private
hProcess:THandle;
NewAddr:TNtJmpCode;
OldAddr:array[0..7] of Byte;
ReadOK:Boolean;
public
BaseAddr:Pointer;
constructor Create(DllName,FuncName:string;NewFunc:Pointer);
destructor Destroy; override;
procedure Hook;
procedure UnHook;
end;
implementation
//==================================================
//NtHOOK À࿪ʼ
//==================================================
constructor TNtHookClass.Create(DllName: string; FuncName: string;NewFunc:Pointer);
var
DllModule:HMODULE;
dwReserved:DWORD;
begin
//»ñÈ¡Ä£¿é¾ä±ú
DllModule:=GetModuleHandle(PChar(DllName));
//Èç¹ûµÃ²»µ½ËµÃ÷δ±»¼ÓÔØ
if DllModule=0 then DllModule:=LoadLibrary(PChar(DllName));
//µÃµ½Ä£¿éÈë¿ÚµØÖ·£¨»ùÖ·£©
BaseAddr:=Pointer(GetProcAddress(DllModule,PChar(FuncName)));
//»ñÈ¡µ±Ç°½ø³Ì¾ä±ú
hProcess:=GetCurrentProcess;
//Ö¸ÏòеØÖ·µÄÖ¸Õë
NewAddr.MovEax:=$B8;
NewAddr.
Ïà¹ØÎĵµ£º
¶¨Ò壺
CbName: TComboBox;
width: Integer; //ʵ¼ÊËùÐèµÄ¿í¶È
ÔÚÖ´ÐдúÂëÖа´ÈçÏ·½·¨Ð´£º
width := CbName.Canvas.TextWidth(CbName.Items[I]); //¿ÉÓô˷½·¨Í¨¹ý±éÀú»ñµÃijѡÏîµÄ×î´ó¿í¶È£¬Ò²¿ÉÒÔ°´×Ô¼ºµÄÐ ......
ÈçºÎÔÚDelphiÀïÃæÀûÓÃWordµÄVBA´úÂë½øÐÐһЩ×ܽᡣ
1¡¢ Éú³ÉVBA´úÂë¡£Word±¾Éí¾ßÓкÜÇ¿µÄ¿ÉÀ©Õ¹ÐÔ£¬ÓÈÆäÊÇÖ§³ÖÓû§×Ô¶¨Ò幦ÄÜ£¬ÆäʵÏÖ
µÄÖ÷Òª·½Ê½¾ÍÊÇͨ¹ýVBA´úÂëÀ´ÊµÏֵġ£ÔÚ“¹¤¾ß->ºê->Visual Basic±à¼Æ÷”ÀïÃæ¾Í¿ÉÒÔ¿´
µ½¾ßÌåµÄºê´úÂ룬¿ÉÒÔÖ±½Ó½øÐб༡£¶øÇÒ»¹¿ÉÒÔʹÓüÖƺêµÄ¹¦ÄÜ×Ô¶¯ ......
procedure mc_SplitStr(sourStr:String;splitChar:String;desLst:TStringList);
var
tmpStr:String;
sValue:String;
iStart,iPos:Integer;
begin
try
desLst.Clear; //ºÜÖØÒª£¬·ñÔò£¬»áÒ» ......
ÕÐƸÈËÊý£º 4ÈË
ѧÀúÒªÇó£º ²»ÏÞ
¹¤×÷ÄêÏÞ£º ²»ÏÞ
н×Ê·¶Î§£º ÃæÒé
¹¤×÷µØµã£º ±±¾©Í¨ÖݾſÃÊ÷
Delphi³ÌÐòÔ±ËÄÃûְλҪÇó
񻂗:
1. ÊìÁ·Ê¹ÓÃDELPHI(C,C++, C#µÈ)½øÐпª·¢£»
2. ¾ßÓÐÁ¼ºÃµÄ³ÌÐò±àдϰ¹ß£»
3. ÔúʵµÄ»ù±¾¹¦£¬½á¹¹ÇåÎú¡¢ºÏÀí£»
4. Á¼ºÃµÄÖ´ÐÐÄÜÁ¦£¬½ÏºÃµÄÍê³ÉÔ¤¶¨ÈÎÎñ£»
5. ÉϽøÐÄÇ¿£¬ÄܳԿ ......