RDPWrap可以突破windows下的远程桌面限制
安装这一软件非常简单,只需在https://github.com/stascorp/rdpwrap/releases下载后运行install.bat
其中RDPWrap.ini存储着不同windows版本下termsrv.dll常量所在的地址
termsrv.dll 版本 10.0.17134.1
已修改的txt(2018-05-05更新)rdpwrap.ini
github上其他用户给出的修改方案:
[10.0.17134.1]
LocalOnlyPatch.x64=1
LocalOnlyOffset.x64=925D1
LocalOnlyCode.x64=jmpshort
SingleUserPatch.x64=1
SingleUserOffset.x64=18B64
SingleUserCode.x64=Zero
DefPolicyPatch.x64=1
DefPolicyOffset.x64=10E72
DefPolicyCode.x64=CDefPolicy_Query_eax_rcx
SLInitHook.x64=1
SLInitOffset.x64=22E6C
SLInitFunc.x64=New_CSLQuery_Initialize
;...
;[SLInit]
;...
[10.0.17134.1-SLInit]
bServerSku.x64 =F1378
lMaxUserSessions.x64 =F137C
bAppServerAllowed.x64 =F1380
bInitialized.x64 =F2430
bRemoteConnAllowed.x64=F2434
bMultimonAllowed.x64 =F2438
ulMaxDebugSessions.x64=F243C
bFUSEnabled.x64 =F2440
对于版本10.0.17134.1目前还未支持,本教程讲演示如何找出偏移值并支持该版本dll
用ida打开该dll,
如果可以加载’termsrv.pdb’将更加简单找到偏移地址
寻找代码段patch位置
修改函数:CEnforcementCore::GetInstanceOfTSLicense
找到字符串”CEnforcementCore::GetInstanceOfTSLicense FAILED – License type me”
前面一个jz short就是,要改为jmp short
LocalOnlyPatch.x64=1
LocalOnlyOffset.x64=925D1
LocalOnlyCode.x64=jmpshort
修改函数:CSessionArbitrationHelper::IsSingleSessionPerUserEnabled
可能会引起问题:(无需修改)
在Function窗口找到函数:CSessionArbitrationHelper::IsSingleSessionPerUserEnabled
发现需要将xor edi, edi 改为 nop
在[PatchCodes]下添加
nopnop=9090
SingleUserPatch.x64=1 SingleUserOffset.x64=18B55 SingleUserCode.x64=nopnop
找到函数CDefPolicy::Query
将
.text:0000000180010E78 mov edi, [rcx+638h] .text:0000000180010E7E cmp ebx, edi .text:0000000180010E80 jz loc_18003AF9C
修改为
mov edi, 0x100; mov dword ptr [rcx + 0x638], edi; nop; nop; nop;
即在[PatchCodes]下添加
CDefPolicy_Query_edi_rcx=BF0001000089B938060000909090
DefPolicyPatch.x64=1 DefPolicyOffset.x64=10E78 DefPolicyCode.x64=CDefPolicy_Query_edi_rcx
找到函数CSLQuery::Initialize位于180022E6C故设置
SLInitHook.x64=1
SLInitOffset.x64=22E6C
SLInitFunc.x64=New_CSLQuery_Initialize
按Shift+F4打开Name窗口
搜索以下内容
将最后的地址填入等号后面
bServerSku.x64 =F1378 lMaxUserSessions.x64 =F137C bAppServerAllowed.x64 =F1380 bInitialized.x64 =F2430 bRemoteConnAllowed.x64=F2434 bMultimonAllowed.x64 =F2438 ulMaxDebugSessions.x64=F243C bFUSEnabled.x64 =F2440
有些时候,pdb并不能正确加载,我们就需要采用另外的方法(参考https://github.com/stascorp/rdpwrap/blob/master/res/rdpwrap-ini-kb.txt)
在String窗口寻找第一个”Allow Multiple Sessions”
跳至其引用
最近后面一个cmp就是bServerSku常量的地址1800F1378
那么我们就可以知道lMaxUserSessions ,bAppServerAllowed ,因为这两个会跟在bServerSku后面
根据bServerSku常量,可以找到CSLQuery::IsServerSku(int *)方法
在其上面一个cmp是bInitialized=F2430
在64位版本里bRemoteConnAllowed,bMultimonAllowed,ulMaxDebugSessions,bFUSEnabled 都是跟在bInitialized 后面。
然后根据找到的版本跟内容添加到ini中
[PatchCodes] nopnop=9090 CDefPolicy_Query_edi_rcx=BF0001000089B938060000909090 [10.0.17134.1] LocalOnlyPatch.x64=1 LocalOnlyOffset.x64=925D1 LocalOnlyCode.x64=jmpshortSingleUserPatch.x64=0 SingleUserOffset.x64=18B55 SingleUserCode.x64=nopnopDefPolicyPatch.x64=1 DefPolicyOffset.x64=10E78 DefPolicyCode.x64=CDefPolicy_Query_edi_rcx SLInitHook.x64=1 SLInitOffset.x64=22E6C SLInitFunc.x64=New_CSLQuery_Initialize [10.0.17134.1-SLInit] bServerSku.x64 =F1378 lMaxUserSessions.x64 =F137C bAppServerAllowed.x64 =F1380 bInitialized.x64 =F2430 bRemoteConnAllowed.x64=F2434 bMultimonAllowed.x64 =F2438 ulMaxDebugSessions.x64=F243C bFUSEnabled.x64 =F2440
注意最后要加入一空行
您好 想请您给修改个RDPWrap.ini文件,termsrv.dll版本 10.0.19041.2057