RDP 配置文件编写记录
RDP 配置文件编写记录
RDP Wrapper 官方配置文件只能支持到18年的Win10系统,新版本的系统需要自己编写 INI 文件,当然也可以去 RDP 的官方 github issues 里面寻找相应的配置文件。
RDP Ini 文件样本 for win10(10.0.19041.789)
1 |
|
RDP 的Patch代码,我可以根据需要添加
1 |
|
RDP Wrapper 对 termsrv.dll 有 3 处 Patch,1 处 hook。每个 Patch 后缀 .x86
和 .x64
指定架构。
Patchs
需要用 IDA 分析 termsrv.dll,加载的时候需要加载微软的符号表。
LocalOnlyPatch
函数: CEnforcementCore::GetInstanceOfTSLicense
签名:?GetInstanceOfTSLicense@CEnforcementCore@@UEAAJAEAU_GUID@@PEAPEAVITSLicense@@@Z
把 jz 改成 jmp: LocalOnlyCode.x64=jmpshort
SingleUserPatch
函数: CSessionArbitrationHelperMgr::IsSingleSessionPerUserEnabled
签名: ?IsSingleSessionPerUserEnabled@CSessionArbitrationHelperMgr@@UEAAJPEAH@Z
改成常量1改成0:SingleUserCode.x64=Zero 注意 offset 的位置。
DefPolicyPatch
函数: CDefPolicy::Query
签名: ?Query@CDefPolicy@@UEAAJPEAH@Z
改成如下
DefPolicyCode.x64=CDefPolicy_Query_eax_rcx
这里的 [rcx+638h] 是最大的连接数,直接给它赋值一个大数值即可。
SLInitHook
hook 的目标函数是: CConnectionHandlerItem::CConnHandlerKeepAliveObject::Cleanup
签名: ?Cleanup@CConnHandlerKeepAliveObject@CConnectionHandlerItem@@AEAAXXZ
SLInitOffset.x64 填这个函数的偏移即可。
其它全局变量
[x.x.x.x-SLInit] 中的值
我只给出这些全局变量的符号, IDA 加载符号表后可以直接定位
属性 | 符号 |
---|---|
bInitialized | ?bInitialized@CSLQuery@@0HA |
bServerSku | ?bServerSku@CSLQuery@@0HA |
lMaxUserSessions | ?lMaxUserSessions@CSLQuery@@0JA |
bAppServerAllowed | ?bAppServerAllowed@CSLQuery@@0HA |
bRemoteConnAllowed | ?bRemoteConnAllowed@CSLQuery@@0HA |
bMultimonAllowed | ?bMultimonAllowed@CSLQuery@@0HA |
ulMaxDebugSessions | ?ulMaxDebugSessions@CSLQuery@@0KA |
bFUSEnabled | ?bFUSEnabled@CSLQuery@@0HA |
参考
https://paper.seebug.org/papers/scz/windows/201804121554.txt
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!