PDA

Tam Sürümünü Görmek İçin : HOOK çalışan programlar #KAYNAK#


hmustak
14/11/2002, 17:52
Program systemtray'e yerleşiyor. Ve arka planda çalışıyor. Yani HOOK dediğimiz olayı yapıyor. Çok farklı (?!), faydalı amaçlar için kullanılabilir...




//***************************
// Unit1.dfm; dosyasının içeriği
//***************************

unit Unit1;

interface

uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, ExtCtrls, ShellAPI, Menus;

const WM_MINIMALIZE = WM_USER + 1
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Show1: TMenuItem;
Hide1: TMenuItem;
Quit1: TMenuItem;

procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Show1Click(Sender: TObject);
procedure Hide1Click(Sender: TObject);
procedure Quit1Click(Sender: TObject);
private
FIconData : TNotifyIconData;
public
procedure WMMinimalize(var Message : TMessage); message WM_MINIMALIZE;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var i : Integer;
begin
with FIconData do
begin
cbSize := SizeOf(FIconData);
Wnd := Self.Handle;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
hIcon := Application.Icon.Handle;
uCallbackMessage := WM_MINIMALIZE; szTip := 'Hakan MÜŞTAK';
end;
Shell_NotifyIcon(NIM_ADD, @FIconData);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @FIconData);
end;

procedure TForm1.WMMinimalize(var Message : TMessage);
var p : TPoint;
begin
case Message.LParam of
WM_RBUTTONUP: begin
GetCursorPos(p);
PopupMenu1.Popup(p.x, p.y);
end;
end;
end;

procedure TForm1.Show1Click(Sender: TObject);
begin
Form1.Visible := TRUE;
ShowWindow(Application.Handle, SW_HIDE);
end;

procedure TForm1.Hide1Click(Sender: TObject);
begin
Self.Visible := FALSE;
end;

procedure TForm1.Quit1Click(Sender: TObject);
begin
Application.Terminate;
end;

end.


//***************************
// Project1.dpr; dosyasının içeriği
//***************************

program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.ShowMainForm := FALSE;
Application.Run;
end.


hmustak
14/11/2002, 17:57
Kodlar sadece HOOK örneğidir. İllegal olabilecek herhangi kod yokdur. Sadece Geri planda çalışması söz konusudur.

Kolay gelsin...

Volkan Uzun
15/11/2002, 15:11
hook ne demektir ? ve bu kodlarin hook ile alakasini anlamama yardimci olabilirmisiniz ?
eger windows platformundaki hooklardan bahsediyorsak , bu kodların tam olarak neye hook attigini aciklayabilirmisiniz ?
bence hooktan ziyade arka planda calisan bir uygulama gibi geldi
:uff:

hmustak
15/11/2002, 16:52
ewet ewet, bende onu kastederek yazdım. Geri planda (bi çeşit spyware) olarak çalışma tekniği. Yanlış yazdıysam açıklama biliyorsam düzeltin lütfen, ama mantığı dediğiniz gibi...

Volkan Uzun
16/11/2002, 00:14
bu bence spy programda pek değil :)
alt yapisi olabilir, hook hiç değil çünkü hiçbir sistem kaynağına hook atmıyor.
hookda mantık : bir sistem kaynağına seri veya paralel hook atip engellemek veya monitor etmektir.
en cok hook atılan kaynaklar, klavye ( bunu genelde klavyede hangi tusa basildigini anlamak icin keylogger programlari kullanır), veya winsock.dll dir. buda port sniff etmek için kullanılır.
senin yazdigin programda hook yok, sadece arka planda gizli calismak var hiçbirşeyi monitor etmiyor sanırım

hmustak
16/11/2002, 17:22
sitede legal olarak bukadar yazabiliyorum, ama

SetWindowsHookEx(int,HOOKPROC,HINSTANCE,DWORD);

apisini düzenleyerek, ciddi hook yazılımları yapılabilir. Hatta email at, bende Thread destekSİZ bir örnek kod mevcut, göndereyim. Fikir alışverişinde bulunuruz. Yazdığım bir CacheCapture var. Bazı sistemlerde çalıştıramıyorum. Kodlarınıda gönderebilirim :)

arrrtı,
madem iyisin, neden sende eklemiyosun bişiler :) Hadi bekliyoruz...

Volkan Uzun
17/11/2002, 00:29
burada sansüre uğramayacaksa,
bir zamanlar bir yerlerden cektiğim biraz modify ettiğim, klavyeden basilan tuslari bir dosyaya yazan program, bilincli olarak bırakilmis bazı hatalarsa, gönderiyim.
kod visual c++ ile yazılmıs. ve her tusa basimi dosyaya yaqziyor ama hata kontrolleri zayıf.

hmustak
17/11/2002, 00:43
yok yok, foruma yazmamız kanuni olarakda bizi sorumluluk altına sokar. Bende de bu mantıkla çalışan, hatta üzerinde uğraşılırsa screenshotda alabilen bi kaynak mevcut. İsteyenlere mail ile ulaştırabilirim.Tabi isteyen derken bunu LAME amaçları için kullanmayı düşünen değil, kodunu ve kendini geliştirmeyi düşünen arkadaşlara...

@sanal_programcı
Dostum sende bu kriterlerde kodunu paylaş. Hatta başka kodlarla da sitede bulunmanı isterim (şahsen)

email : hmustak@ceviz.net

Volkan Uzun
17/11/2002, 01:14
ok bende pseudo code ile bir klavye hook u yaziyim. sakincasi olursa sansurlersiniz.
----
oncelikle focus bizim üstümüzde değilkende klavye tuslarini yakalamak istediğimiz için, global bir hook yaratmaliyiz. bunun için bir hook server dll yaratilmasi gerekiyor.
. bu dll de bir adet callback fonksiyonun olmasi gerekir.
ara not : callback : windows isletim sisteminin, bir event olustugunda otomatik cağırdığı fonksiyon. yani programinizin parcas oldugu halde biz değil windows cagirir bu fonksiyonu.
geri dönelim, dlldeki bu callback fonksiyonunun prototipi soyle olmali : LRESULT CALLBACK myCallBack(int nCode, WPARAM wParam, LPARAM lParam ). win32 programlama yapanlara cok yakın gelecek bir fonksiyon :O)
1- bu callback in icinde, aslinda bize parametreler WM_KEYDOWN gibi gelir. bunu arastirabilirsiniz
2- fonsiyon icindeki, wParam parametresini kullanarak, tusu alip bir dosyaya yazmaliyiz. return ederkende cok onemli : diger hookların calismasi icin bir api cagirmaliyiz
3- dll'imizde bir ader, hookumuzu install eden fonksiyon olmali.
bu fonksiyon sadece SetWindowsHookEx apisini cagirmali
4- tabii birde hookmuzu uninstall eden fonksiyon olmali :)

aslinda mantık olarak bu kadar basit.
hookda dikkat edilmesi gerek noktalarda:
mutlaka sonraki hooklara kontrolün gecmesini sağlamaliyiz.
2 kez üst üste hookumuz install edilmek istenirse önlem almaliyiz

-------
eehh bu kadar. sansür yersede no problem

hmustak
17/11/2002, 10:33
ellerine sağlık... :)
Mantık güzel, geliştirilmesi lazım...

-------
Mailleşelim...

sadettinpolat
09/08/2004, 14:32
bu mesajı Sıkça Sorulan Sorulara Cevaplar bölümünde gördüm.

benim bu sansür meselesine kafam takıldı. klavyeye hook atan bi programın kaynak kodları neden sansüre uğrasın ki ? bu tamamen kullanıcının kodu nasıl kullanacağı ile ilgili. her kod kötü amaçlar için kullanılabilir. o zaman tüm programlama bölümlerini kaldıralım di mi ? :garip:

Euclides
09/08/2004, 19:56
Burada yazılanlar sansüre girebilecek şeyler değill
Sizin söylediğiniz hook yöntemleri Win32SDK'de MSDN'de uzun uzun anlatılıyor zaten...
undocumented olsa bi derece...

Volkan Uzun
09/08/2004, 20:24
o yazdiklarimi daha sonra sansurden gecirmistim, ilk basta yazdigim zamaninda yaptigim birisi hotmail yazana dek bekleyip hotmail yazdiktan sonra herseyi loglayan koddu.
daha sonra yazdigim seyi duzeltip oyle kopyalamistim
bunada aciklama getirttiniz ya helal olsun

sadettinpolat
09/08/2004, 21:06
ok bende pseudo code ile bir klavye hook u yaziyim. sakincasi olursa sansurlersiniz.

-------
eehh bu kadar. sansür yersede no problem

ben bu cümlelere takılarak sormuştum.

burda bahsi geçen bi klavye hooku. bunu kim neden sansürlesin?

sherlockholmes
13/09/2005, 13:14
arkadaşlar selam ,

klavye hook işlemine dair örnekler arıyorum , sizdeki örnekleri sherlockholmes_1980@hotmail.com adresine gönderbilir misiniz?

kolay gelsin.

hmustak , size mail gönderdim ama ulaştırılamadı.

burhanmt
14/09/2005, 20:15
http://forum.ceviz.net/showthread.php?t=20041&highlight=hook (http://forum.ceviz.net/showthread.php?t=2041&highlight=hook)

adresinde hook ile ilgili bir keylogger örneği verilmiştir.