最新RDP协议详细解析.docx
- 文档编号:13410564
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:42
- 大小:71.79KB
最新RDP协议详细解析.docx
《最新RDP协议详细解析.docx》由会员分享,可在线阅读,更多相关《最新RDP协议详细解析.docx(42页珍藏版)》请在冰点文库上搜索。
最新RDP协议详细解析
RDP协议详细解析
RDP协议详细解析
(一)
RDP协议详细解析
一前言
二概述
三同络层次
四各连接模块说明
五各功能模块说明
六rdpwin结构、数据流说明
七总结
一、前言
windows从NT开始提供终端服务,它是微软买来的网络协议技术(Citrix),服务器端要安装、配置,客户端要连接程序。
终端服务使任何一台有权限的终端机,用已知的账号登录服务器,可以使用账号内的资源,包括软件,硬件资源;同时,在协议升级后,客户端连接后可以使用本地的资源,包括本地打印机、声音本地回放,本地磁盘资源和本地硬件接口。
所有的计算都在服务器端进行,客户端只需要处理网络连接、接收数据、界面显示和设备数据输出。
目前,关于RDP服务的linux客户端程序有winconnect,linrdp,rdesktop,前两个没有源码,但redsktop已经由原来的个人开发后公开代码演变成现在的项目组开发。
由于项目的跨平台开发需要,我们在开始时进行过单独的协议破解工作,破解后,我们的程序在原来的RDP4.0基础上扩展到5.1,实现了16位颜色,声音本地回放,映射本地打印机。
对于当前的终端机,这些功能完全满足需要,因此其他功能暂不便破解实现。
为防患RDP协议的升级而影响我们破解而得的终端程序的功能性,需要对RDP协议的变化进行跟踪,对et-rdesktop进行优化、完善。
鉴于当前的工作安排,将跟踪redsktop项目的进展,以提炼功能为我所用和完善现有程序。
二、概述
1版本功能说明:
RDP协议在终端服务推出后已有四个版本,4.0、5.0、5.1、5.2。
一般来说,版本是根据windows的版本确定的。
从客户端的角度来说,5.X版本间提供的功能差别不是很大,相对于4.0版本,它提供了用户带密码直接登录、客户端驱动器资源映射、客户端音频回放、最高24位色显示和符合FIPS加密级别连接。
另外,从4.0协议开始变提供的客户羰功能有:
高、中、低三种数据加密级别,客户端自定义初始登录环境,客户端打印机映射,客户端LPT端口映射,客户端com端口映射,剪贴板映射,客户登录的个性化设置(包括键盘、显示界面大小等)。
2、协议层次说明:
通过破解研究,我们掌握了RDP协议的基本层次结构。
基本上,RDP协议的每一层次上都标示出其层内的数据长度值。
对于层次划分,主要是指RDP协议网络功能数据传送时通常都包含的各层次,而对于各层次内所实现的单层次连接等功能将做为单独的模块来进行阐述。
网络连接层:
RDP协议建立在TCP/IP协议之上,由于传输的数据量比较大,因此在协议的底层首先定义一层网络连接层。
它定义了一个完事的RDP数据逻辑包,以避免由于网络包长度过长而被分割使数据丢失。
ISO数据层:
在网络连接层之上是ISO数据层,它表示RDP数据的正常连接通信。
虚拟通道层:
在ISO数据层之上,RDP协议定义一个虚拟通道层,用以拆分标示不同虚拟通道的数据,加快客户端处理速度,节省占用网络接口的时间。
加密解密层:
在虚拟通道层之上,RDP定义一个数据加密解密层。
此层用于对所有的功能数据进行加密、解密处理。
功能数据层:
在加密解密层之上是功能数据,画面信息,本地资源转换,声音数据,打印数据等所有的功能数据信息都在此层进行处理。
另外,根据数据类型的不同,这些数据都有各自不同层次的分割,他们的内部层次结构将在各个功能模块中进行阐述。
3其它说明:
本协议解析中所提到的各层次结构都是指RDP功能数据正常传送时的各底层结构,在功能数据传送前的各层次的建立连接过程及其结构、实现都归于模块实现来进行说明。
对于服务器端的各种设置以及个版本间的内部实现差异请看RDP帮助文档,以及rdpwin开发文档。
4连接过程说明:
1)客户端连接服务器
2)ISO数据层建立连接
3)发送初始协议相关信息,接收加密、解密密钥
4)虚拟通道申请
5)加密形式发送客户端系统信息,同时验证加密协议
6)平台软件证书验证
7)各功能建立连接,各功能数据传输,功能实现
三、网络层次:
1网络连接层:
在RDP协议网络实现连接中,本层的数据格式是固定的。
内容
协议版本号
保留
此逻辑包长度
字节数
1
1
2
值
当前版本皆是3
0
逻辑长度,从版本号开始到本包结束
2ISO数据层:
在RDP功能数据网络传输中,本层的数据格式是固定的。
内容
单层数据长度
ISO包类型
标志
字节数
1
1
1
值
2,从下字节开始计算
0xf0,表示数据
0x80
3虚拟通道层:
虚拟通道层用于在正常的网络连接数据之上,中个虚拟通道的功能数据。
此层次的连接另见初始连接模块与通道申请模块,在此只说明正常数据连接时的层次结构。
1)结构信息:
内容
类型
虚拟通道个数
虚拟通道号
标志
字节数
1
2
2
1
值
0x64/0x68
0x0001
0x03eb至0x03ee
0x70/0xf0
2)类型说明:
0x64:
客户端发送数据
0x68:
客户端接收数据
3)用户号说明:
本次连接的用户号,服务器发送的是0x0001;客户端所发送的值是初始连接时请示通道后服务器同意开通的虚拟个数。
4)虚拟通道号说明:
虚拟通道号是本层次以上所发送的功能数据所在的虚拟通道号,其由初始连接通道申请建立时确定。
5)标志说明:
客户端发送的标志为0x70;服务器端发送的标志,当功能数据是图像是(由通道号识别),其值为0x70,当功能数据是其它数据时,其值为0xf0。
4加密解密层:
加密解密层用于对网络连接中所发送、接收的数据进行加密、解密。
为保证数据和系统的安全性,对网络数据进行加密传输是比较常用且必然的,RDP协议在此层对实际的功能数据进行加密。
1)结构信息:
内容
单层及层上数据总长度
加密标志
未知标志
数字签名
字节数
1-2
2
2
8
值
从下字节开始计算
0x0800
0x1000/0x0203
顺序取得
2)总长度说明:
若长度大于0x7f,则长度以两字节表示,并按位与0x8000。
这是由于版本升级赞成的格式不统一,长度不定,当前版本认为长度值不大于0x0fff(4095)因此只用长度值并按位与0x8000实现版本兼容,在版本升级后会以0x8x表示长度值的字节数,其中8表示非1字节,x表示具体的字节个数。
3)加密标志说明:
RDP协议要求在正常的功能连接实现之前,首先licence认证,其标志为0x8xxx,且其后数据不同于正常功能数据传输式的加密层格式,可以视licence认证为加密解密层的建立连接过程。
另外功能数据的加密、解密的密钥是在初始连接时获得的,而加密解密功能的实现由加密、解密模块阐述。
4)未知标志说明:
服务器端发送过来的未知数据有两种,目前不知其意,客户端在发送数据时将其置为0x0000值。
5)数字签名说明:
对所有的加密数据在此放置8字节数字签名。
其值由RC4会话键值和功能数据经过SHA运算和MD5运算得到。
5功能数据层:
功能数据是客户端与服务器进行交互的真正数据。
他们都有各自固定格式,连接、控制方式,具体情况见各功能模块的说明。
根据当前我们所掌握的信息,RDP协议将图像信息、声音信息、设备信息、剪贴板内容都各自以单一的虚拟通道进行传送,而打印机映射,磁盘映射,端口映射都做为设备信息的内容进行处理。
限于当前左上角工作和项目工作的限度,设备信息中只考虑了打印机映射的部分,对于打印机信息与其他的设备相关的信息没有进行有效隔离区分,而本协议说明中相关的连接信息、数据传送都只认为是打印机映射的内容。
四、各连接模块说明:
1ISO连接模块:
在客户端与服务器的网络套接口建立之后,需要首先建立RDP协议底层连接,得到连接确认后才能正常通信。
具体实现如下:
1)连接过程说明:
初始连接时,在网络套接口TCP连接建立之后中,客户端首先进行连接请求,当收到连接确认后表示网络连接层连接建立,随后开始传送RDP数据。
2)连接请求通信数据:
内容
层内数据长度
RDP包类型
未知1
未知2
标志
其它
字节数
1
1
2
2
1
不定
值
从下一字节开始计算
0xd0或0xe0
0x0000
另见
0x00
另见
3)RDP包类型说明:
0xe0:
客户端连接请求
0xd0:
服务器确认连接
4)未知数据2说明:
0x0000:
客户端请求连接的值
0x1234:
服务器确认请求的值
5)其它数据说明:
win2003客户端在请求时附带了如下字符—“Cookie:
mstshash=Administrator0x0d0x0e”,目前不知其意。
其中Administrator为自动登录名,当其长度超过12字节时,只保留前12字节,其它字符都固定不变。
2协议信息初始模块:
当基本的RDP连接建立后,需要进行客户端与服务器的系统环境、RDP连接环境的信息交流与连接确认。
2-1)发送包结构:
内容
字节数
值
ISO数据层及以下
XX
XX
协议信息初始发送标志
2
0x7f65
其后数据长度
3
0x820xlength
第一部分未知数据
7
040004000101ff
第二部分未知数据
XX
三组协议参数
第三部分未知数据
XX
四种连接参数
2-1-1)第一部分未知数据结构:
内容
字节数
值
Callingdomain
2
0x0400
Calleddomain
2
0x0400
未知数据
2
0x0101
标志
1
0xff
2-1-2)第二部分未知数据结构:
内容
字节数
值
协议适合参数
2+4+7*(2+参数值占字节数)
标志,长度,8个参数值
协议最小参数
2+4+7*(2+参数值占字节数)
标志,长度,8个参数值
协议最大参数
2+4+7*(2+参数值占字节数)
标志,长度,8个参数值
说明:
3组参数标志都是0x30,8个参数值的标志都是0x20
含义
适合值
最小值
最大值
虚拟通道数
0x22=34
0x01
0xffff
用户数
0x02
0x01
0xfc17=64535
Token值
0x00
0x01
0xffff
优先数(priorities)
0x01
0x01
0x01
遍及数(throughput)
0x00
0x00
0x00
顶点数(height)
0x01
0x01
0x01
网络逻辑数据包长度
0xffff
0x0420=1056
0xffff=65535
版本号
0x02
0x02
0x02
2-1-3)第三部分未知数据结构:
内容
字节数
值
本部分标志、数据长度
4
0x040x820xlength1
未知数据1
4
000500147c0001
余下的数据长度
2
0x8000|length2
未知数据2
8
000800100001c000
未知数据3
4
44756361–“Duca”
4组数据
XX
各功能模块连接信息
2-1-3-1:
基本信息
内容
字节数
值(反字节存储)
标志
2
0xc001
长度
2
这一组数据的长度
Licence版本
2
1,4,5;lincence标志升级
未知数据1
2
0x0008
窗口宽度、高度
4
宽度,高度
未知数据2
4
0xca01,0xaa03
Keylayout
4
0x00000409
客户端系统组件数
4
419,2195,2462
客户端机器名
32
2字节存储1个字符
未知数据3
12
0x04,0x00,0x0c各四个字节
未知数据4
64
都是0
未知数据5
8
01ca010000000000
图形颜色位(最大值)
2
24,16,15,8
未知数据6(疑最小位)
2
0700
未知数据7
4
01000000
基本信息返回值多少且固定,认为在具体连接时有更多返回信息。
加密信息需要取回加密级别与密钥;通道信息则返回基本图形信息的通道号和其他虚拟通道号,需要另行申请。
2-2-1-1)基本信息
内容
字节数
值(字节反存)
标志
2
0xc001
本组信息长度
2
0x0008(固定)
未知数据1
2
0x0004
未知数据2
2
0x0008
2-2-1-2)通道信息
内容
字节数
值(字节反存)
标志
2
0xc003
本组信息长度
2
XX
需要单独开辟的通道数
2
若无需申请则不存在
通道号组
通道数*2
2个字节存放一个通道号
空闲字节
2
0x0000
2-2-1-3)加密信息
内容
字节数
值
标志
2
0xc002
本组信息长度
2
XX
加密位长度
4
1->40位,2->128位
加密级别
4
1->低,2->中,3->高
服务器随机数长度
4
目前都是32字节
RSA信息长度
4
从随机数结束开始
服务器端随机数
32
XX
RSA信息
XX
XX
密钥信息的类型
4
1->RDP4或0x80000002->X.509
2-2-1-3-1)RDP4类型密钥
内容
字节数
值
未知数据1
8
01000000 01000000
公钥标志
2
0x0006
长度
2
length公钥信息
RSA1标志
4
52534131--“RSA1”
公钥模数+衬垫长度
4
48000000-> =64+8
未知数据2
8
000200003f000000
公钥指数(exponent)
4
01000100
公钥模数值(modulu)
64
XX
公钥衬垫值(pad)
8
00000000 00000000
公钥签名标志,长度
4
0x0008 length(=0x48)
签名模数值
64
XX
签名衬垫值
8
00000000 00000000
2-2-1-3-1-2)公钥信息数字签名—X509类型密钥
内容
字节数
值
证书个数
4
不少于2个
无效证书
XX
若证书大于2个,都被忽略,无效
CA证书
XX
XX
服务器证书
XX
XX
Padding值
16
全是0
对于win2003操作系统,当授权组件被更改时,此处的密钥变为X509类型。
对于客户端,只提取服务器证书部分的相关信息,以得到服务器随机数。
由于对于密钥的处理是采用通用的加密算法与标准,因此在此不予深入的讨论。
3通道申请模块
对于RDP连接,各种功能数据都是通过单独的虚拟通道传输的。
初始连接后,在进一步的信息通信之前,需要开辟相应的通道。
1)过程说明
客户端首先发送一个建立连接独立空间请求,再发送一个用户绑定请求,若服务器同意,将发送用户绑定确认,且含有需要申请的虚拟通道总数totalchannel。
随后客户端申请虚拟通道。
虚拟通道号从1001+2=1003开始到1001+totalchannel结束,每次申请都应返回一个申请结果。
2)建立连接独立空间请求结构:
内容
ISO数据层以下
请求标示
高度值
间距
字节数
XX
1
2
2
值
XX
0x04
0x0001
0x0001
3)用户绑定请求结构:
内容
ISO数据层以下
请求标示
字节数
XX
1
值
XX
0x28
4)用户绑定确认结构:
内容
ISO数据层以下
请求标志
虚拟通道总数
字节数
XX
2
2
值
XX
0x2e00
totalchannel
5)申请虚拟通道号结构
内容
ISO数据层以下
申请标志
虚拟通道总数
虚拟通道号
字节数
XX
1
2
2
值
XX
0x38
totalchannel
Num,
6)通道申请确认结:
内容
ISO数据层以下
确认标志
通道总数
申请通道
申请通道
字节数
XX
2
2
2
2
值
XX
0x3e00
totall
num
num
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
1100,表示是图形信息连接确认
基本通道号
2
ea03,固定
基本通道号
2
ea03,固定(share?
)
未知数据1
2
0100
ASCII信息长度
2
XX
基本参数长度
2
XX
ASCII信息
长度值+1
52445000,r->“RDP”,s->“MSTSC”
参数信息
2
r->0b00,s->0d
空位
2
30或00
详细各组参数
组数
内容XX
5-3)详细参数信息组类别:
每个类型的数据前2字节为类型,然后是长度,数据。
以接收到优先作例介绍。
类型值
说明
01r
通用类型(general)
02r
位图类型(bitmap)
03r
命令(order)
04
位图缓存(bitmapcache)
05
控制(control)
07
活动(active)
08r
指针(pointer)
09r
共享(share)
0ar
颜色缓存(colorcache)
0c
未知
0dr
未知
0e
未知
10
未知
12r
未知
14r
未知
16r
未知
40
未知
00r
未知
5-3-1)通用类型(general->01)
内容
字节数
值(字节反存)
系统主类型
2
0100,OSmajortype
系统次类型
2
0300,OSminortype
协议版本号
2
0200,protocolversion
空数据1
2
0000
压缩类型
2
0000不压缩
空数据2
2
1d04
更新属性
2
0000
共享属性
2
0000
压缩级别
2
0000
空数据3
2
0101
5-3-2)位图类型(bitmap->02)
内容
字节数
值(字节反存)
最佳颜色深度
2
协商值
1颜色深度
2
0100
2颜色深度
2
0100
3颜色深度
2
0100
桌面宽度
2
width
桌面高度
2
height
空位1
2
0000
允许调整大小
2
0100
位图压缩
2
0100
未知数据1
2
0000
未知数据2
2
0100
空位2
2
0000
5-3-3)命令(order->03)
内容
字节数
值(字节反存)
Terminaldesc1
16
0值
Terminaldesc2
4
10420f00
缓存X间隔
2
0100
缓存Y间隔
2
1400
未知数据1
2
0000
最大命令级别
2
0100
字体数目
2
0000
容量标志
2
2200
命令支持格式
32
另见
文本容量标志
2
a106
未知数据2
6
000040420f00
桌面缓存大小
4
40420f00
未知数据3
4
01000000
未知数据4
4
00000000
命令支持格式说明:
共32个标志,只对已知标志进行说明。
字节位置,0-31
值含义,1代表支持,0代表不支持
0
Destblt
1
Patblt
2
Screenblt
3
Requiredformemblt
8
Line1
9
Line2
10
Rect
11
Desktopsave
13
Memblt
14
Triblt
22
Polyline
27
Text2
5-3-4)位图缓存(bitmapcache->04)
内容
字节数
值(字节反存)
未使用数据1
24
0值
Entries
2
5802
Maxcellsize
2
0001
Entries
2
2c01
Maxcellsize
2
0004
Entries
2
0601
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 RDP 协议 详细 解析