一个用于在 termsrv.dll 中定位 RDP 多会话补丁点的 IDA Pro 插件。
这个插件可以自动分析 Windows 系统中的 termsrv.dll 文件,定位需要修改的关键代码位置,以实现 RDP 多用户同时连接的功能。它完全兼容 IDA Pro 7.0 到 9.0+ 版本,并支持 x86 和 x64 架构。
- 自动分析:自动识别 termsrv.dll 版本和架构
- 多种补丁定位:支持 SingleUser、DefPolicy 和 LocalOnly 补丁点定位
- 配置生成:自动生成可用于 RDP Wrapper 项目的 INI 配置文件
- 跨版本支持:支持 Windows Vista 到 Windows 11 的各种版本
- 架构兼容:同时支持 32 位 (x86) 和 64 位 (x64) 系统
- IDA Pro 7.0 ~ 9.0+
- 已加载 PDB 符号文件的 termsrv.dll
- Python 3.x 环境
- 将
termsrv_patch_locator.py文件复制到 IDA Pro 的插件目录 - 在 IDA Pro 中加载 termsrv.dll 文件
- 确保已加载 PDB 符号文件(可通过 File → Load file → PDB file... 加载)
- 通过菜单或快捷键
Ctrl+Alt+R运行插件
- 在 IDA Pro 中打开 termsrv.dll 文件
- 确保已加载相应的 PDB 符号文件
- 使用快捷键
Ctrl+Alt+R或通过插件菜单运行 "Termsrv RDP Patch Locator" - 插件将自动分析文件并在输出窗口显示结果
- 分析完成后,会弹出文件保存对话框,选择保存位置
- 插件将生成一个包含补丁信息的 INI 文件
插件会在输出窗口显示以下信息:
- 文件版本信息(如
[6.3.9600.17415]) - 各种补丁点的位置和代码
- 错误信息(如果某些补丁点未找到)
生成的 INI 文件包含:
- 基本配置模板
- 补丁点偏移地址
- 补丁代码
- SLInit 变量地址(适用于较新版本)
- 定位
CSessionArbitrationHelper::IsSingleSessionPerUserEnabled或CUtils::IsSingleSessionPerUser函数 - 修改单用户会话限制
- 定位
CDefPolicy::Query函数 - 修改终端服务策略检查
- 定位
CEnforcementCore::GetInstanceOfTSLicense和CSLQuery::IsLicenseTypeLocalOnly函数 - 修改本地许可证限制
- 定位
CSLQuery::Initialize函数和相关变量 - 修改终端服务初始化设置
-
"memset not found" 错误
- 确保已加载 PDB 符号文件
- 检查 termsrv.dll 版本是否受支持
-
"CDefPolicy::Query not found" 错误
- 某些较新版本可能使用不同的函数名
- 尝试更新插件或手动查找相关函数
-
生成的 INI 文件不完整
- 检查输出窗口中的错误信息
- 确认所有必要的函数和变量都被找到
要启用调试模式,请在脚本中将 DEBUG_MODE 变量设置为 True:
DEBUG_MODE = True这将输出更详细的调试信息,帮助诊断问题。
插件使用以下技术进行代码分析:
- 函数名模式匹配
- 指令序列识别
- 寄存器操作分析
- 内存访问模式检测
- 初始版本:支持 Windows Vista 到 Windows 10
- 当前版本:支持 Windows 11 和最新版本的 termsrv.dll
本项目采用 MIT 许可证开源,详见 LICENSE 文件。
欢迎提交问题报告和功能请求。如果您想贡献代码,请遵循以下步骤:
- Fork 本项目
- 创建功能分支
- 提交更改
- 发起 Pull Request
本工具仅用于学习和研究目的。使用者需要自行承担使用本工具的风险和责任。
