Proğram Kullanılmıyorsa şifre ekranı gelsin
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Proğram Kullanılmıyorsa şifre ekranı gelsin
s.a arkadaşlar kolay gelsin. proğramda 15 dk içinde herhangi bir işlem yapılmassa şifre ekranı gelsin istiyorum. yani 15 dk içinde proğram ile ilgili herhangi birşey yapılmassa ben bi form çağıracam ve o form aktif olacak. kullanıcı proğrama döndüğü zaman o formu görecek.formumda baya bi aradım ancak bi sonuca ulaşamadım.kolay gelsin
-
- Üye
- Mesajlar: 38
- Kayıt: 27 Ara 2006 03:13
Şöyle yapabilirsin hocammm..
Programa en son müdehaleyi (giriş birimlerinden klavye, fare) tespit edip bu zamandan itibaren 15 dakikalık bir zaman dilimi tutan bir kod parçası ile iş biter herhalde diye düşünüyorum..
Yani 15 dakika zaman dolunca zaten programa bağlantı kesilecek ve sen ilk müdehalende şifre formun ekrana gelecek..
Programa en son müdehaleyi (giriş birimlerinden klavye, fare) tespit edip bu zamandan itibaren 15 dakikalık bir zaman dilimi tutan bir kod parçası ile iş biter herhalde diye düşünüyorum..
Yani 15 dakika zaman dolunca zaten programa bağlantı kesilecek ve sen ilk müdehalende şifre formun ekrana gelecek..
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.
***********************************
Selam,
Windows Hooklarını kullanarak yapabilirsin diye düşünüyorum. Yanlış hatırlamıyorsam klavye ve mouse hooklarında, mesaj hedef bileşene gitmeden önce yakalanıyor ve hatta isterseniz iptal bile edebiliyorsunuz. Bundan sonra yapılması gereken sadece hedef bileşenin (ki size aslında Handle bilgisi geliyor) sizin programın bileşeni olup olmadığını tespit etmek. Eğer sizin bileşene aitse o zaman Timer'ı sıfırlarsınız. Bu arada buradaki timer hook işleminin yapıldığı DLL'de tanımlanırsa, ana programda da çok fazla değişiklik yapmaya gerek kalmaz. Timer tetiklendiği zaman da aslında sadece ana pencereye bir Windows Message gönderir. Elbette bu sizin tanımladığınız bir mesaj olur.
Bu sistemin iki tane sakıncalı durumu var.
1. Bazı antivirüs ve güvenlik programları sizin programınızı şüpheli olarak işaretleyebilir. Sanırım Kaspersky'ın böyle bir güvenlik kontrolü vardı.
2. Klavye veya mouse mesajının gönderildiği bileşenin sizin programa ait bir bileşen olduğunu tespit etmek biraz sıkıntılı olabilir. Ama tahminimce Windows API'lerinde bu işe yarayacak bir API mutlaka vardır. En kötü ihtimalle recursive bir fonksiyon ile de çözebilirsiniz.
En büyük avantajı ise bu DLL'in sizin uygulamanızdan bağımsız olması. Yani bu DLL daha sonra istediğiniz her uygulamanıza entegre edebilirsiniz. Yapmanız gereken sadece DLL'in içindeki Hook ve UnHook fonksiyonlarını kullanmak ve DLL'in göndereceği Windows mesajını yakalamak.
Yukarıda yazdığım sistemin kurulması için bilmeniz gereken fonksiyonların neredeyse hepsinin forumda bir örneği var sanırım. Bu yüzden biraz Windows Hooklarını, biraz Windows Mesaj sistemini, biraz da DLL içeriğini araştırırsanız, 2 gün içinde DLL'i hazırlarsınız diye tahmin ediyorum.
Kolay gelsin,
Bahadır Alkaç
Windows Hooklarını kullanarak yapabilirsin diye düşünüyorum. Yanlış hatırlamıyorsam klavye ve mouse hooklarında, mesaj hedef bileşene gitmeden önce yakalanıyor ve hatta isterseniz iptal bile edebiliyorsunuz. Bundan sonra yapılması gereken sadece hedef bileşenin (ki size aslında Handle bilgisi geliyor) sizin programın bileşeni olup olmadığını tespit etmek. Eğer sizin bileşene aitse o zaman Timer'ı sıfırlarsınız. Bu arada buradaki timer hook işleminin yapıldığı DLL'de tanımlanırsa, ana programda da çok fazla değişiklik yapmaya gerek kalmaz. Timer tetiklendiği zaman da aslında sadece ana pencereye bir Windows Message gönderir. Elbette bu sizin tanımladığınız bir mesaj olur.
Bu sistemin iki tane sakıncalı durumu var.
1. Bazı antivirüs ve güvenlik programları sizin programınızı şüpheli olarak işaretleyebilir. Sanırım Kaspersky'ın böyle bir güvenlik kontrolü vardı.
2. Klavye veya mouse mesajının gönderildiği bileşenin sizin programa ait bir bileşen olduğunu tespit etmek biraz sıkıntılı olabilir. Ama tahminimce Windows API'lerinde bu işe yarayacak bir API mutlaka vardır. En kötü ihtimalle recursive bir fonksiyon ile de çözebilirsiniz.
En büyük avantajı ise bu DLL'in sizin uygulamanızdan bağımsız olması. Yani bu DLL daha sonra istediğiniz her uygulamanıza entegre edebilirsiniz. Yapmanız gereken sadece DLL'in içindeki Hook ve UnHook fonksiyonlarını kullanmak ve DLL'in göndereceği Windows mesajını yakalamak.
Yukarıda yazdığım sistemin kurulması için bilmeniz gereken fonksiyonların neredeyse hepsinin forumda bir örneği var sanırım. Bu yüzden biraz Windows Hooklarını, biraz Windows Mesaj sistemini, biraz da DLL içeriğini araştırırsanız, 2 gün içinde DLL'i hazırlarsınız diye tahmin ediyorum.
Kolay gelsin,
Bahadır Alkaç
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Hook türü araçlar genel olarak güvenlik araçları tarafından zararlı olarak algılanabilir. Bu proje içerisinden basit düzeyde belki olabilir. Benim aklıma ilk gelen şey ise projenin ana formunun üzerine bir adet TApplicationEvents (->Additional) bileşeni yerleştirip onMessage olayına gerekli kod yazılırsa belki bir şeyler olabilir.
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
AppEvnts;
type
TForm1 = class(TForm)
ApplicationEvents1: TApplicationEvents;
procedure ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
SonSure:Cardinal;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
case Msg.message of
WM_KEYDOWN,WM_KEYUP,WM_NCMOUSEMOVE,WM_NCLBUTTONDOWN,WM_NCRBUTTONDOWN,
WM_NCLBUTTONUP,WM_NCRBUTTONUP:SonSure:=GetTickCount;
end;
if {şifre ekranında değilse and} (SonSure-GetTickCount>300000) {5(dk)*60(sn)*1000(milisn)=300000} then //Şifre Ekranına geç
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SonSure:=GetTickCount;
end;
end.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .