4 系统初始连接模块:
当通道申请各部分通过后,开始系统登录的初始连接。从此数据包开始,所以虚拟通道层以上的网络数据都需要加密,详细的加密功能实现请参见加密模块。登录的网络信息结构如下:
内容
|
字节数
|
值(字节反存)
|
加密层及以下
|
XX
|
XX
|
空闲字节
|
4
|
0x00000000
|
自动登录标志
|
4
|
正常:0x33,自动:0x28
|
域名长度
|
2
|
若空为0,有值则乘2
|
用户名长度
|
2
|
若空为0,有值则乘2
|
密码长度
|
2
|
若空为0,有值则乘2
|
登录程序长度
|
2
|
若空为0,有值则乘2
|
登录路径长度
|
2
|
若空为0,有值则乘2
|
域名值
|
域名长度+2
|
2字节反存1字符,最后为2字节为0x0000
|
用户名值
|
用户名长度+2
|
2字节反存1字符,最后为2字节为0x0000
|
密码字符值
|
密码长度+2
|
2字节反存1字符,最后为2字节为0x0000
|
登录程序名称
|
登录程序长度+2
|
2字节反存1字符,最后为2字节为0x0000
|
登录路径值
|
登录路径长度+2
|
2字节反存1字符,最后为2字节为0x0000
|
5 图形连接模块:
在图形数据发送之前,服务器需要对此功能模块验证,验证内容是所有与图形相关的信息,包括鼠标设置、键盘输入、字体类型、画图命令格式、图形显示的各种类型。
根据已破解的信息显示,RDESKTOP原来并没有正确的赋值,因为它的返回值是没有固定的,对于服务器发送来的信息没有处理,而服务器在其关于图形方面的参数设置询问没有得到正确的回答时,则以固定的服务器端的参数进行设置。
5-1) 连接过程说明:服务器端首先发送关于图形方面的基本参数设置,客户端应该对这些设置进行反馈。此后rdesktop的处理是顺序发送同步信息,两个控制信息包,一个输入信息包,两个字体信息包;同时顺序接收一个同步信息包,两控制信息包,一个未知信息包;但redsktop并没有对接2收的信息包进行处理。
5-2)基本参数设2置信息包结构:
内容
|
字节数
|
值(字节反存)
|
加密层及以下
|
XX
|
XX
|
层后数据长度
|
2
|
XX
|
数据类型标志
|
2
|
11 00,表示是图形信息连接确认
|
基本通道号
|
2
|
ea 03,固定
|
基本通道号
|
2
|
ea 03,固定(share?)
|
未知数据1
|
2
|
01 00
|
ASCII信息长度
|
2
|
XX
|
基本参数长度
|
2
|
XX
|
ASCII信息
|
长度值+1
|
52 44 50 00,r->“RDP”,s->“MSTSC”
|
参数信息
|
2
|
r->0b 00,s->0d
|
空位
|
2
|
30或00
|
详细各组参数
|
组数
|
内容XX
|
5-3) 详细参数信息组类别:
每个类型的数据前2字节为类型,然后是长度,数据。以接收到优先作例介绍。
类型值
|
说明
|
01r
|
通用类型(general)
|
02r
|
位图类型(bitmap)
|
03r
|
命令(order)
|
04
|
位图缓存(bitmap cache)
|
05
|
控制(control)
|
07
|
活动(active)
|
08r
|
指针(pointer)
|
09r
|
共享(share)
|
0ar
|
颜色缓存(color cache)
|
0c
|
未知
|
0dr
|
未知
|
0e
|
未知
|
10
|
未知
|
12r
|
未知
|
14r
|
未知
|
16r
|
未知
|
40
|
未知
|
00r
|
未知
|
5-3-1) 通用类型(general->01)
内容
|
字节数
|
值(字节反存)
|
系统主类型
|
2
|
01 00,OS major type
|
系统次类型
|
2
|
03 00,OS minor type
|
协议版本号
|
2
|
02 00,protocol version
|
空数据1
|
2
|
00 00
|
压缩类型
|
2
|
00 00不压缩
|
空数据2
|
2
|
1d 04
|
更新属性
|
2
|
00 00
|
共享属性
|
2
|
00 00
|
压缩级别
|
2
|
00 00
|
空数据3
|
2
|
01 01
|
5-3-2) 位图类型(bitmap->02)
内容
|
字节数
|
值(字节反存)
|
最佳颜色深度
|
2
|
协商值
|
1颜色深度
|
2
|
01 00
|
2颜色深度
|
2
|
01 00
|
3颜色深度
|
2
|
01 00
|
桌面宽度
|
2
|
width
|
桌面高度
|
2
|
height
|
空位1
|
2
|
00 00
|
允许调整大小
|
2
|
01 00
|
位图压缩
|
2
|
01 00
|
未知数据1
|
2
|
00 00
|
未知数据2
|
2
|
01 00
|
空位2
|
2
|
00 00
|
5-3-3) 命令(order->03)
内容
|
字节数
|
值(字节反存)
|
Terminal desc1
|
16
|
0值
|
Terminal desc2
|
4
|
10 42 0f 00
|
缓存X间隔
|
2
|
01 00
|
缓存Y间隔
|
2
|
14 00
|
未知数据1
|
2
|
00 00
|
最大命令级别
|
2
|
01 00
|
字体数目
|
2
|
00 00
|
容量标志
|
2
|
22 00
|
命令支持格式
|
32
|
另见
|
文本容量标志
|
2
|
a1 06
|
未知数据2
|
6
|
00 00 40 42 0f 00
|
桌面缓存大小
|
4
|
40 42 0f 00
|
未知数据3
|
4
|
01 00 00 00
|
未知数据4
|
4
|
00 00 00 00
|
命令支持格式说明:共32个标志,只对已知标志进行说明。
字节位置,0-31
|
值含义,1代表支持,0代表不支持
|
0
|
Dest blt
|
1
|
Pat blt
|
2
|
Screen blt
|
3
|
Required for memblt
|
8
|
Line1
|
9
|
Line2
|
10
|
Rect
|
11
|
Desktop save
|
13
|
Memblt
|
14
|
Triblt
|
22
|
Polyline
|
27
|
Text2
|
5-3-4) 位图缓存(bitmap cache->04)
内容
|
字节数
|
值(字节反存)
|
未使用数据1
|
24
|
0值
|
Entries
|
2
|
58 02
|
Max cell size
|
2
|
00 01
|
Entries
|
2
|
2c 01
|
Max cell size
|
2
|
00 04
|
Entries
|
2
|
06 01
|
Max cell size
|
2
|
00 10
|
5-3-5) 控制(control->05)
内容
|
字节数
|
值(字节反存)
|
Control capability
|
2
|
00 00
|
Remote detach
|
2
|
00 00
|
Control interest
|
2
|
02 00
|
Detach interest
|
2
|
02 00
|
5-3-6) 活动(activer->07)
内容
|
字节数
|
值(字节反存)
|
Help key
|
2
|
00 00
|
Help index key
|
2
|
00 00
|
Extended help key
|
2
|
00 00
|
Window active
|
2
|
00 00
|
5-3-7) 指针(pointer->08)
内容
|
字节数
|
值(字节反存)
|
Color pointer
|
2
|
01 00
|
Cache size
|
2
|
19 00
|
未知数据1
|
2
|
19 00
|
5-3-8) 共享(share->09)
内容
|
字节数
|
值(字节反存)
|
基本通道号
|
2
|
ea 03
|
未知数据1
|
2
|
7d e1
|
5-3-9) 颜色缓存(color cache->0a)
内容
|
字节数
|
值(字节反存)
|
缓存大小
|
2
|
06 00
|
未知数据1
|
2
|
7d e1
|
5-3-10) 未知类型->d 收到:
内容
|
字节数
|
值(字节反存)
|
未知数据1
|
12
|
35 00 00 00 a1 06 00 00 40 42 0f 00
|
未知数据2
|
12
|
40 42 0f 00 44 e6 0a ba 93 53 19 ba
|
未知数据3
|
12
|
08 60 03 e1 6a 05 1a ba 4c e6 0a ba
|
未知数据4
|
12
|
4c a4 7d e1 08 a0 7d e1 01 00 00 00
|
未知数据5
|
12
|
08 a4 7d e1 00 00 00 00 44 e6 0a ba
|
未知数据6
|
12
|
54 f2 19 ba 08 a0 7d e1 38 e6 0a ba
|
未知数据7
|
12
|
00 00 00 00 08 00 0a 00 01 00 19 00
|
5-3-11) 未知类型->12 收到:
内容
|
字节数
|
值(字节反存)
|
未知数据1
|
2
|
01 00
|
未知数据2
|
2
|
00 00
|
5-3-12) 未知类型->14 收到:
内容
|
字节数
|
值(字节反存)
|
未知数据1
|
2
|
02 00
|
未知数据2
|
2
|
00 00
|
5-3-13) 未知类型->16 收到:
内容
|
字节数
|
值(字节反存)
|
未知数据1
|
12
|
01 00 00 00 6e 01 00 00 01 00 00 00
|
未知数据2
|
12
|
d0 07 40 bf 01 b0 83 bf 00 00 00 00
|
未知数据3
|
12
|
a4 e6 0a ba 5c db 4f 80 e6 01 00 00
|
此博文原地址为:http://blog.chinaunix.net/u/2244/showart_2154207.html
分享到:
相关推荐
### RDP协议详细解析 #### 一、前言 RDP(Remote Desktop Protocol)协议是微软为Windows系统设计的一种远程桌面通信协议,旨在提供一种安全的远程访问方式,让用户能够远程控制服务器或另一台计算机。从Windows ...
本文将详细解析文档中的关键知识点,包括RDP协议的背景介绍、更新内容以及这些变化的原因。 #### 二、RDP协议简介 RDP协议是一种面向连接的数据传输协议,旨在提供一种可靠的端到端数据传输服务。它通过一系列机制...
**二、RDP协议结构解析** #### 1. TPKT层(Transport Layer Protocol) RDP协议在其传输过程中采用了TPKT(Transport Layer Protocol)作为其传输层协议之一。TPKT是一种用于定义网络传输层协议的数据包格式,主要...
### RDP协议官方文档知识点解析 #### 一、概述 **RDP协议(Remote Desktop Protocol)** 是由微软开发的一种专用于远程桌面连接的技术标准。它允许用户通过网络连接到另一台计算机上,并以图形界面的方式操作这台...
### NC环境中的RDP协议解析 #### 一、NC环境基础介绍 ##### 1.1 基本概念与工作原理 网络计算机(Network Computer,简称NC),是一种依赖网络提供大部分资源来运行的终端计算机。它摒弃了传统PC中的硬盘、软盘...
开源项目FreeRDP是实现RDP协议的一个重要实现,它提供了一个跨平台的远程桌面客户端,支持多种操作系统,包括Windows、Linux、macOS等。 FreeRDP源码解析: 1. **项目结构**: FreeRDP的源码结构通常包含多个模块...
结合提供的文档,"RDP解析"可能详细讲解了上述各部分的工作原理和交互流程。通过阅读这些文档,你可以深入了解RDP如何处理数据包,如何进行安全通信,以及如何优化远程桌面体验。虽然RDP协议分析可能涉及的技术细节...
RDP协议支持多种可选通道,如剪贴板、音频、打印等。在FreeRDP中,这些通道由独立的模块实现,每个模块负责特定的功能。在连接过程中,客户端会根据配置决定哪些通道需要开启,并调用相应的初始化函数来建立这些...
1. RDP协议:FreeRDP实现了微软的远程桌面协议,这是一种用于远程桌面访问的标准,支持多种功能,如音频播放、打印、文件传输等。RDP协议在不断演进,FreeRDP需要跟进行业标准,确保与最新版本的服务器兼容。 2. ...
FreeRDP支持RDP协议的安全层,包括TLS和NLA(网络级身份验证)。这些安全措施确保了数据传输的隐私和完整性。 ### 8. 多平台支持 FreeRDP的跨平台特性使其成为移动设备和嵌入式系统的理想选择。例如,可以在...
RDP协议由多个子组件组成,如输入、输出、会话管理等,这些都可能在这个文件中找到。 4. **orders.c**:RDP订单(Orders)是RDP中用于描述图形操作的一种编码方式,比如绘制文本、线条、矩形等。这个文件应该实现了...
另一方面,没有安全的开源RDP协议实现。 最后,我想构建一个高度安全,跨平台和高度可定制的客户端。 安装 要将rdp-rs用作项目中的库,请将以下内容添加到Cargo.toml : [dependencies] rdp-rs = "0.1.0" 您可以...
1. **协议理解与解析**:深入理解RDP协议的工作原理是开发的基础。这包括但不限于如何建立连接、数据传输方式等。 2. **安全机制**:RDP框架的安全性至关重要。开发过程中需要考虑加密算法的选择、认证机制的设计等...
在C++和C#中实现RDP客户端功能涉及多个关键知识点,包括网络通信、协议解析和图形界面设计。 1. **网络通信基础**:RDP客户端首先需要与远程服务器建立TCP连接。这涉及到套接字编程,理解TCP/IP协议栈的工作原理,...
RDP(Remote Desktop Protocol)是微软提供的一种远程桌面连接协议,允许用户通过网络访问和控制远程计算机。在处理RDP文件时,有时我们需要在其中设置密码以便安全地进行远程访问。RDP文件实际上是一个文本文件,...
3. **协议解析**:RDP协议有自己的数据结构和报文格式,源码会展示如何解析和构建这些报文,以便正确地与远程桌面服务进行交互。 4. **事件驱动编程**:易语言支持事件驱动编程模型,源码中可能包含事件的定义和...
3. **RDP协议**:理解RDP的工作原理,包括连接流程、认证机制以及.RDP文件的结构和配置选项。 4. **文件操作**:在VC++中读写文件,特别是.RDP文件,需要知道如何解析和编辑这些文件的格式。 5. **安全性**:确保...
RDP协议的核心在于其分层结构,主要包括数据封装、传输和会话管理等几个关键部分。在数据封装层,RDP将用户的键盘输入、鼠标移动和屏幕显示等操作转化为数据包进行传输。这些数据包经过压缩和加密处理,确保了数据的...
同时,它还处理用户的输入事件,如键盘、鼠标操作,将这些事件编码成RDP协议数据包,然后发送回远程服务器。 在源码中,开发者可以找到以下关键模块: 1. 连接管理:建立和维护RDP连接,包括身份验证、会话初始化...
对于非开发者的用户信息,如果是在寻找关于Remote Desktop连接的常见问题解答,可以参考微软提供的“Remote Desktop Connection: frequently asked questions”文档,这将提供更面向用户的指导。 总的来说,RDS和...