Windows 个人版实现多用户远程登陆

这篇具有很好参考价值的文章主要介绍了Windows 个人版实现多用户远程登陆。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Windows 个人版实现多用户远程登陆

在个人 Windows 版本中是不提供像Windows Server的多用户同时访问主机的功能。 不过我们可以通过 hook Windows 提供远程服务的 C:\Windows\System32\termsrv.dll 库文件修改相关注册表提供依赖程序的方式可以使个人版本的Windows 提供多人同时访问主机的功能。

实现环境:

Windows版本:Windows 10 Education 20H2

硬件平台:x64

termsrv.dll版本:10.0.19041.84

多用户访问开启实现思路流程

通过修改注册表将原有的termsrv.dll文件入口重定向至hook程序的dll文件上(后称为A文件),A文件将自己伪装成termsrv.dll,并对外提供与原接口一致的API调用方法,A文件在runtime运行时的执行步骤如下:

  • 加载原有的termsrv.dll文件至内存

  • 根据预先调研好的设定配置位置及值,修改内存中termsrv.dll相对偏移位置的内存值,使其具备多用户远程登录能力

  • A文件的对外API透传到修改后的termsrv.dll执行,使对外表现为开启多用户远程登陆特性,达成目的

    优点:不需要更改windows的原始dll文件,影响小,不具备破坏性。

思路流程拆解

本流程实现中可以拆解为4个比较关键的步骤,分为4个关键小节依次进行说明具体实现

  • 修改注册表,将dll导流至hook.dll
  • hook.dll加载termsrv.dll之内存后修改4个位置的内存值,使termsrv.dll开启多用户登录模式
  • 在windows 注册表,配置正确的用户访问策略
  • 检查有无远程访问所需的依赖程序及库文件,如果没有,提供并放至指定路径下
  1. 1、修改注册表,引流服务至hook.dll
    Windows 个人版实现多用户远程登陆

    2、hook termsrv.dll, 修改内存值,使其开启多用户模式
    Hook 程序思路
    • termsrv.dll暴露了两个函数接口:ServiceMainSvchostPushServiceGlobals,Hook 程序同样也需要暴露这两个函数接口。

    • 当系统调用 Hook 程序的这两个接口时,首先将 termsrv.dll动态库加载到内存,冻结进程和线程的状态。Hook 程序再根据偏移量找到对应的 termsrv.dll 在内存中需要 Patch 点的地址,对 Patch 点进行修改,再恢复进程和线程的状态,再去调用 termsrv.dll文件对应的函数接口。

    附:修改位置查找方法

    需要使用 IDA 对 termsrv.dll文件进行分析,找到修改的位置和修改的内容。

    使用 IDA 打开 termsrv.dll,,找到 Header 值位置 180000000


✨Hook程序修改位置1:LocalOnlyPatch

函数CEnforcementCore::GetInstanceOfTSLicense(_GUID &,ITSLicense * *)

该函数主要会对本地的 License 进行判断,需要让该函数不进行判断直接进行跳转。

修改内容

需要将该函数此处的比较跳转(JZ)修改为直接跳转(JMP)

修改前:

.text:0000000180087611                 jz      short loc_180087657	// 74 44

修改后:

.text:0000000180087611                 jmp     short loc_180087657	// EB 44

偏移量180087611 - 180000000 = 87611


✨Hook程序修改位置2:SingleUserPatch

函数CSessionArbitrationHelperMgr::IsSingleSessionPerUserEnabled(int *)

该函数会判断当前主机是否只允许单用户进行会话连接,需要让该函数判断为允许多用户连接。

修改内容

需要将此处传入值 1 修改为 0:

Windows 个人版实现多用户远程登陆

Windows 个人版实现多用户远程登陆

修改前:

.text:000000018000BFE0                 mov     dword ptr [rdx], 1		// C7 02 00 00 00 00
修改后:
.text:000000018000BFE0                 mov     dword ptr [rdx], 0		// C7 02 01 00 00 00

偏移量:0BFE2


✨Hook程序修改位置3:DefPolicyPatch

函数CDefPolicy::Query(int *)

该函数主要作用是设置最大远程连接数,这里让最大连接数设置为最大值(256)即可。

修改内容

需要将修改此处的比较、跳转语句修改为直接重设寄存器值语句

修改前:

此处根据具体比较的寄存器和执行的跳转语句执行不同的预设语句

.text:0000000180017ED5                 cmp     [rcx+63Ch], eax		\\ 39 81 3C 06 00 00
.text:0000000180017EDB                 jz      loc_18002D0BA		\\ 0F 84 D9	51 01 00

修改后:

.text:0000000180017ED5                 mov     eax, 100h			\\ B8 00 01 00 00
.text:0000000180017EDA                 mov     [rcx+638h], eax		\\ 89 81 38 06 00 00
.text:0000000180017EE0                 nop							\\ 90

偏移量17ED5


✨Hook程序修改位置4:SLInitHook

函数:CSLQuery::Initialize(void)

修改内容:

通过全局关键字搜索找到该函数变量的存放区域:

Windows 个人版实现多用户远程登陆

变量的值需要重设为:

bServerSku 			= 1
bRemoteConnAllowed 	= 1
bFUSEnabled 		= 1
bAppServerAllowed 	= 1
bMultimonAllowed 	= 1
lMaxUserSessions 	= 0
ulMaxDebugSessions 	= 0
bInitialized 		= 1

各变量的偏移量:

bInitialized.x64      =103FF8
bServerSku.x64        =103FFC
lMaxUserSessions.x64  =104000
bAppServerAllowed.x64 =104008
bRemoteConnAllowed.x64=104010
bMultimonAllowed.x64  =104014
ulMaxDebugSessions.x64=104018
bFUSEnabled.x64       =10401C

3、配置windows 远程注册表配置项
1. ServiceDll

服务端会根据该值查找处理 RDP 远程连接的 dll 库文件,我们需要将其替换为 Hook 的 dll 文件。

位置Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService\Parameters -> ServiceDll

原始值:%SystemRoot%\System32\termsrv.dll

替换值:{{rdpwrap.dll文件 所在路径}}

2. fDenyTSConnections

该值控制主机是否开启 Windows 远程桌面服务。true关闭远程服务,false开启远程服务。

位置:Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server -> fDenyTSConnections

3. EnableConcurrentSessions

该值会管理主机是否允许多个用户远程登录并同时使用服务器。true开启并发会话,false关闭并发会话。

位置:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Licensing Core -> EnableConcurrentSessions

4. AllowMultipleTSSessions

该值控制主机是否允许多终端服务会话。true允许多用户,false不允许多用户。

位置:Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon -> AllowMultipleTSSessions

5. AddIns

位置:

配置剪贴板和客户端端口的重定向器。

Clip Redirector

剪切板重定向器。

位置:Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\Clip Redirector

Windows 个人版实现多用户远程登陆

DND Redirector

RDP 展示程序。

位置:Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\DND Redirector

Windows 个人版实现多用户远程登陆

Dynamic VC

Dynamic Virtual Channel。

位置:Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\Dynamic VC

Windows 个人版实现多用户远程登陆

4、补全缺失的依赖程序

由于开启多用户能力后,相较于某些系统版本(家庭版),缺少部分远程桌面使用的文件,需要在对应的位置配置文件的拷贝,让远程桌面能力能完整对外服务

1. rdpclip.exe

该程序用于剪切板重定向,用于同步客户端和服务端的剪切板。

位置:%SystemRoot%\System32\rdpclip.exe

2. rfxvmt.dll

该动态库包含远程桌面服务端程序。

位置:%SystemRoot%\System32\rfxvmt.dll

操作流程总结

  1. 提取所需文件,包括:rdpclip.exe(存在则不管)、rfxvmt.dll(存在则不管)和rdpwrap.dll(Hook 程序,必须放在系统级目录下,不可放在用户目录内,这里选择路径为C:\Program Files\Test\rdpwrap.dll);

  2. 修改 ServiceDll注册表的值,将其替换为 Hook 程序的路径(C:\Program Files\Test\rdpwrap.dll);

  3. 修改注册表的值,正确配置远程桌面服务;

  4. 开启防火墙 3389 端口;

  5. 杀死 TermService 服务的进程;

  6. 启动 TermService 服务,服务启动后会根据 ServiceDll的值加载 rdpwrap.dll程序,rdowrap.dll 程序则会去 Hook termsrv.dll文件(如果在Windows 服务管理中 TermService 服务配置为自动,那么可以不用手动重启,Windows 会自动重启该服务

    Windows 个人版实现多用户远程登陆

2、hook termsrv.dll, 修改内存值,使其开启多用户模式

Hook 程序思路
  • termsrv.dll暴露了两个函数接口:ServiceMainSvchostPushServiceGlobals,Hook 程序同样也需要暴露这两个函数接口。

  • 当系统调用 Hook 程序的这两个接口时,首先将 termsrv.dll动态库加载到内存,冻结进程和线程的状态。Hook 程序再根据偏移量找到对应的 termsrv.dll 在内存中需要 Patch 点的地址,对 Patch 点进行修改,再恢复进程和线程的状态,再去调用 termsrv.dll文件对应的函数接口。

附:修改位置查找方法

需要使用 IDA 对 termsrv.dll文件进行分析,找到修改的位置和修改的内容。

使用 IDA 打开 termsrv.dll,,找到 Header 值位置 180000000


✨Hook程序修改位置1:LocalOnlyPatch

函数CEnforcementCore::GetInstanceOfTSLicense(_GUID &,ITSLicense * *)

该函数主要会对本地的 License 进行判断,需要让该函数不进行判断直接进行跳转。

修改内容

需要将该函数此处的比较跳转(JZ)修改为直接跳转(JMP)

修改前:

.text:0000000180087611                 jz      short loc_180087657	// 74 44

修改后:

.text:0000000180087611                 jmp     short loc_180087657	// EB 44

偏移量180087611 - 180000000 = 87611


✨Hook程序修改位置2:SingleUserPatch

函数CSessionArbitrationHelperMgr::IsSingleSessionPerUserEnabled(int *)

该函数会判断当前主机是否只允许单用户进行会话连接,需要让该函数判断为允许多用户连接。

修改内容

需要将此处传入值 1 修改为 0:

Windows 个人版实现多用户远程登陆

修改前:

.text:000000018000BF09                 mov     dword ptr [rax+8], 1		// C7 40 08 01 00 00 00

修改后:

.text:000000018000BF09                 mov     dword ptr [rax+8], 0		// C7 40 08 00 00 00 00

偏移量:0BF09


✨Hook程序修改位置3:DefPolicyPatch

函数CDefPolicy::Query(int *)

该函数主要作用是设置最大远程连接数,这里让最大连接数设置为最大值(256)即可。

修改内容

需要将修改此处的比较、跳转语句修改为直接重设寄存器值语句

修改前:

此处根据具体比较的寄存器和执行的跳转语句执行不同的预设语句

.text:0000000180017ED5                 cmp     [rcx+63Ch], eax		\\ 39 81 3C 06 00 00
.text:0000000180017EDB                 jz      loc_18002D0BA		\\ 0F 84 D9	51 01 00

修改后:

.text:0000000180017ED5                 mov     eax, 100h			\\ B8 00 01 00 00
.text:0000000180017EDA                 mov     [rcx+638h], eax		\\ 89 81 38 06 00 00
.text:0000000180017EE0                 nop							\\ 90

偏移量17ED5


✨Hook程序修改位置4:SLInitHook

函数:CSLQuery::Initialize(void)

修改内容:

通过全局关键字搜索找到该函数变量的存放区域:

Windows 个人版实现多用户远程登陆

变量的值需要重设为:

bServerSku 			= 1
bRemoteConnAllowed 	= 1
bFUSEnabled 		= 1
bAppServerAllowed 	= 1
bMultimonAllowed 	= 1
lMaxUserSessions 	= 0
ulMaxDebugSessions 	= 0
bInitialized 		= 1

各变量的偏移量:

bInitialized.x64      =103FF8
bServerSku.x64        =103FFC
lMaxUserSessions.x64  =104000
bAppServerAllowed.x64 =104008
bRemoteConnAllowed.x64=104010
bMultimonAllowed.x64  =104014
ulMaxDebugSessions.x64=104018
bFUSEnabled.x64       =10401C

3、配置windows 远程注册表配置项

1. ServiceDll

服务端会根据该值查找处理 RDP 远程连接的 dll 库文件,我们需要将其替换为 Hook 的 dll 文件。

位置Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService\Parameters -> ServiceDll

原始值:%SystemRoot%\System32\termsrv.dll

替换值:{{rdpwrap.dll文件 所在路径}}

2. fDenyTSConnections

该值控制主机是否开启 Windows 远程桌面服务。true关闭远程服务,false开启远程服务。

位置:Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server -> fDenyTSConnections

3. EnableConcurrentSessions

该值会控制服务端远程桌面服务是否启用并发会话。true开启并发会话,false关闭并发会话。

位置:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Licensing Core -> EnableConcurrentSessions

4. AllowMultipleTSSessions

该值控制主机是否允许多用户会话。true允许多用户,false不允许多用户。

位置:Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon -> AllowMultipleTSSessions

5. AddIns

位置:

配置剪贴板和客户端端口的重定向器。

Clip Redirector

剪切板重定向器。

位置:Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\Clip Redirector

Windows 个人版实现多用户远程登陆

DND Redirector

RDP 展示程序。

位置:Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\DND Redirector

Windows 个人版实现多用户远程登陆

Dynamic VC

Dynamic Virtual Channel。

位置:Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\AddIns\Dynamic VC

Windows 个人版实现多用户远程登陆

4、补全缺失的依赖程序

由于开启多用户能力后,相较于某些系统版本(家庭版),缺少部分远程桌面使用的文件,需要在对应的位置配置文件的拷贝,让远程桌面能力能完整对外服务

1. rdpclip.exe

该程序用于剪切板重定向,用于同步客户端和服务端的剪切板。

位置:%SystemRoot%\System32\rdpclip.exe

2. rfxvmt.dll

该动态库包含远程桌面服务端程序。

位置:%SystemRoot%\System32\rfxvmt.dll

操作流程总结

  1. 提取所需文件,包括:rdpclip.exe(存在则不管)、rfxvmt.dll(存在则不管)和rdpwrap.dll(Hook 程序,必须放在系统级目录下,不可放在用户目录内,这里选择路径为C:\Program Files\Test\rdpwrap.dll);

  2. 修改 ServiceDll注册表的值,将其替换为 Hook 程序的路径(C:\Program Files\Test\rdpwrap.dll);

  3. 修改注册表的值,正确配置远程桌面服务;

  4. 开启防火墙 3389 端口;

  5. 杀死 TermService 服务的进程;

  6. 启动 TermService 服务,服务启动后会根据 ServiceDll的值加载 rdpwrap.dll程序,rdowrap.dll 程序则会去 Hook termsrv.dll文件(如果在Windows 服务管理中 TermService 服务配置为自动,那么可以不用手动重启,Windows 会自动重启该服务

    Windows 个人版实现多用户远程登陆

Windows 个人版开启单用户多会话

通过上面的操作,主机已经实现了不同用户的同时访问。但是如果不同会话以同一用户身份进行访问,会导致先连接的会话被后连接的会话挤掉。

在完成上述步骤的基础上,通过再修改下列注册表配置项实现单用户多会话连接。

  1. MaxInstance

    配置最大会话数量

    位置:Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services -> MaxInstance

  2. fSingleSessionPerUser

    开启单用户多会话模式。true代表关闭单用户多会话模式,false代表开启单用户多会话模式。

    位置:Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server -> fSingleSessionPerUser文章来源地址https://www.toymoban.com/news/detail-481282.html

到了这里,关于Windows 个人版实现多用户远程登陆的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 个人版 AI 辅助系统的尝试

    在 CSDN 的时候,我就一直想要有自己的 AI 工作环境。我们组只有一台高配的办公服务器,用于训练模型,分析数据。通常来说这台机器都很忙。如果想要 做一些研究工作或试验,资源就有点紧张了。而我自己的工作机,虽然是一台买了只有四五年的高配 MacBook Pro,但是做

    2024年01月21日
    浏览(35)
  • Win11环境下 Unity个人版无法激活

    网上教程大多都是在win10环境下运行,win11环境下遇到很多没有碰到的问题,故简单做个记录,也方便同样使用win11的朋友解决问题。 Unity2021无法打开 问题描述:下载Unity2021.3.4f1c1版本(LTS)后,桌面快捷方式无法打开。打开任务管理器后发现,点击Unity快捷方式后Unity进程出

    2024年02月12日
    浏览(24)
  • Visual studio-Git工具使用个人版

    开源的git管理工具确实非常方便,相信很多小伙伴工作了一些年都会有自己的代码库,有的时候做一个新的项目了,需要使用到以前用过的技术,这个时候在去翻找以前的项目,可能就找不到了,但是吧代码库都整理到git上就方便多了,而且有什么新的代码或者优化等等都可

    2024年02月13日
    浏览(35)
  • Office-Microsoft365-家庭和个人版下载和安装

    -百度网盘:链接:https://pan.baidu.com/s/1NMl8EK8nNbDY_UaVhn84Mw 提取码:roxc -如下图所示 -解压 右键单击,以管理员身份运行 首页如图 第一步,卸载已有office【一定确保卸载干净,否则无法安装】 第二步,选择产品安装 产品: 安装设置: 部署设置、下载设置: 开始部署 下载完成

    2024年01月25日
    浏览(50)
  • 玩转软件|钉钉个人版内测启动:AI探索未来的工作方式

    目录 前言 正文 AI为核心,个人效率为王! 指令中心,解锁AI技巧! 灵感Store,探索更多可能! 未来的AI,即将问世! 个人内测体验 重磅消息:钉钉个人版在8月16日正式启动内测,各位小团队、个人用户和热爱高效工作的大学生们,准备好了吗?只需在钉钉官网申请加入测试

    2024年02月11日
    浏览(23)
  • 如何在 macOS 上安装虚拟机软件 VMware Fusion Player (个人版免费)

    需要一个邮箱地址,先注册登陆 VMware。 然后在之后某个页面再次 register ,就是随意填写一些字段:所在公司名,自己的地址,邮编等。 https://www.vmware.com/products/fusion/fusion-evaluation.html https://customerconnect.vmware.com/evalcenter?p=fusion-player-personal-13 在 License Download 你需要做 register 。

    2024年01月16日
    浏览(31)
  • 大语言模型与语义搜索;钉钉个人版启动内测,提供多项AI服务

    🦉 AI新闻 🚀 钉钉个人版启动内测,提供多项AI服务 摘要 :钉钉个人版正式开始内测,面向小团队、个人用户、高校大学生等人群。该版本具有AI为核心的功能,包括文生文AI、文生图AI和角色化对话等。用户可通过自然语言对话和绘画等方式使用AI服务。个人版还提供文档协

    2024年02月12日
    浏览(30)
  • 公共用例库计划--个人版(五)QtCharts制作首页饼图与柱状图

      本次计划的核心任务是开发一个,个人版的公共用例库,旨在将各系统和各类测试场景下的通用、基础以及关键功能的测试用例进行系统性地归纳整理,并以提高用例的复用率为目标,力求最大限度地减少重复劳动,提升测试效率。   计划内容:完成公共用例库的开发

    2024年01月25日
    浏览(30)
  • VM ware Player(官方提供的免费个人版)虚拟机下载以及配置虚拟机全流程(以linux为例)

    首先进入官网       VMware官网链接 点击Resources,再点击产品下载  之后在转入页面中找到VMware Workstation Player,此版本为VMware面向个人使用的免费版,点击进入下载页面  点击下载  之后根据你电脑的操作系统,选择对应的安装包(以笔者的Windows系统为例)  运行安装文件

    2024年02月10日
    浏览(49)
  • 【Unity3D】Unity3D 软件安装 ( 注册账号并下载 Unity Hub | 安装 Unity Hub | 获取个人版授权 | 中文环境设置 | 安装 Unity3D 编辑器 )

    Unity 官方网站 : 英文 : https://unity.com 中文 : https://unity.cn 进入 中文网站 https://unity.cn , 点击右上角的 \\\" 下载 Unity \\\" 按钮 ; 推荐下载 Unity3D 的长期支持版本 ; 点击界面中的 \\\" 下载 Unity Hub \\\" 选项 ; 根据你的系统 , 选择对应的 Unity Hub , 我在 Windows 上开发 , 因此选择 \\\" Windows 下载 \\\"

    2024年01月25日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包