±ÍÇÏ´Â ¼Õ´Ô À̽ʴϴÙ
·Î±×ÀÎ
ȸ¿ø°¡ÀÔ
  
  µ¨¸¶´ç °ø½Ä ÀºÇà°èÁÂ
  ÇϳªÀºÇà 227-910235-83607
  ¿¹±ÝÁÖ ÀÌ»ó±¹(¿î¿µÁø)
ÇÁ·ÎÁ§Æ® °Ô½ÃÆÇ
ÅõÇ¥°Ô½ÃÆÇ
µ¨¸¶´ç¼Ò°³
±âÃʺÎÅÍ È°¿ë±îÁö! µ¨ÆÄÀÌ ±³À° - µ¥ºê±â¾î
°­ÁÂ, ÆÁ, Á¤º¸ °­ÁÂ, ÆÁ, Á¤º¸ ÀÔ´Ï´Ù.
±Û³»¿ë - °­ÁÂ, ÆÁ, Á¤º¸
 [ÀÌÀü ¹Î¼º±â´ÔÀÇ ÈÄÅ· °­ÁÂ] #3
Æß
(¼Õ´Ô)
2005-07-31 ¿ÀÈÄ 8:41:24
Ä«Å×°í¸®: ÆÁ
11036ȸ Á¶È¸



µî·ÏµÈ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù.
¾È³çÇϼ¼¿ä...
¹Î¼º±â ÀÔ´Ï´Ù.

¾îÁ¦´Â Á¦°¡ '¸ö»ì'ÀÌ ³ª¼­~ °­Á¸¦ ½¬´Â ¸¸ÇàÀ»~~ ^^;
µåµð¾î ½ÇÀüÀ̱¸¸¸¿ä~~


*** ½ÇÀü~
ÀÚ, µåµð¾î ±â´Ù¸®°í ±â´Ù¸®´ø ½Ã°£ÀÌ´Ù. ÀÌÁ¦ Á÷Á¢ °¥±¸¸®¸¦ Èֵѷ¯ º¼ ¶§°¡ ¿Ô´Ù. ÀÌ °­Á¿¡¼­´Â WH_KEYBOARD¿Í WH_SHELLÀ̶ó´Â µÎ °³ÀÇ °¥±¸¸®¸¦ ÀÌ¿ëÇØ Å°º¸µåÀÇ µ¿ÀÛ°ú ³ëÆ®ÆеåÀÇ ½ÇÇàÀ» ¸¶À½²¯ ±«·ÓÇô º¼ °ÍÀÌ´Ù. À§¿¡¼­µµ ¼³¸í ÇßÁö¸¸ ½Ã½ºÅÛ Àüü¸¦ »ó´ë·Î ¸Â¯À» ¶ß±â À§Çؼ­´Â ÈÅ ÇÁ·Î½ÃÀú°¡ DLL³»¿¡ ÀÖ¾î¾ß ÇÑ´Ù. Ȥ½Ã DLLÀ» ¸¸µéÁÙ ¸ð¸£´Â »ç¶÷ÀÌ ÀÖ´Ù¸é Á¶ ¾Æ·¡ ¿ë±æ´ÔÀÇ ¡®µ¨ÆÄÀÌ·Î DLL ¸¸µé°í »ç¿ëÇϱ⡯¶ó´Â ¸ÚÁø °­Á°¡ ÀÖÀ¸´Ï ºü¸¥ ½Ã°£³»¿¡ ÀÐ°í ½ÀµæÇÏ¿© ÀÚ½ÅÀÇ °ÍÀ¸·Î ¸¸µéÀÚ. (¾Æ~ ÀÌ ¾ó¸¶³ª ÈǸ¢ÇÑ ¶°³Ñ±â±â Àΰ¡~ ^^;)

µ¨ÆÄÀÌÀÇ ¡®New¡¯ ¸Þ´º¸¦ ¼±ÅÃÇØ ¡®DLL¡¯ ÇÁ·ÎÁ§Æ®¸¦ Çϳª ½ÃÀÛÇÏ°í, ÇÁ·ÎÁ§Æ® À̸§À» ¡®HookDLL.DPR¡¯·Î ÀúÀåÇÏÀÚ. °¥±¸¸®Áú¿ë ÇÔ¼ö¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¸ÕÀú Uses¹®¿¡ Windows¿Í Messages¸¦ Æ÷ÇÔ½ÃÄÑ¾ß ÇÑ´Ù.

uses SysUtils, Classes, Windows, Messages;

Å°º¸µå¿Í ¼¿ÀÇ ÈÅ ÇÚµéÀ» ÀúÀåÇÒ µÎ°³ÀÇ Àü¿ªº¯¼ö¸¦ ¸¸µé¾î µÎÀÚ.

var
HKbHook : HHOOK;
HShellHook : HHOOK;

¾Õ¿¡¼­ ¸»ÇßµíÀÌ, ÀÌ Àü¿ªº¯¼öµéÀº DLL ³»ÀÇ ÈÅ ÇÁ·Î½ÃÀú°¡ È£ÃâµÉ ¶§¸¶´Ù ´Ù¸¥ ¾îÇø®ÄÉÀ̼ÇÀÇ ¿µ¿ª¿¡ Àֱ⠶§¹®¿¡ ¾î¶²°ªÀ» °¡Áö°í ÀÖÀ»Áö´Â ¾Æ¹«µµ ¸ð¸¥´Ù. (¹°·Ð, ÀϹÝÀûÀ¸·Î´Â 0ÀÏ °ÍÀÌ´Ù.) µû¶ó¼­ °¢ ¾îÇø®ÄÉÀ̼ǰú ¹«°üÇÑ ¿µ¿ª¿¡ ÀÌ °ªÀ» ÀúÀåÇÏ°í ºÒ·¯¿Í¾ß ÇÑ´Ù. ¿©±â¼­´Â ±× ¿µ¿ªÀ» Çϵåµð½ºÅ© ³»ÀÇ ¡®C:\Hook.dat¡¯ÆÄÀÏ·Î ÇÏÀÚ. ÀÌÁ¦ ÀÌ ÆÄÀÏ¿¡ ÆÄÀÏ¿¡ ÈÅ µ¥ÀÌÅ͸¦ ÀÐ°í ½áÁÖ´Â ÇÁ·Î½ÃÀú, ReadData¿Í WriteData¸¦ ¸¸µéÀÚ.

Const
HookDataFile = ¡®c:\Hook.Dat¡¯;

procedure ReadData;
var
F : TFileStream;
begin
F := TFileStream.Create(HookDataFile, fmOpenRead);
try
F.Read(HKbHook, sizeof(HKbHook));
F.Read(HShellHook, sizeof(HShellHook));
finally
F.Free;
end;
end;

procedure WriteData;
var
F : TFileStream;
begin
F := TFileStream.Create(HookDataFile, fmCreate);
try
F.Write(HKbHook, sizeof(HKbHook));
F.Write(HShellHook, sizeof(HShellHook));
finally
F.Free;
end;
end;

°¢ ¾îÇø®ÄÉÀ̼ǿ¡¼­ ÀÌ DLLÀÌ È£ÃâµÉ ¶§, ÀϹÝÀûÀ¸·Î À§ÀÇ Àü¿ªº¯¼ö °ªÀº 0ÀÌ´Ù. ±×·¯³ª ´©°¡ ¾Ë°Ú´Â°¡~?? ºÒÀÇÀÇ »ç°í·Î ÀÎÇØ 0ÀÌ ¾Æ´Ñ ¾²·¹±â°ªÀÌ µé¾î°¥ ¼öµµ ÀÖ´Ù. ¿µÈ­¿¡¼­µµ º¸¸é ±×·¸´Ù. ´Ù Á×ÀºÁÙ ¾Ë¾Ò´ø ÁÖÀΰøÀÌ ¡®²ôÀÀ~¡¯ÇÏ°í »ì¾Æ³ª ¿µÈ­ ³¡³¯¶§±îÁö ¾Ç´çÀ» ±«·ÓÈù´Ù. ÀÌ ¾Ç´ç~ ÀڱⰡ °ÔÀ»·¯¼­ ±×·¸°Ô µÈ °ÍÀ̹ǷΠ¾îµð°¡¼­ Çϼҿ¬µµ ÇÏÁö ¸øÇÑ´Ù. µû¶ó¼­ ¿ì¸® ¿ª½Ã ºÒ½ÖÇÑ ¾Ç´ç²ÃÀÌ µÇÁö ¾Ê±â À§Çؼ­´Â ¾ðÁ¦³ª ¡®È®Àλç»ì¡¯À» È®½ÇÈ÷ ÇØ¾ß ÇÑ´Ù. Ãʱ⿡ µÎ°³ÀÇ ÈÅÇÚµé Àü¿ªº¯¼ö¸¦ 0À¸·Î ÇØ ÁÖÀÚ.

begin
HKbHook := 0;
HShellHook := 0;
end.

ÀÌÁ¦ Å°º¸µå µ¿ÀÛ¿¡ ´ëÇÑ °¥±¸¸®ÁúÀ» Á¤ÀÇÇÏÀÚ. Å°º¸µå¸¦ ¸ÔÅëÀ¸·Î ¸¸µé¾î, Å°º¸µå À§¿¡ ¶ó¸é³²ºñ¸¦ ¿Ã·Á³õ°í ¶ó¸éÀ» ¸Ô´Â °ÍÀÌ ÀÌ °¥±¸¸®ÁúÀÇ ¸ñÀûÀÌ´Ù.

{ °¥±¸¸®Áú ÇÁ·Î½ÃÀú }
function MyKBHook(Code : Integer; wParam : WPARAM; lParam : LPARAM) : LongInt; stdcall;
begin
{ ÆÄÀÏ¿¡ ÀúÀåµÈ ÈÅÇÚµéÀ» Àоî¿Â´Ù. }
if HKbHook = 0 then
ReadData;
{ Code°ªÀÌ 0º¸´Ù Å©°Å³ª °°À»¶§¸¸ }
{ °¥±¸¸®ÁúÀ» ÇÏ´Â °ÍÀÌ ¿ä·É. }
if Code >= 0 then
begin
{ Å°º¸µå¸¦ ¸ù¶¥ ¾È´­¸®°Ô ÇÏÀÚ. }
{ ´ÙÀ½ ÈÅüÀÎÀÌ ºÒ¸®Áö ¾Êµµ·Ï ÇÏ¸é ³¡~! }
Result := Integer(True);
Exit;
end;
Result := CallNextHookEx(HKbHook, Code, wParam, lParam);
end;

{ Å°º¸µå °¥±¸¸® Âï±â }
function HookKB : Boolean;
begin
HKbHook := SetWindowsHookEx( WH_KEYBOARD, MyKBHook, HInstance, 0);
Result := Boolean(HKbHook);
{ ÆÄÀÏ¿¡ ÈÅÇÚµé ¾²±â }
WriteData;
end;

{ Å°º¸µå °¥±¸¸® »Ì±â }
function UnHookKB : Boolean;
begin
{ ÆÄÀÏ¿¡ ÀúÀåµÈ ÈÅÇÚµéÀ» Àоî¿Â´Ù. }
if HKbHook = 0 then
ReadData;
Result := UnhookWindowsHookEx(HKbHook);
end;

°¥±¸¸®¸¦ Âï°í »Ì´Â ¹æ¹ý, ±×¸®°í °¥±¸¸®¸¦ Èֵθ£´Â ¹æ¹ý¿¡ ´ëÇÑ °³³äÀÌ ¾î·ÆÁö ¾Ê°Ô ÀÌÇØ µÇ¾úÀ» °ÍÀÌ´Ù. À̹ø¿£ ¸¶Âù°¡Áö ¹æ¹ýÀ¸·Î ¡®¸Þ¸ðÀ塯ÀÇ ½ÇÇàÀ» ¸ð´ÏÅÍÇÏ´Â °¥±¸¸®¸¦ Çϳª ´õ ¸¸µé¾î º¸ÀÚ.

{ ¼¿ °¥±¸¸®Áú }
function MyShellHook(Code : Integer; wParam : WPARAM; lParam : LPARAM) : LongInt; stdcall;
var
Buff : array [0..255] of Char;
s : String;
begin
{ ÆÄÀÏ¿¡ ÀúÀåµÈ ÈÅÇÚµéÀ» Àоî¿Â´Ù. }
if HShellHook = 0 then
ReadData;
{ À©µµ¿ìÀÇ »ý¼º°ú ¼Ò¸ê¸¸ ±«·ÓÈù´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº µµ¿ò¸»À» ÂüÁ¶ÇÒ °Í. }
if (code = HSHELL_WINDOWCREATED) or
(code = HSHELL_WINDOWDESTROYED) then
begin
{ À©µµ¿ìÀÇ Å¬·¡½º¸íÀ» Àоî¿Â´Ù. Code°ªÀÌ À§ÀÇ µÎ°³ÀÇ °ªÀÏ
°æ¿ì, wParamÀº À©µµ¿ìÀÇ Çڵ鰪ÀÌ µÈ´Ù. }
GetClassName(wParam, Buff, SizeOf(Buff));
{ Ŭ·¡½º¸íÀÌ ³ëÆ®Æеå¶ó¸é ¸Þ½ÃÁö¹Ú½º º¸¿©ÁÖ±â. }
if Buff = 'Notepad' then
begin
if (code = HSHELL_WINDOWCREATED) then
S := '¸Þ¸ðÀåÀÌ ½ÇÇàµÇ´Â±¸¸¸¿ä~!'
else
S := '¸Þ¸ðÀåÀÌ ³¡³µ±¸¸¸¿ä~!';
MessageBox(0,PChar(S),'Hook Message',0);
end;
end;
{ ´ÙÀ½ ÈÅüÀΠȣÃâ }
Result := CallNextHookEx(HShellHook, Code, wParam, lParam);
end;

{ ¼¿ °¥±¸¸® Âï±â }
function HookSHELL : Boolean;
begin
HShellHook := SetWindowsHookEx( WH_SHELL, MyShellHook, HInstance, 0);
Result := Boolean(HShellHook);
{ ÆÄÀÏ¿¡ ÈÅÇÚµé ¾²±â }
WriteData;
end;

{ ¼¿ °¥±¸¸® »Ì±â }
function UnHookSHELL : Boolean;
begin
{ ÆÄÀÏ¿¡ ÀúÀåµÈ ÈÅÇÚµéÀ» Àоî¿Â´Ù. }
if HShellHook = 0 then
ReadData;
Result := UnhookWindowsHookEx(HShellHook);
end;

ÀÌÁ¦, °¥±¸¸®¸¦ Âï°í »Ì´Â ÇÔ¼öµéÀ» ¿ÜºÎ¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Exports ±¸¹®¿¡ Ãß°¡ÇØ ÁÖÀÚ.

Exports
HookKB, HookSHELL, UnHookKB, UnHookSHELL;

ÀÌ°ÍÀ¸·Î ÈÅ¿ë DLLÀÌ ¿Ï¼ºµÇ¾ú´Ù. ÄÄÆÄÀÏ ÇÏ¸é ¡®Hookdll.DLL¡¯ ÆÄÀÏÀÌ »ý±æ °ÍÀÌ´Ù. ÀÌÁ¦ ÀÌ DLLÀ» »ç¿ëÇØ °¥±¸¸®¸¦ Âï°í ÇØÁ¦ÇÏ´Â °£´ÜÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾î º¸ÀÚ. »õ·Î¿î ¾îÇø®ÄÉÀ̼ÇÀ» ½ÃÀÛÇÏ°í Hookdll.DLL¡¯³»ÀÇ ÇÔ¼öµéÀ» ´ÙÀ½°ú °°ÀÌ ÀÓÆ÷Æ® ÇÑ´Ù.

function HookKB : Boolean; external 'HookDll.dll';
function UnHookKB : Boolean; external 'HookDll.dll';
function HookSHELL : Boolean; external 'HookDll.dll';
function UnHookSHELL : Boolean; external 'HookDll.dll';

¹öÆ°À» ³× °³ ¿Ã·Á³õ°í À̸§À» °¢°¢ HookKBBtn, HookShellBtn, UnHookKBBtn, UnHookShellBtn À̶ó°í ÁþÀÚ. ¾ÕÀÇ µÎ ¹öÆ°ÀÇ Enabled ¼Ó¼ºÀ» ²¨ÁÖ°í °¢ ¹öÆ°µéÀÇ OnClickÀ̺¥Æ® ÇÁ·Î½ÃÀú¸¦ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇØ ÁØ´Ù.

procedure TForm1.HookKBBtnClick(Sender: TObject);
begin
if HookKB then
begin
HookKBBtn.Enabled := false;
UnHookKBBtn.Enabled := True;
end;
end;

procedure TForm1.HookShellBtnClick(Sender: TObject);
begin
if HookShell then
begin
HookShellBtn.Enabled := false;
UnHookShellBtn.Enabled := True;
end;
end;

procedure TForm1.UnHookKBBtnClick(Sender: TObject);
begin
if UnHookKB then
begin
HookKBBtn.Enabled := True;
UnHookKBBtn.Enabled := False;
end;
end;

procedure TForm1.UnHookShellBtnClick(Sender: TObject);
begin
if UnHookShell then
begin
HookShellBtn.Enabled := True;
UnHookShellBtn.Enabled := False;
end;
end;

ÀÌÁ¦ ÄÄÆÄÀÏ ÈÄ ½ÇÇàÇØ º¸ÀÚ. Å°º¸µå ÈÅÀ» µ¿ÀÛ½ÃÅ°¸é Å°º¸µå À§¿¡ ¶ó¸é³¿ºñ¸¦ ¿Ã·Á³õ°í ¸ÔÀ» ¼ö ÀÖ´Ù. ¼¿ ÈÅÀ» µ¿ÀÛ½ÃŲ´Ù¸é ¡®¸Þ¸ðÀ塯ÀÌ ½ÇÇàµÇ°í ³¡³¯ ¶§¸¶´Ù ¸Þ½ÃÁö¹Ú½º°¡ ³ªÅ¸³¯ °ÍÀÌ´Ù. ´«Ä¡ ºü¸¥ »ç¶÷Àº Å°º¸µå ÈÅÀ¸·Î Å°º¸µå Àüü¸¦ ¸ÔÅëÀ¸·Î ¸¸µé¾îµµ Alt-Tab À̳ª Ctrl-Alt-Del °°Àº Å°Á¶ÇÕÀÌ ¸·È÷Áö ¾Ê´Â´Ù´Â °ÍÀ» ¹ß°ßÇßÀ» °ÍÀÌ´Ù. À©µµ¿ì´Â ÀÌ·¯ÇÑ ½Ã½ºÅÛ Å°Á¶ÇÕÀ» °¥±¸¸®Áú·ÎºÎÅÍ º¸È£ÇÏ°í Àֱ⠶§¹®Àε¥, ÀÌ°ÍÁ¶Â÷ ¸·¾Æ¹ö¸®±â Èñ¸ÁÇÏ´Â ¿±±âÀû ÇÁ·Î±×·¡¸Ó´Â ÆÁ °Ô½ÃÆÇ¿¡ ¿Ã¶ó¿Í ÀÖ´Â ¿µÀç´ÔÀÇ ±ÛÀ» Âü°í·Î ÇÏÀÚ.


*** ¸ÎÀ¸¸ç~
¸Þ¸ðÀåÀÇ ½ÇÇàÀ» ¸ð´ÏÅÍÇÏ°í Å°º¸µå¸¦ ¸ÔÅëÀ¸·Î ¸¸µå´Â °£´ÜÇÑ °¥±¸¸® ÇÁ·Î±×·¥À» ¸¸µé¾î º¸¾Ò´Ù. °¥±¸¸®¸¦ ¾´´Ù´Â °ÍÀº °ÍÀº ¸Þ½ÃÁö È帧À» ¼Õ¿¡ Áã´Â °ÍÀÌ´Ù. ÀÌÁ¦ Á¶±ÝÀÌ¶óµµ ²¬¶±´ë´Â ¸Þ½ÃÁö°¡ ´«¿¡ ¶è´Ù¸é Àâ¾Æ¼­ Á·Ä¡°í º¼ °ÍÀÌ´Ù. ¼ö Ʋ¸®¸é À§ÀÇ Å°º¸µå ÈÅó·³ Àü´ÞÇÏÁö ¾Ê°í »ðÀ¸·Î ¹¯¾î¹ö¸®´Â Àϵµ Á¾Á¾ ¹ß»ýÇÒ °ÍÀÌ´Ù.

±×·¯´Ï ºÎµð ¸Ó¸®µµ ÀÚÁÖ °¨°í ¹ßµµ ÀÚÁÖ ´Û¾Æ °³ÀÎ À§»ý ¹× Á¤½Å°Ç°­À» ¹Ù·ÎÀâ°í ¸ÇÁ¤½ÅÀ¸·Î ´Ù°¡¿À´Â 21¼¼±â¸¦