Files
MemRelay/projects/ea207d36-693c-4349-b3c8-7c40c8c889f5/WinUnLock 架构与关键参数(非秘密).md

2.1 KiB
Raw Permalink Blame History

title, type, permalink, stable_id, scope, project_id, memory_type, status, revision, restored_from_commit, created_at, updated_at
title type permalink stable_id scope project_id memory_type status revision restored_from_commit created_at updated_at
WinUnLock 架构与关键参数(非秘密) decision main/projects/ea207d36-693c-4349-b3c8-7c40c8c889f5/win-un-lock-架构与关键参数非秘密 d821d390-15d1-484a-98e1-6d9656f69bfe project ea207d36-693c-4349-b3c8-7c40c8c889f5 decision active 1 6a6a895eaf 2026-09-23T15:12:01.484556+00:00 2026-09-23T15:12:01.484686+00:00

Rust workspace,crate 划分:common(管道协议/配置/DPAPI封装) + provider(cdylib,Credential Provider COM DLL) + client(bin,定时解锁客户端) + setup(bin,交互式设置账户名/密码并DPAPI加密)。另含 install/uninstall PowerShell 脚本与 README(中文)。

关键参数(本项目专属,非秘密):

  • CLSID = {E9C67B30-B120-4838-A5A3-FBC2DE03C532}(新生成,避免与示例冲突)。
  • 命名管道 = \.\pipe\WinUnLock。
  • 数据目录 = %PROGRAMDATA%\WinUnLock\(config.toml;cred.bin 为 DPAPI 加密凭据;logs\provider.log、logs\client.log)。
  • 已验证可编译依赖组合:edition 2024,windows 0.62.2,windows-core 0.62.2。DPAPI 用 windows Win32_Security_Cryptography 的 CryptProtectData/CryptUnprotectData。

管道协议 v1(小端,provider 为服务端):magic u32=0x554E4C4B('UNLK') | version u32=1 | user_len u32 | user(UTF-16LE) | pass_len u32 | pass(UTF-16LE) | domain_len u32 | domain(UTF-16LE)。带长度上限保护,读毕 zeroize。

数据流:每日计划任务(SYSTEM,RunLevel Highest) -> client.exe 读 cred.bin(DPAPI LocalMachine 解密) -> 连管道发凭据(带重试) -> provider 管道线程收到 -> CredentialsChanged 通知 LogonUI -> GetSerialization(CredPack 序列化) -> LSA 验证 -> 解锁恢复原桌面。

环境事实:MSVC link.exe/dumpbin 在 C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64\(不在 PATH,但 rustc MSVC 后端能自动定位)。故障恢复:CP 装错可能锁死登录,需进 WinRE/安全模式删注册表 CLSID 项恢复——README 必须写明。