RDP协议详细解析(五)

五、各功能模块说明:
任务标志说明:适用于所有非图形通道数据。
00 00 00 00
01 00 00 00
02 00 00 00
03 00 00 00
00 00 03 00
传输中
传输开始
传输结束
传输控制
传输反馈
1 licence身份谁模块:
在加密、解密验证通过以后,服务器发送 licence信息进行系统的身份认证。身份证认证的加密、解密系统也是用 RSA/RC4体系,但是与网络通信中的加密、解密系统分开的。 licence认证中的密钥是临时的、单独的。
1-1) 连接过程说明:服务器端首先发送 demand包,内容是随机数和一些系统相关的字符信息;客户端需要回复 requset包,内容是随机数、空闲值、主机名、用户名;服务器再发送 authreq包,内容包括 token值和 signature值;客户端需要回复 authresq包,内容包括 token值、 hwid值和 signature值。服务器通过后会发送 result包,表明 licence认证通过。
1-2) demand包: r
内容
字节数
加密层
4
80 02 86 00
Licence标志
1
01,表示 demandlicence认证要求
版本
1
4.0->025.x->03
本层长度
2
86 00
服务器随机数
32
XX
未知数据 1
4
02 00 05 00
公司信息长度
4
2c 00 00 00
公司信息
0x2c
Microsoft Corporation 0”, 2字节表示 1字符
未知 2长度
4
08 00 00 00
未知数据 2
8
41 00 30 00 32 00 00 00,“ A02 0x 0
未知数据 3
8
0d 00 04 00 01 00 00 00
未知数据 4
8
5c f5 00 00  01 00 00 00
未知数据 5
4
0e 00 0e 00
网址信息
0x0e
Microsoft.com 0”, 1字节表示 1字符
1-3) request包: s
内容
字节数
加密层
4
80 00 00 00
Licence标志
1
13,表示 requestlicence认证要求回复
版本
1
4.0->025.x->03
本层长度
2
8a 00
未知数据 1
8
01 00 00 00  00 00 01 ff
客户端随机数
32
全是 0
(mod+pad)长度
4
48 00 00 00
Modulus
64
全是 0
Padding
8
全是 0
用户标志
2
0f 00
用户名长度
2
XX
用户名
长度值
1字节表示 1字符,例“ YYY
主机标志
2
10 00
主机名长度
2
XX
主机名
长度值
1字节表示 1字符,例“ YYY
1-4) authreq包: r
内容
字节数
加密层
4
80 02 26 00
Licence标志
1
02,表示 authreqlicence认证密钥
版本
1
4.0->025.x->03
本层长度
2
26 00
未知数据 1
6
46 53 f9 65 f1 7b
Token长度
2
0a 00
Token
0x0a
XX10字节
Signature
0x10
XX16字节
1-5) authreq包: s
内容
字节数
加密层
4
80 00 00 00
Licence标志
1
15,表示 authreqlicence认证密钥
版本
1
4.0->025.x->03
本层长度
2
3a 00
标志
2
01 00
Token长度
2
0a 00
Token
0x0a
XX10字节
标志
2
01 00
Hwid长度
2
14 00
Hwid
0x14
XX20字节
Signature
0x10
XX16字节
 
1-6) result包: r 不处理
内容
字节数
加密层
4
80 02 10 00
Licence标志
1
ff,表示 result,licence认证密钥
版本
1
4.0->025.x->03
本层长度
2
10 00
未知数据 1
4
07 00 00 00
未知数据 2
4
02 00 00 00
未知数据 3
4
04 00 00 00
2 加密解密模块:
在初始模块中对网络通信连接中所设定的加密信息提交给服务器。而 RDP协议实现的加密形式是 RSA/RC4
当取得初始的加密、解密密钥 (在发送初始连接信息后得到的 ),在初始连接结束后,客户端需要发送系统登录的初始信息,用以验证客户端加密、解密 的正确性。此后经过 licence认证,通过认证后,所有的加密数据都经加密解密层处理。同时,密钥需要保存,因为加密数据包需要连续的正确加密或解密才能得到正确的数据。
3 图形处理模块
在图形处理中,客户端将所有的事件转换为固定格式的网络数据发送到服务器,服务器将处理的结果以图片形式发回服务器。在图形处理模块内部又分了较多的层次,叙述下面:
3-1) 第一级层次
内容
字节数
层内数据长度
2
XX
第一级类型标记
2
17 00 代表具体数据, 0000时跳过后 4字节
基本通道号
2
ea 03,固定
基本通道号
2
ea 03,固定 (share)
未知数据 1
2
01 00
网络包顺序号
2
XX
此后数据长度
2
XX
具体数据类型
1
见说明
数据压缩类型
1
00 不压缩
数据压缩长度
2
00
具体数据类型说明:
含义说明
2
图形更新
27
鼠标指针操作
34
响铃
38
登录信息
47
断开重连提示
3-2) 图形更新:前 2字节是更新的类型
含义说明
0
画图命令
1
位图
2
调色板
3
同步,锁定
3-2-1) 画图命令:其后是若干组画图命令
内容
字节数
未知数据 1
2
XX
画图命令组数
2
XX
未知数据 2
2
XX
每组画图命令
XX
 
说明:对于每一组命令,他们都取相应的系统状态,根据具体的情况进行处理。特别说明的是,颜色值是固定的 3字节,根据深度值取相应的就可以。
3-2-2) 位图:前 2字节是图片的数量。其后是图片数据,取出后画图片。
每一张图片的结构:
内容
字节数
图片水平左坐标
2
XX
图片垂直上坐标
2
XX
图片水平右坐标
2
XX
图片垂直下坐标
2
XX
图片水平点数
2
XX
图片垂直点数
2
XX
图片点深度值
2
XX
图片压缩标志
2
00 表示不压缩
压缩数据长度
2
XX
压缩数据段内容段据 2-1
XX
XX
压缩数据段内容: compress & 0x400 为真时 size=压缩数据长度,其后只有数据
内容
字节数
未知数据 1
2
XX
压缩数据长度
2
XX
行长度
2
XX
final_size
2
XX
压缩数据内容
XX
XX
3-2-3) 调色板:用服务器传过来调色板代替系统的调色板。当 256色时才有
内容
字节数
未知数据 1
2
XX
颜色组数
2
一般是 256,即 00 001
未知数据 2
2
XX
调色颜色值
3
每组值 3字节,分别为红绿蓝色值
3-3) 鼠标指针操作
内容
字节数
操作类型
2
见说明
空位
2
XX
鼠标指针操作类型说明:
含义说明
1
取初始值
3
移动
6
新状态
7
缓存
3-3-1) 鼠标指针操作取初始值处理:当是 00 00时设鼠标为不可见状态。
内容
字节数
取初始值类型
2
00 00
3-3-2) 鼠标指针操作移动处理:将鼠标移动到指定位置
内容
字节数
鼠标移动目标水平位置
2
X
鼠标移动目标垂直位置
2
Y
3-3-3) 鼠标指针操作新状态处理:创建新状态到鼠标状态缓存,并设置状态。
内容
字节数
鼠标缓存号
2
新的鼠标状态缓存号
水平位置
2
X
垂直位置
2
Y
宽度
2
XX
高度
2
XX
掩码长度
2
XX
数据长度
2
XX
掩码值
掩码长度
XX
数据值
数据长度
XX
3-3-4) 鼠标指针操作缓存处理:设置鼠标为系统已存的状态号的状态。
内容
字节数
鼠标缓存号
2
已存在的鼠标状态缓存号
3-4) 响铃:直接系统响铃发声处理
3-5) 登录信息:忽略,跳过
3-6) 断开重连提示:忽略,跳过
4打印数据模块
RDP协议提供本地打印机映射到服务器功能。在用户通过终端连接服务器并映射本地打印机后,可在远程主机上使用本地的打印机。客户端需要将本地打印机的型号传送给服务器,只有当前的服务器含有此打印机型号驱动时,打印机才会映射成功,在通道建立之后,对于打印机映射还需要信息交互确认。
服务器把需要打印的数据发送到打印机所在的网络连接终端,通过单独的虚拟通道传送到客户端,由客户端负责打印数据的处理。在终端连接初始建立时,需要发送映射本地打印机的请求,服务器接受映射后,客户端应申请相应的虚拟通道以进行打印数据的相关操作。将要打印的数据在网络传输中,是以 PRN格式存放的。在用本地映射的打印机进行打印工作时,需要对打印机进行相应的连接,打印数据以 PRN的形式从服务器发送到客户端,客户端只要把他们直接输出到打印机端口即可打印。对于打印的数据及其网络协议本身的控制信息需要客户端能够正确的分离、操作。
4-1) 本地设备操作说明:设备的每一个任务操作,服务器都会发送请求,当任务操作结束时,需要客户端正确回复确认。对于设备的每一次具体任务,都需要首先创建任务,当得到确定的答复以后才可能继续任务。任务创建后执行具体的内容。设备的功能操作又分读、写和控制;对于每一种功能操作,任务数据分开始、传输中和结束三种。需要顺序传送。每一小段数据传输结束后需要回复确认。当任务结束后,需要回复确认。
4-2) 任务请求通用结构:
内容
字节数
层内数据长和标志
8
XX
任务标志
4
见说明
ASCII信息
4
IRDr
设备标识
4
01 00 00 00 ---打印机设备
设备号
4
00 00 00 00 ---创建时为空值
赋予的 ID
4
01 00 00 00
设备操作主类型
4
见说明
设备操作次类型
4
00 00 00 00 ---打印机为空值
输出操作数据长度
4
XX
输入操作数据长度
4
00 00 00 00 ---打印机为空值
请求标志
4
00 00 00 00
未知数据 1
20
XX
具体操作数据
XX
XX
设备操作主类型说明:
00 00 00 00
02 00 00 00
03 00 00 00
04 00 00 00
0e 00 00 00
创建操作
结束操作
读操作
写操作
控制操作
4-3) 各请求说明:对于“传输中”任务和“传输结束”任务,在任务标志后直接是“具体操作数据”,无其他数据;对于“传输控制”任务,无“具体操作数据”。
4-4) 任务确认通用结构
内容
字节数
层内数据长和标志
8
15 00 00 00
任务标志
4
00 00 03 00
ASCII信息
4
ICDr
设备标识
4
01 00 00 00 ---打印机设备
赋予的 ID
4
01 00 00 00
操作结果
4
见说明
接收操作数据长度
4
打印机是“输出操作数据长度”
回复数据
4
00,打印机为空值
操作结果说明:
00 00 00 00
0d 00 00 00
10 00 00 c0
22 00 00 c0
操作成功
无效参数
无效设备请求
存取拒绝
5 声音回放模块
RDP协议是提供声音回放功能。声音数据通过单独的虚拟通道传送,在初始连接时需要申请声音回放模式,当服务器接受声音回放模式后,应申请相应的虚拟通道以传送声音。
为在本地播放声音,服务器会对本地的声卡设置情况和状态进行询问,当得到合适的答复后,服务器才确认声音数据能够正常回放。关于声卡的确认在终端登录前完成。
声音数据是以 wave格式传送过来的,当终端在使用过程中有声音回放请求时,服务器便将声音数据以 wave格式映射到网络连接中,在客户端通过声音虚拟通道正确分离声音数据后,将其直接输出到声卡,即可实现声音回放。对声卡的设置,声音数据的属性调整等都通过网络映射到本地,需要终端程序能够正确的分离、响应。
5-1) 网络实现说明:服务器将声音数据分段发送处理。当有一段声音数据需要传送时,服务器首先发送接收通知,然后是具体的声音数据,数据包中有顺序传送标志:开始,进行,结束。数据接收通知中包含声音数据的格式,标签,索引等信息。在一段数据结束时,需要接收数据处理完毕的反馈信息。
5-2) 数据接收通知结构:
内容
字节数
层内数据长
4
10 00 00 00
标志
4
03 00 00 00
操作标志
1
02 表示准备接收
声音数据网络标志
1
20
数据长度
2
本段声音数据的长度
声音数据片标记
2
XX
声音数据格式
2
09 00
声音数据段索引
1
00ff间循环
未知数据 1
1
Fe
未知数据 2
2
8b 00
未知数据 3
4
各不相同
5-3) 声音数据接收反馈结构:
内容
字节数
层内数据长
4
08 00 00 00
标志
4
03 00 00 00
操作标志
2
05 00 表示接收反馈
其后数据长度
2
04 00
空位
2
00 00
分享到:
评论
发表评论

您还没有登录,请您登录后再发表评论

qimo601
  • 浏览: 2474012 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

猜你喜欢

转载自qimo601.iteye.com/blog/614659
RDP