RDP协议详细解析docx.docx
《RDP协议详细解析docx.docx》由会员分享,可在线阅读,更多相关《RDP协议详细解析docx.docx(58页珍藏版)》请在冰豆网上搜索。
RDP协议详细解析docx
RDP协议详细解析
(一)
RDP协议详细解析
一前言
二概述
三同络层次
四各连接模块说明
五各功能模块说明
六rdpwin结构、数据流说明
七总结
一、前言
windows从NT开始提供终端服务,它是微软买来的网络协议技术(Citrix),服务器端要
安装、配置,客户端要连接程序。
终端服务使任何一台有权限的终端机,用已知的账号登录服务器,可以使用账号内的资源,包括软件,硬件资源;同时,在协议升级后,客户端连接后可以使用本地的资源,包括本地打印机、声音本地回放,本地磁盘资源和本地硬件接口。
所有的计算都在服务器端进行,客户端只需要处理网络连接、接收数据、界面显示和设备数
据输出。
目前,关于RDP服务的linux客户端程序有winconnect,linrdp,rdesktop,前两个没有
源码,但redsktop已经由原来的个人开发后公开代码演变成现在的项目组开发。
由于项目
的跨平台开发需要,我们在开始时进行过单独的协议破解工作,破解后,我们的程序在原来
的基础上扩展到,实现了16位颜色,声音本地回放,映射本地打印机。
对于当前的终端机,
这些功能完全满足需要,因此其他功能暂不便破解实现。
为防患RDP协议的升级而影响我
们破解而得的终端程序的功能性,需要对RDP协议的变化进行跟踪,对et-rdesktop进行优
化、完善。
鉴于当前的工作安排,将跟踪redsktop项目的进展,以提炼功能为我所用和完
善现有程序。
二、概述
1版本功能说明:
RDP协议在终端服务推出后已有四个版本,、、、。
一般来说,版本是根据
windows
的版本确定的。
从客户端的角度来说,版本间提供的功能差别不是很大,相对于版本,它提供了用户带
密码直接登录、客户端驱动器资源映射、客户端音频回放、最高24位色显示和符合FIPS加
密级别连接。
另外,从协议开始变提供的客户羰功能有:
高、中、低三种数据加密级别,客户端自定
义初始登录环境,客户端打印机映射,客户端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-2228
值从下字节开始计算0x08000x1000/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)连接请求通信数据:
内容层内数据长度
字节数1
值从下一字节开始计算
RDP包类型
1
0xd0或0xe0
未知1
2
0x0000
未知
2
另见
2
标志
1
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
00050014
7c0001
余下的数据长度
2
0x8000|length2
未知数据2
8
00080010
0001c000
未知数据3
4
44756361–“Duca”
4组数据
XX
各功能模块连接信息
2-1-3-1:
基本信息
内容
标志
长度
Licence版本
未知数据1
窗口宽度、高度
未知数据2
Keylayout
客户端系统组件数
客户端机器名
未知数据3
未知数据4
未知数据5
图形颜色位(最大值)未知数据6(疑最小位)未知数据7
基本信息返回值多少且固定,
字节数
值(反字节存储)
2
0xc001
2
这一组数据的长度
2
1,4,5;lincence标志升级
2
0x0008
4
宽度,高度
4
0xca01,0xaa03
4
0x00000409
4
419,2195,2462
32
2字节存储1个字符
12
0x04,0x00,0x0c各四个字节
64
都是0
8
01ca010000000000
2
24,16,15,8
2
0700
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或0x->
2-2-1-3-1)RDP4类型密钥
内容
字节数
值
未知数据1
8
0100000001000000
公钥标志
2
0x0006
长度
2
length公钥信息
RSA1标志
4
52534131--“RSA1”
公钥模数+衬垫长度
4
48000000->=64+8
未知数据2
8
000200003f000000
公钥指数(exponent)
4
01000100
公钥模数值(modulu)
64
XX
公钥衬垫值(pad)
8
0000000000000000
公钥签名标志,长度
4
0x0008length(=0x48)
签名模数值
64
XX
签名衬垫值
8
0000000000000000
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
值XX0x040x00010x0001
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
he