RDP Wrapper更新指南:如何获取最新termsrv.dll偏移值

RDP Wrapper更新指南:如何获取最新termsrv.dll偏移值

【免费下载链接】rdpwrap RDP Wrapper Library 【免费下载链接】rdpwrap 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap

Windows远程桌面(Remote Desktop Protocol,RDP)单用户限制一直是多人协作的痛点。RDP Wrapper Library通过修改termsrv.dll实现多用户并发访问,但Windows更新常导致termsrv.dll结构变化,需更新偏移值才能继续使用。本文详解偏移值获取与配置更新全流程,让普通用户也能独立完成维护。

偏移值为何如此重要?

termsrv.dll是Windows远程桌面服务的核心组件,其中CSessionArbitrationHelper::IsSingleSessionPerUserEnabledCDefPolicy::Query函数控制并发会话限制。RDP Wrapper通过修改这些函数的内存地址(偏移值)实现功能解锁。

每个Windows版本(如6.1.7601.2423410.0.19045.3803)的termsrv.dll编译结果不同,导致关键函数偏移值唯一。系统更新可能改变这些偏移,表现为:

  • 远程桌面连接提示"已有用户连接"
  • RDP Wrapper配置工具显示"未支持的版本"
  • 事件查看器出现termsrv.dll加载失败日志

三步获取最新偏移值

步骤1:定位当前termsrv.dll版本

  1. 按下Win+R输入services.msc,停止"Remote Desktop Services"
  2. 打开C:\Windows\System32\termsrv.dll属性→详细信息
  3. 记录文件版本(如10.0.19045.3803

提示:若提示文件占用,可使用PowerShell获取版本:(Get-Item C:\Windows\System32\termsrv.dll).VersionInfo.ProductVersion

步骤2:解析二进制文件定位关键函数

工具准备
  • x64dbg:开源反汇编工具
  • 符号文件:微软官方调试信息
实战操作(以单用户限制函数为例):
  1. 在x64dbg中加载termsrv.dll
  2. 搜索字符串引用:IsSingleSessionPerUserEnabled
  3. 分析函数汇编代码,定位关键跳转指令:
; 典型x64版本代码特征
.text:00007FF75A97D96  mov     ebx, 1     ; 单用户限制标记
.text:00007FF75A97D9B  mov     [rsp+198h+VersionInformation.dwOSVersionInfoSize], 11Ch
  1. 计算偏移值:函数地址 - 模块基地址 = 偏移值(如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

关键参数说明:

  • SingleUserCodenop(0x90)或Zero(0x00)
  • DefPolicyCode:需匹配[PatchCodes]段定义的代码模板

自动化更新与验证

使用官方工具链

项目提供的src-rdpconfig/RDPConf.dpr配置工具可自动验证偏移值有效性:

  1. 编译配置工具:Lazarus IDE打开src-rdpconfig/RDPConf.lpr
  2. 运行后切换到"编辑"选项卡
  3. 点击"检测版本"自动填充当前termsrv.dll信息
  4. 导入新偏移值后点击"应用"并重启远程桌面服务

验证方法

:: 重启远程桌面服务
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 【免费下载链接】rdpwrap 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值