RDP协议详细解析docx.docx

上传人:b****8 文档编号:27719524 上传时间:2023-07-04 格式:DOCX 页数:58 大小:36.23KB
下载 相关 举报
RDP协议详细解析docx.docx_第1页
第1页 / 共58页
RDP协议详细解析docx.docx_第2页
第2页 / 共58页
RDP协议详细解析docx.docx_第3页
第3页 / 共58页
RDP协议详细解析docx.docx_第4页
第4页 / 共58页
RDP协议详细解析docx.docx_第5页
第5页 / 共58页
点击查看更多>>
下载资源
资源描述

RDP协议详细解析docx.docx

《RDP协议详细解析docx.docx》由会员分享,可在线阅读,更多相关《RDP协议详细解析docx.docx(58页珍藏版)》请在冰豆网上搜索。

RDP协议详细解析docx.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1