WxAgent
WxAgent 使用 C#/.NET 8 独立实现微信 Windows 桌面端自动化能力。当前已完成 M1 技术验证、M2 会话/消息扩展切片、M3 监听和完整消息模型,并包含只读数据库 MVP。
当前能力
doctor:检测 Windows 会话、Weixin.exe进程/版本/只读访问权限、微信窗口、关键 UIA 控件和数据库根目录。inspect-ui:通过 FlaUI.UIA3 导出脱敏 UI 树;名称和动态 AutomationId 只保留长度和短哈希。session list/search/current/open:列出可见会话、输出分类搜索结果和精确匹配、读取及切换当前会话。chat send/read/history/listen/monitor:仅以文件传输助手做默认验证,支持文本发送、可见及历史消息读取,并以 UIA 结构事件结合两秒低频轮询实时发现消息。chat monitor:逐行输出MessageEventJSON,使用有界语义指纹去重和受当前用户 ACL 保护的 checkpoint,支持 Host 重启后的短期续接;默认隐藏正文和引用内容。- 消息模型覆盖文本、图片、文件、视频、语音、链接、引用和系统消息;公开监听 API 为
IAsyncEnumerable<MessageEvent>,可选回调逐个隔离异常。 chat reply-latest:通过消息行实时边界右侧气泡定位执行引用回复;解析微信回复文本\n引用 <发送者> 的消息 : <原文>格式。chat send-file/send-image:使用剪贴板粘贴发送文件或真实图片数据,不打开文件选择框,并恢复常见文本、图片或文件剪贴板内容。smoke:执行doctor、脱敏 UI 树导出,并向文件传输助手发送唯一 ASCII 标记后读回确认。- 文本输入使用 UIA ValuePattern 直接设置并在发送前逐字校验,避免中文输入法组合态改变消息内容。
db scan:以PROCESS_QUERY_INFORMATION | PROCESS_VM_READ扫描 WCDB 十六进制候选,只保存通过具体数据库 page 1 HMAC-SHA512 验证的密钥。db query:通过 SQLCipher 4 以文件系统 ReadOnly、私有缓存、无连接池和query_only读取sqlite_master元数据,并确认写操作被拒绝。
安全边界
允许读取本机 Weixin.exe 的已提交可读内存和本机加密数据库。禁止 DLL 注入、内存修改、数据库写入、协议破解、登录/验证码/风控绕过。候选密钥不会被输出;只有带 --save 的显式命令才会将已验证密钥原子保存到当前用户 LocalAppData,并应用当前用户 ACL。当前受控环境使用明文 hex key 存储,尚未引入 DPAPI。
没有进程句柄到数据库文件路径关联时,PageHmacVerified 仅证明密钥属于具体数据库,不表示账号当前活跃。
构建
export PATH="$HOME/.dotnet:$PATH"
dotnet restore WxAgent.sln -p:EnableWindowsTargeting=true
dotnet test tests/WxAgent.Core.Tests -c Release
dotnet build WxAgent.sln -c Release -p:EnableWindowsTargeting=true
dotnet publish src/WxAgent.Host -c Release -r win-x64 --self-contained true \
-p:EnableWindowsTargeting=true -p:PublishSingleFile=true \
-p:IncludeNativeLibrariesForSelfExtract=true -p:PublishTrimmed=false
CLI
WxAgent.Host doctor
WxAgent.Host inspect-ui --output artifacts/ui-tree.json
WxAgent.Host smoke --timeout 45
WxAgent.Host chat send --text "hello"
WxAgent.Host session list
WxAgent.Host session search --query "文件传输助手" --exact
WxAgent.Host session current
WxAgent.Host session open --name "文件传输助手"
WxAgent.Host chat read --limit 20
WxAgent.Host chat read --limit 20 --include-content
WxAgent.Host chat history --limit 100 --scrolls 10
WxAgent.Host chat reply-latest --text "quoted reply"
WxAgent.Host chat send-file --path C:\path\file.txt
WxAgent.Host chat send-image --path C:\path\image.png
WxAgent.Host chat listen --seconds 30
WxAgent.Host chat monitor --seconds 60 --state-file artifacts\listener-state.json
WxAgent.Host db scan --timeout 120
WxAgent.Host db scan --save --timeout 120
WxAgent.Host db status
WxAgent.Host db query --account <account-root-fingerprint> --database contact/contact.db
默认密钥文件:%LOCALAPPDATA%\WxAgent\database-keys.json。CLI 和日志不会打印完整密钥。
Windows 真机验证
目标主机:10.1.1.101,用户 rogee,微信 C:\Program Files\Tencent\Weixin\Weixin.exe。UIA 命令必须在微信所在的已登录、未锁定交互会话中运行;SSH Session 0 只能用于部署和非 UI 数据库命令。
scp -r src/WxAgent.Host/bin/Release/net8.0-windows10.0.19041.0/win-x64/publish/* \
rogee@10.1.1.101:'C:/Users/Rogee/wx-agent/'
发布后至少运行:
WxAgent.Host doctor
WxAgent.Host inspect-ui --output artifacts/ui-tree.json
WxAgent.Host smoke
WxAgent.Host db scan --save --timeout 180
WxAgent.Host db status
WxAgent.Host db query --account <fingerprint> --database <relative-db-path>
M1 已完成文件传输助手激活、文本发送/读回、新消息发现和微信重启后的重新连接验证。M2 扩展切片已完成会话搜索精确匹配、引用回复解析、历史滚动读取及去重;验收见 docs/validation/M2-Search-Quote-History-2026-09-04.md。M3 已完成实时监听、轮询兜底、完整消息类型、有界去重、回调隔离和 checkpoint 重启续接;验收见 docs/validation/M3-Listening-2026-09-04.md。重启后若微信要求手机确认登录,必须由用户正常确认;WxAgent 不绕过登录流程。
SQLitePCLRaw.bundle_e_sqlcipher 2.1.11 仅用于当前开发与真机验证。正式商业发布前必须完成许可与安全基线评审;若不能接受其已弃用状态、SQLCipher 4.5.2 community 和 SQLite 3.39.2,则切换 Zetetic 官方 SQLCipher for .NET 后重新执行全部数据库验收。