Seite 1 von 6

Globaler KeyboardHook zur kompletten Tastaturabfrage

Verfasst: 29.12.2008 15:46
von orderinchaos
Hi Zusammen,

War schon lange nicht mehr hier auf dem Board, aber ich benötige wieder einemal eure Hilfe.

Es geht um einen globalen KeyboardHook zum kompletten Tastataturabfrage. Das Ziel ist ein Keylogger und das möchte ich auch gleich sagen, bevor irgendwelche Fragen auftauchen.

Schon seit langer Zeit möchte ich es endlich schaffen einen selbst zu programmieren oder wenigstens zu verstehen wie er funktioniert. Meine kläglichen Versuche mit getasynckeystate_ sind gescheitert oder erfüllen den Zweck nur bedingt...

Deshalb möchte ich mich nun mit einem Hook versuchen, jedoch habe ich, trotz Studieren von den KeyboardHook- Codes hier auf dem Board, keine Ahnung wie ein solcher Funktioniert.

Ich versichere hiermit, dass mein Keylogger Niemandem einen Schaden anrichten wird, sondern lediglich meinem Wissenshunger dienen!!

Ist es möglich, dass mir hier jemand ein Code- Beispiel zur Verfügung stellt, welches einen KeyBoardHook für die komplette Tastaturabfrage bereitstellt?

Versteht mich nicht falsch: Ich möchte eigentlich nicht, dass mir hier jemand die Arbeit macht, aber selbst schaff ich es einfach nicht und mit einem Code- Beispiel und eventuell entsprechenden Kommentaren, sind die Chancen gut, dass auch ich verstehe wie das abgeht.

Natürlich nur wenn das nicht gegen die Board- Regeln verstösst! Es wäre mir aber echt eine unheimlich grosse Hilfe!

Schon Mal besten Dank für alle Antworten!

- OrderInChaos -

Re: Globaler KeyboardHook zur kompletten Tastaturabfrage

Verfasst: 29.12.2008 16:49
von Fluid Byte
orderinchaos hat geschrieben:Ich versichere hiermit, dass mein Keylogger Niemandem einen Schaden anrichten wird, sondern lediglich meinem Wissenshunger dienen!!
:lol:
orderinchaos hat geschrieben:Ist es möglich, dass mir hier jemand ein Code- Beispiel zur Verfügung stellt, welches einen KeyBoardHook für die komplette Tastaturabfrage bereitstellt?
:lol::lol:
orderinchaos hat geschrieben:Versteht mich nicht falsch: Ich möchte eigentlich nicht, dass mir hier jemand die Arbeit macht, ...
Was dich nicht abhält es trotzdem zu versuchen. :lol::lol::lol:
orderinchaos hat geschrieben:Schon Mal besten Dank für alle Antworten!
Dafür nicht! :lol::lol::lol::lol:

Re: Globaler KeyboardHook zur kompletten Tastaturabfrage

Verfasst: 29.12.2008 16:58
von Kiffi
orderinchaos hat geschrieben:Ist es möglich, dass mir hier jemand ein Code- Beispiel zur Verfügung stellt, welches einen KeyBoardHook für die komplette Tastaturabfrage bereitstellt?
das Problem wird wohl sein, dass dieser Code nicht viel anders sein wird
als die, die hier und im englischen Forum zahlreich vorhanden sind.

Und diese Codes verstehst Du ja lt. Deinen Ausführungen nicht.

Wo können wir Dir denn konkret helfen?

Grüße ... Kiffi

Verfasst: 29.12.2008 19:25
von orderinchaos
okay, konkret: ich verstehe nicht wie ich diesen code

Code: Alles auswählen

Procedure.l myKeyboardHook(nCode, wParam, *p.KBDLLHOOKSTRUCT)
   If nCode = #HC_ACTION
      If wParam = #WM_KEYDOWN Or wParam = #WM_SYSKEYDOWN Or wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP
         #LLKHF_ALTDOWN = $20
         If *p\vkCode = #VK_LWIN Or *p\vkCode = #VK_RWIN
            ProcedureReturn 1
         EndIf
       EndIf
    EndIf
ProcedureReturn CallNextHookEx_(0, nCode, wParam, *p)
EndProcedure
so umbauen kann, dass er mir das zeichen (ascii oder änlich) zurückliefert... es soll ja genau das zeichen ausgegeben werden, welches auch ein textprogramm empfangen würde, wenn die entsprechende tastenkombination (oder eben nur taste) gedrückt wurde. und da komm ich nicht drauf...

kann mir da einer weiterhelfen?

danke schon mal :mrgreen:

Verfasst: 29.12.2008 19:48
von Kaeru Gaman
Tasten sind keine Buchstaben.

wenn du die Taste #VK_F drückst, kommt ein "F" oder ein "f" als Text an,
je nachdem ob gleichzeitig #VK_SHIFT gedrückt ist oder nicht.
wenn du #VK_F1 drückst, kommt gar kein Zeichen im Text an.

du müßtest dir also eine Routine basteln, die Tastatureingaben in Text übersetzt.


... und wozu soll das gut sein?

Verfasst: 29.12.2008 19:54
von orderinchaos
richtig, aber ich verstehe nicht wie ich überhaupt an die tastatureingaben komme.... ich habs mal per getasynckeystate_ versucht, aber auf vielen boards werden keyboardhooks empfohlen... und da hakt es bei mir...

wozu das gut sein soll? ich denk mal, dass das gebraucht wird um einen keylogger zu realisieren, oder seh ich das falsch? :freak:

Verfasst: 29.12.2008 20:04
von Kaeru Gaman
ein keylogger ist kein charlogger...


> wie ich überhaupt an die tastatureingaben komme.... ich habs mal per getasynckeystate_ versucht
öh.. ja und? das ist es doch.
> aber auf vielen boards werden keyboardhooks empfohlen
und wo soll der Unterschied sein?

wie Kiffi sagte
> das Problem wird wohl sein, dass dieser Code nicht viel anders sein wird
> als die, die hier und im englischen Forum zahlreich vorhanden sind.

Verfasst: 29.12.2008 20:14
von orderinchaos
dem zu folge ist getasynckeystate_ bestandteil eines keyboardhooks?

Verfasst: 29.12.2008 22:25
von orderinchaos
nun gut, kann mir einer sagen weshalb das nicht geht :

Code: Alles auswählen

Procedure.l myKeyboardHook(nCode, wParam, *p.KBDLLHOOKSTRUCT)
  If nCode = #HC_ACTION
    If wParam = #WM_KEYDOWN Or wParam = #WM_SYSKEYDOWN Or wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP
      #LLKHF_ALTDOWN = $20
      If *p\vkCode = #VK_A
        Debug "A"
        ProcedureReturn 1
      ElseIf *p\vkCode = #VK_B
        Debug "B"
        ProcedureReturn 1
      ElseIf *p\vkCode = #VK_C
        Debug "C"
        ProcedureReturn 1
      ElseIf *p\vkCode = #VK_ESCAPE
        Exit = 1
        ProcedureReturn 1
      EndIf
    EndIf
  EndIf
  ProcedureReturn CallNextHookEx_(0, nCode, wParam, *p)
EndProcedure
thx

Verfasst: 29.12.2008 22:58
von Kiffi
orderinchaos hat geschrieben:nun gut, kann mir einer sagen weshalb das nicht geht :
was heißt 'nicht geht'? Gibt es einen Programmfehler oder werden die
Ausgaben nicht via Debug geschrieben?

Ich würde testweise mal ein

Code: Alles auswählen

Debug *p\vkCode
direkt unter

Code: Alles auswählen

If wParam = #WM_KEYDOWN ...
einfügen und dann schauen, was dort ausgegeben wird.

Grüße ... Kiffi