Home » , » Contoh Implementasi Hooking

Contoh Implementasi Hooking

Contoh Implementasi Hooking

Contoh Implementasi Hooking
Untuk penjelasan tentang Hooking, baca di artikel sebelumnya tentang 

"Manipulasi Sistem Komputer Teknik Hooking"

Berikut Ini merupakan salah satu Contoh Implementasi Hooking yang bertujuan untuk mencegah window "dihancurkan" atau ditutup pada notepad. 
Yang dibutuhkan adalah DLL yang berisi kode untuk menangkap pesan untuk "menghancurkan" window pada notepad.
Berikut Codenya:
uses
   Windows,
   Messages,
   sysutils;
type
   THookRec = record
   hTMHook : HHOOK;
   hTMWnd : KWND;
   oldProc : Integer;
end;
var
   map : DWord;
   buf : ^THookRec;
funcion PROC(nCode: Integer; wp: wParam; lp: lParam) : LongInt; stdcall;
begin
   if (nCode >= HC_ACTION) then
      if (nCode = HCBT_DESTROYWND) then 
      begin
          Result : =1;
          exit;
       end;
    Result : = CallNextHookEx(buf^.hTMHook, nCode, wp, lp);
end;

// sets up hook
function SetHook: Boolean; stdcall; export;
var
   startwnd: HWND;
begin
   try
      Result : false;
      if (not assigned (buf)) then
      begin
         map := CreateFileMapping(DWord(-1), nil, PAGE_READWRITE, 0, SizeOf(THookRec), 'Hook');
         buf := MapViewOfFile(map, FILE_MAP_ALL_ACCESS, 0, 0, 0);
         startwnd := FindWindow('Untiled - Notepad', nil);
         buf^.hTMWnd := startwnd;
         buf^.hTMHook := SetWindowsHookEx(WH_CBT, @PROC, hInstance, GetWindowThreadProcessId(startwnd, nil));
         result := true;
         end;
      except
         result := false;
         MessageBox(0, 'error in SetHook','error', MB_OK);
       end;

//removes hook
function RemoveHook: Bolean; stdcall; export;
begin
  result := false;
  if (assigned(buf)) then
  begin
    if (buf^.hTMHook <> 0) then 
        UnhookWindowsHookEx(buf^.hTMHook);
    buf^.hTMHook := 0;
    UnmapViewOfFile(buf);
    buf := nil;
    result := true;
  end;
end;

//DLL entry point
procedure DllEntry(dwReason: DWord);
begin
  Case dwReason of
      DLL_PROCESS_ATTACK:
        begin
         if (not assigned(buf)) then
           begin
              map := OpenFileMapping(FILE_MAP_ALL_ACCESS, false, 'Hook');
              buf := MapViewOfFile(map, FILE_MAP_ALL_ACCESS, 0, 0, 0);
              closeHandle(map);
              map := 0;
            end;
          end;
        DLL_PROCESS_DETACH:
          begin
            UnmapViewOfFile(buf);
            buf := nil;
           end;
        end;
  end;
  exports
     SetHook,
     RemoveHook;

//main
begin
   DisableThreadLibraryCalls(hInstance);
   DllProc := @DllEntry;
   DllEntry(DLL_PROCESS_ATTACK):
end.

simpan file tersebut ke dalam file DLL. misalnya "project2.dll"

Kemudian, buatlah program untuk memanggil fungsi yang terdapat pada DLL.
CODENYA:
procedure SetHook; external 'project2.dll';
procedure RemoveHook; external 'project2.dll';
implementation
{$R * dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
   SetHook;
end;
Procedure TForm1.Button2Click(Sender: TObject);
begin
   RemoveHook;
end;
end.

Selesai, Jalankan Notepad dan Klik tombol pertama. Kemudian, klik Exit(X) atau melalui menu File -> Exit untuk menutup Notepad. Hasilnya??? Notepad tidakan akan dapat ditutup.

Kesimpulan:
Bermain-main dengan Hooking Bukanlah hal yang mudah untuk diterapkan. Salah sedikit dalam melakukan Hooking dapat berakibat sistem pada aplikasi atau sistem operasi menjadi tidak stabil hingga mengalami crash. Namun, hooking dapat bermanfaat dalam pengembangan software hingga menjadi keamanan sistem.

Baca Juga

"Manipilasi Sistem Komputer Teknik Hooking"

       
 Lebih lanjut baca di:

MICROSOFT

CODEPROJECT 
WIKIMEDIA

Semoga bermanfaat

mozalora

6 comments:

  1. mantap tu gan bru thu ane gan cra krja gitu :D
    http://ariharyadiadi.blogspot.com

    ReplyDelete
  2. Resikonya juga lumayan "Salah sedikit dalam melakukan Hooking dapat berakibat sistem pada aplikasi atau sistem operasi menjadi tidak stabil hingga mengalami crash".Makasih infonya sob.

    ReplyDelete
  3. di atas di jelaskan kodingnya di ketik dan dijalankan pada notepad

    ReplyDelete