论坛首页 安全工具分享区 阅读主题

[求助]电脑端企业微信剪切板WeWork Message格式数据序列化和反序列化算法

432 浏览 1 回复
#1 楼主 2026-06-01 21:09:03
自己分析了一个星期了也没有进展,普通的短的文字的还是可以拼凑出来的,但是超过一定长度或者是换了格式,拼凑出来的数据就不对了,有能分析的大佬帮忙看看是怎么处理的这个数据,感激不尽
    为了方便测试,用AI写了个提取和写入的脚本,通过企业微信复制了内容之后,可以提取到“WeWork Message”格式的数据,以16进制的方式显示在软件上,下边是可以将16进制的内容写回剪切板,但是不知道他是通过什么方式转成16进制数据进行存储的,希望有大佬能帮忙把这个序列化和反序列化的方法通过python实现,这样就可以将我想要写入的内容直接写到剪切板了(不同的消息类型可能不一样,比如文字的、图片的、视频、视频号、卡片消息、消息记录等等)import tkinter as tk
from tkinter import ttk
import win32clipboard as wcb
import win32con
import binascii


# 格式字典,用于将格式ID转换为可读名称
format_names = {
    win32con.CF_TEXT: 'CF_TEXT',
    win32con.CF_UNICODETEXT: 'CF_UNICODETEXT',
    win32con.CF_BITMAP: 'CF_BITMAP',
    win32con.CF_DIB: 'CF_DIB',
    win32con.CF_DIBV5: 'CF_DIBV5',
    win32con.CF_ENHMETAFILE: 'CF_ENHMETAFILE',
    win32con.CF_METAFILEPICT: 'CF_METAFILEPICT',
    win32con.CF_SYLK: 'CF_SYLK',
    win32con.CF_DIF: 'CF_DIF',
    win32con.CF_TIFF: 'CF_TIFF',
    win32con.CF_OEMTEXT: 'CF_OEMTEXT',
    win32con.CF_DIB: 'CF_DIB',
    win32con.CF_PALETTE: 'CF_PALETTE',
    win32con.CF_PENDATA: 'CF_PENDATA',
    win32con.CF_RIFF: 'CF_RIFF',
    win32con.CF_WAVE: 'CF_WAVE',
    win32con.CF_UNICODETEXT: 'CF_UNICODETEXT',
    win32con.CF_HDROP: 'CF_HDROP',  # 文件拖放格式
    win32con.CF_LOCALE: 'CF_LOCALE',
    win32con.CF_DIBV5: 'CF_DIBV5',
    win32con.CF_OWNERDISPLAY: 'CF_OWNERDISPLAY',
    win32con.CF_DSPTEXT: 'CF_DSPTEXT',
    win32con.CF_DSPBITMAP: 'CF_DSPBITMAP',
    win32con.CF_DSPMETAFILEPICT: 'CF_DSPMETAFILEPICT',
    win32con.CF_DSPENHMETAFILE: 'CF_DSPENHMETAFILE',

class WeWorkClipboardApp:
    def __init__(self, root):
        self.root = root
        self.root.title("WeWork剪贴板同步工具")
        self.root.geometry("600x500")

        # 创建主框架
        self.main_frame = ttk.Frame(self.root, padding="20")
        self.main_frame.pack(fill=tk.BOTH, expand=True)

        # 标题
        self.title_label = ttk.Label(self.main_frame, text="WeWork Message 剪贴板工具", font=('Arial', 14, 'bold'))
        self.title_label.pack(pady=10)

        # 格式名称输入区域
        self.format_frame = ttk.Frame(self.main_frame)
        self.format_frame.pack(fill=tk.X, pady=10)

        self.format_label = ttk.Label(self.format_frame, text="格式名称:")
        self.format_label.pack(side=tk.LEFT, padx=5)

        self.format_entry = ttk.Entry(self.format_frame, width=40)
        self.format_entry.pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True)
        self.format_entry.insert(0, "WeWork Message")  # 默认格式名称

        # 提取数据按钮
        self.extract_btn = ttk.Button(self.main_frame, text="提取数据", command=self.extract_wework_data)
        self.extract_btn.pack(pady=10)

        # 第一个输入框(显示提取的数据)
        self.extract_label = ttk.Label(self.main_frame, text="提取的数据(十六进制):")
        self.extract_label.pack(anchor=tk.W, pady=5)
        self.extract_text = tk.Text(self.main_frame, height=8, width=60)
        self.extract_text.pack(fill=tk.BOTH, expand=True, pady=5)

        # 写入数据按钮
        self.write_btn 

...(已截断)

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289363.htm
#2 2026-06-01 21:09:03
import sys
import binascii
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit, 
                             QPushButton, QTextEdit, QVBoxLayout, QHBoxLayout)
from PyQt5.QtGui import QClipboard

class WeWorkClipboardTool(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.clipboard = QApplication.clipboard()  # 系统剪贴板对象

    def initUI(self):
        self.setWindowTitle("WeWork剪贴板同步工具")
        self.resize(600, 400)

        # 格式名称输入
        format_layout = QHBoxLayout()
        format_layout.addWidget(QLabel("格式名称:"))
        self.format_edit = QLineEdit("WeWork Message")
        format_layout.addWidget(self.format_edit)

        # 提取数据按钮
        self.extract_btn = QPushButton("提取数据")
        self.extract_btn.clicked.connect(self.extract_data)

        # 提取的数据显示
        extract_layout = QVBoxLayout()
        extract_layout.addWidget(QLabel("提取的数据(十六进制):"))
        self.extract_text = QTextEdit()
        extract_layout.addWidget(self.extract_text)

        # 写入数据按钮
        self.write_btn = QPushButton("写入数据")
        self.write_btn.clicked.connect(self.write_data)

        # 要写入的数据输入
        write_layout = QVBoxLayout()
        write_layout.addWidget(QLabel("要写入的数据(十六进制):"))
        self.write_text = QTextEdit()
        write_layout.addWidget(self.write_text)

        # 整体布局
        main_layout = QVBoxLayout()
        main_layout.addLayout(format_layout)
        main_layout.addWidget(self.extract_btn)
        main_layout.addLayout(extract_layout)
        main_layout.addWidget(self.write_btn)
        main_layout.addLayout(write_layout)
        self.setLayout(main_layout)

    # 提取剪贴板数据并转十六进制
    def extract_data(self):
        clipboard_data = self.clipboard.text()  # 读取剪贴板文本
        # 转十六进制(若为二进制数据,需用self.clipboard.mimeData().data()处理)
        hex_data = binascii.hexlify(clipboard_data.encode("utf-8")).decode("utf-8")
        self.extract_text.setText(hex_data)

    # 将十六进制数据转回剪贴板
    def write_data(self):
        hex_data = self.write_text.toPlainText().replace(" ", "").replace("\n", "")
        try:
            raw_data = binascii.unhexlify(hex_data).decode("utf-8")
            self.clipboard.setText(raw_data)  # 写入剪贴板
        except binascii.Error:
            self.write_text.setText("十六进制格式错误!")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    tool = WeWorkClipboardTool()
    tool.show()
    sys.exit(app.exec_())

请登录后参与讨论

立即登录 注册账号