65.9K
CodeProject 正在变化。 阅读更多。
Home

Pedrams Elite Keylogger

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.97/5 (40投票s)

2005年6月22日

4分钟阅读

viewsIcon

154339

downloadIcon

10557

记录任何按键和/或阻止按键/按键组合

下载源代码
下载演示项目
Sample Image - P-E-K.jpg

注意:我打算制作另一个版本,除了修复bug和使当前代码更可靠之外,我还想添加新功能。您希望在按键记录器中看到哪些功能,或者如何扩展此程序?(请发送电子邮件至本文末尾的任一邮箱地址)

引言

此程序能够随时捕获任何按键。此程序还可以根据偏好进行自定义。我创建了一个用户界面,您可以在其中更改选项和设置。我还包含了一个功能,可以阻止任何按下的按键/按键组合。

使用代码

所有与键盘记录/阻止相关的代码都在名为Keyboard.vb的模块中。首次启动程序时,您可能会收到一个错误,提示“Block.txt”正在使用或找不到“Settings.Set”,请忽略它们,下次启动程序时应该会修复。要看到用户界面,您需要按F12退出隐形模式,然后双击通知区域(系统托盘)中出现的通知图标。

函数

下面是重要功能的列表及其用法

IsHooked - 阻止按键

(- Public Function IsHooked(ByRef Hookstruct As KBDLLHOOKSTRUCT) As Boolean -)

此函数用于阻止已按下的按键/按键组合,要阻止一个按键,您只需输入“Return True”

Public Function IsHooked(ByRef Hookstruct As KBDLLHOOKSTRUCT) As Boolean 
Return True
End Sub

但是,这会阻止任何按下的按键,所以为了只阻止指定的按键,您应该使用Hookstruct.vkcode和GetAsyncKeyState()函数

Public Function IsHooked(ByRef Hookstruct As KBDLLHOOKSTRUCT) As Boolean 
If Hookstruct.vkcode = 13 Then
Return True
End If
Return False
End Sub

这将阻止“Enter”键,因为Enter键的键码是13。可以使用Keys.Enter或VK_ENTER代替13:Hookstruct.vkcode = 13 > Hookstruct.vkcode = Keys.Enter OR Hookstruct.vkcode = VK_ENTER

要阻止按键组合,应使用GetAsyncKeyState()函数

Public Function IsHooked(ByRef Hookstruct As KBDLLHOOKSTRUCT) As Boolean 
If GetAsyncKeyState(VK_MENU) and Hookstruct.vkcode = VK_TAB Then
Return True
End If
Return False
End Sub

这将阻止ALT + TAB按键组合。它首先检查ALT键是否按下,然后检查TAB键是否被按下。这也意味着ALT和TAB键仍然可以使用,但不能一起使用。

HookKeyboard & KeyboardCallback - 记录按键

(- Public Sub HookKeyboard() -)
(- Public Function KeyboardCallback(ByVal Code As Integer, _
      ByVal wParam As Integer, _
      ByRef lParam As KBDLLHOOKSTRUCT) As Integer -)

这两个函数用于记录每一次按下的按键,首先HookKeyboard在主窗体(Form1.vb)的加载事件中被调用,并通过一个计时器,“挂钩”键盘,使程序能够记录每一次按下的按键。它通过首先在系统之前检索到每一次按下的按键来实现。HookKeyboard然后调用KeyboardCallback,它确定按下了哪个键。wParam变量用于检查是否按下了任何键。

If wParam = WM_KEYDOWN Then

一旦我们知道一个按键被按下了,我们就必须确定是哪个键。这部分很简单

keycode = lParam.vkCode

lParam.vkCode 包含被按下按键的键码。

在我的程序中,我使用这些函数来收集所有按下的按键,然后在用户切换程序时将其写入日志文件。

GetForegroundWindow, GetWindowTextLength, GetWindowText - 记录按键

(- Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Integer, ByVal lpString As String, ByVal cch As Integer) As Integer -)
(- Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Integer) As Integer -)
(- Private Declare Function GetForegroundWindow Lib "user32" () As Integer -)

在Timer1中,我使用这些函数来获取用户当前活动的程序标题。计时器会建立一个已按下按键的列表(KeysList),当用户切换到另一个程序时,它会将程序标题和按键写入日志文件。

If title <> last And last <> "" Then
    writekeys()
End If

它将窗口标题记录到一个变量中,并将其与新窗口标题进行比较,如果它们相同,则表示用户仍然激活同一个程序,如果它们不同,则表示用户已切换窗口,按键将被写入日志文件。

CreateDefaultSI - 设置

(- Public Function CreateDefaultSI() -)

这是一个更简单的函数,在找不到设置文件或文件损坏时调用。它会删除旧的设置文件(如果存在),然后用一个具有默认设置的新文件替换它。

本文档中没有审查大部分函数,我只介绍了主要的函数,如果您有任何问题或需要关于代码的帮助,请发送电子邮件至本文末尾列出的任一邮箱。

此程序由Pedram Emrouznejad创建(p3pedram@hotmail.com, pthree2004@aol.com, pedramscomputer3@aol.com
请阅读“自述文件”(Read Me!!!.txt)(它解释了很多内容)此程序并非用于恶意活动。请自行承担使用此程序的风险!
在使用此代码时,请保留所有署名,并引用我及我的电子邮件。

© . All rights reserved.