RDP Wrapper更新指南:如何获取最新termsrv.dll偏移值
【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap
Windows远程桌面(Remote Desktop Protocol,RDP)单用户限制一直是多人协作的痛点。RDP Wrapper Library通过修改termsrv.dll实现多用户并发访问,但Windows更新常导致termsrv.dll结构变化,需更新偏移值才能继续使用。本文详解偏移值获取与配置更新全流程,让普通用户也能独立完成维护。
偏移值为何如此重要?
termsrv.dll是Windows远程桌面服务的核心组件,其中CSessionArbitrationHelper::IsSingleSessionPerUserEnabled和CDefPolicy::Query函数控制并发会话限制。RDP Wrapper通过修改这些函数的内存地址(偏移值)实现功能解锁。
每个Windows版本(如6.1.7601.24234或10.0.19045.3803)的termsrv.dll编译结果不同,导致关键函数偏移值唯一。系统更新可能改变这些偏移,表现为:
- 远程桌面连接提示"已有用户连接"
- RDP Wrapper配置工具显示"未支持的版本"
- 事件查看器出现
termsrv.dll加载失败日志
三步获取最新偏移值
步骤1:定位当前termsrv.dll版本
- 按下
Win+R输入services.msc,停止"Remote Desktop Services" - 打开
C:\Windows\System32\termsrv.dll属性→详细信息 - 记录文件版本(如
10.0.19045.3803)
提示:若提示文件占用,可使用PowerShell获取版本:
(Get-Item C:\Windows\System32\termsrv.dll).VersionInfo.ProductVersion
步骤2:解析二进制文件定位关键函数
工具准备
- x64dbg:开源反汇编工具
- 符号文件:微软官方调试信息
实战操作(以单用户限制函数为例):
- 在x64dbg中加载
termsrv.dll - 搜索字符串引用:
IsSingleSessionPerUserEnabled - 分析函数汇编代码,定位关键跳转指令:
; 典型x64版本代码特征
.text:00007FF75A97D96 mov ebx, 1 ; 单用户限制标记
.text:00007FF75A97D9B mov [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch
- 计算偏移值:函数地址 - 模块基地址 = 偏移值(如
0x17D96)
参考项目中res/rdpwrap-ini-kb.txt的分析模板:
; Imagebase: 7FF75A80000 ; .text:000007FF75A97D90 lea rcx, [rsp+198h+VersionInformation] ; .text:000007FF75A97D95 mov ebx, 1 <- 需要nop的指令 ; 偏移值计算:0x7FF75A97D95 - 0x7FF75A80000 = 0x17D95
步骤3:配置文件格式规范
获取偏移值后,需按res/rdpwrap.ini格式添加版本配置段:
[10.0.19045.3803]
; 单用户限制补丁
SingleUserPatch.x86=1
SingleUserOffset.x86=1A65D ; 32位系统偏移
SingleUserCode.x86=nop ; 替换为nop指令
SingleUserPatch.x64=1
SingleUserOffset.x64=17F62 ; 64位系统偏移
SingleUserCode.x64=Zero ; 替换为0x00
; 并发策略补丁
DefPolicyPatch.x86=1
DefPolicyOffset.x86=19E25
DefPolicyCode.x86=CDefPolicy_Query_eax_esi
DefPolicyPatch.x64=1
DefPolicyOffset.x64=17D6E
DefPolicyCode.x64=CDefPolicy_Query_eax_rdi
关键参数说明:
SingleUserCode:nop(0x90)或Zero(0x00)DefPolicyCode:需匹配[PatchCodes]段定义的代码模板
自动化更新与验证
使用官方工具链
项目提供的src-rdpconfig/RDPConf.dpr配置工具可自动验证偏移值有效性:
- 编译配置工具:
Lazarus IDE打开src-rdpconfig/RDPConf.lpr - 运行后切换到"编辑"选项卡
- 点击"检测版本"自动填充当前
termsrv.dll信息 - 导入新偏移值后点击"应用"并重启远程桌面服务
验证方法
:: 重启远程桌面服务
net stop termservice && net start termservice
:: 检查RDP Wrapper日志
type %ProgramData%\RDP Wrapper\rdpwrap.txt | find "patch"
成功日志应包含:[PATCH] Applying SingleUserPatch (x64)和[INFO] Termsrv.dll patched successfully
社区资源与应急方案
若手动分析困难,可利用以下资源:
- rdpwrap.ini知识库:包含历代版本偏移值
- GitHub Issues:搜索关键词
termsrv.dll [版本号] - 第三方维护库:如
seba73/rdpwrap的issue讨论区
注意:修改系统文件可能违反软件许可协议,企业环境建议部署RD Session Host角色
未来展望
随着Windows 11 23H2引入的termsrv.dll代码签名强化,传统内存补丁方式面临挑战。社区正在探索:
- 基于UEFI的早期启动补丁
- WSL2环境下的用户态模拟
- 利用Hyper-V隔离实现多会话
掌握偏移值更新技能,不仅能解决当前远程桌面限制,更能深入理解Windows二进制文件结构与API调用流程。建议定期备份rdpwrap.ini,并关注项目README.md的更新公告。
(全文约1950字符)
操作提示:完成配置后建议导出rdpwrap.ini并在项目issue分享,帮助其他用户。下期将讲解"如何使用专业工具批量分析不同版本termsrv.dll"。
【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



