Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

alle Tastenschläge abfragen?

Nikon / 8 Antworten / Baumansicht Nickles

Hallo, ich hab mal wieder ein Problem:


Ich möchte mit C# einen Keylogger entwickeln, der alle tastenschläge auf die Tastatur empfangen soll und speichert.


Wie frage ich jedoch Tastenschläge ab, die nicht meine Applikation betreffen?


Ach ja und noch was:


Den Keylogger verwende ich nicht dazu, Kennwörter anderer Leute zu loggen, sondern zu überprüfen, ob in meiner Abwesenheit jemand meinen Pc benutzt.

Nikon
bei Antwort benachrichtigen
Gurus Nikon „alle Tastenschläge abfragen?“
Optionen

wie dein Beitrag auf OT (http://www.nickles.de/static_cache/537679580.html) zeigt, würde ich Dir die mitname vom Stromkabel empfehlen..


MfG
Gurus

bei Antwort benachrichtigen
thomas woelfer Nikon „alle Tastenschläge abfragen?“
Optionen

Nikon,

man kann in gewissem umfang die aktivitaeten auf einem windows pc mitprotokollieren. dazu gibt es die CBT (computer based training) api.

ich wuerde aber nahezu jede wette machen, das es dafuer keine managed wrapper gibt die du von c# aus benutzen kannst; du wirst also auf interop zurueckgreifen muessen.

wenn es dir nur darum geht das niemand deinen pc in deiner abwesenheit benutzt, dann benutze xp,2000 oder 2003 mit ntfs und vernueftigen accounts, und melde dich von pc ab wenn du dich entfernst. das ist sicherlich einfacher und sinnvoller als einen keylogger zu programmieren.

WM_FYI

this posting contains no tpyos.
bei Antwort benachrichtigen
vergisses Nikon „alle Tastenschläge abfragen?“
Optionen

Hi,

grundsätzlich kann ich mich nur Thomas´ Argumentation anschließen.

Wenn Du aber unbedingt protokollieren willst, was so alles
auf Deinem Rechner abgeht, solltest Du Dir den hook Mechanismus mal ansehen.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_hooks32.asp

Insbesonders WH_JOURNALRECORD und /oder WH_KEYBOARD
und WH_MOUSE sollten alles bieten, was Du dafür brauchst.

Das Ganze ist allerdings für C/C++ gedacht...
Gruss, vergisses

bei Antwort benachrichtigen
vergisses Nikon „alle Tastenschläge abfragen?“
Optionen

Kleine Anmerkung am Rande.
Ich schlage nicht auf die Tastatur, sondern tippe....

bei Antwort benachrichtigen
vergisses Nikon „alle Tastenschläge abfragen?“
Optionen

Ich vergaß zu erwähnen, daß sich die vom Thomas genannte CBT API
genau dieser Hook Mechanismen bedient.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Hooks/HookReference/HookFunctions/CBTProc.asp

Falls eine Verwendung von CBT möglich ist, solltest Du diese vorziehen,
da das wesentlich komfortabler ist.

Gruss, vergisses

bei Antwort benachrichtigen
PaoloP Nikon „alle Tastenschläge abfragen?“
Optionen

also beim win32api gab es die funktion GetAsyncKeyState.
damit hast den direkten status der tastatur eingefangen noch vor windows selbst.
ob dein programm da im hintergrund läuft ist dann wurscht.
die meisten alten(meist schädlichen) keylogger funktionierten so.
Wie gesagt wie du vom .NET Framework und C# zu den alten Api-Funktionen
kommst weiss ich garnicht aber wenn das gehen sollte ist die oben genannte funktion dein kandidat. ich möchte anmerken das es sicher andere möglichkeiten gibt festzustellen ob jemand deinen rechner benutzt es sei denn du willst auch wissen was er denn nun ganz genau gemacht oder besser getippt hat.

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
vergisses Nikon „alle Tastenschläge abfragen?“
Optionen

Hier ein Link zu einem Keylogger mit GetAsyncKeyState.
http://www.c-worker.ch/api/keylogger.cpp


Ich frage mich allerdings, ob dieser Keylogger auch über Prozess-
und Usergrenzen funktioniert.
Wenn ich mal Zeit habe, werde ich mal einen kleinen
Service mit diesem Keylogger bauen, mal sehen, was passiert.

Gruss, vergisses

bei Antwort benachrichtigen
klendatho Nikon „alle Tastenschläge abfragen?“
Optionen

Es ist sogar recht einfach einen Key Logger in C# zu schreiben. Mit diesem Code alleine kann man natürlich nicht viel anfangen. Etwas verfeinern muss man das Programm noch, aber es soll ja nur die prinzipielle Vorgehensweise zeigen:

using System;
using System.IO;
using System.Runtime.InteropServices;

class KeyLogger
{
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern short GetKeyState (int nVirtKey);

public static void Main()
{
int x = 0;
while (true)
{
for (x = 1;x {
Console.WriteLine(GetKeyState(x));
}
}
}
}

bei Antwort benachrichtigen