由于太长了,所以分成了两部分,这是下半部分,上半部分在这里:3389 远程桌面 Mstsc RDP协议详细解析(上)
6-1) 连接过程说明
包序号 |
接收发送 |
字符 |
含义 |
1 |
R |
InDr |
设备初始连接通知,说明可以连接申请 |
2 |
S |
CCDr |
客户端连接申请 |
3 |
S |
CNDr |
客户端名称注册 |
4 |
R |
SPDr |
服务器提供的设备接口说明 |
5 |
R |
CCDr |
服务器设备申请确认 |
6 |
S |
CPDr |
客户端设备提供的接口说明 |
7 |
S |
DADr |
客户端打印机映射申请 |
8 |
R |
drDr |
服务器打印机设备映射成功确认 |
6-2) 设备初始连接通知:
内容 |
字节数 |
值(字节反存) |
层内数据长度 |
4 |
0x0000000c |
标志 |
4 |
03 00 00 00,表示控制信息 |
ASCII信息 |
4 |
InDr |
未知数据1 |
2 |
01 00,可能是最少个数 |
未知数据2 |
2 |
05 00,可能是最多个数 |
未知数据3 |
2 |
ff ff |
未知数据4 |
|
ff ff |
6-3) 客户端连接申请:
内容 |
字节数 |
值(字节反存) |
层内数据长度 |
4 |
0x0000000c |
标志 |
4 |
00 00 03 00,表示控制信息 |
ASCII信息 |
4 |
CCDr |
未知数据1 |
2 |
00 01,申请最少个数 |
未知数据2 |
2 |
00 05,申请最多个数 |
未知数据3 |
2 |
ff ff |
6-4) 客户端名称注册:
内容 |
字节数 |
值(字节反存) |
层内数据长度 |
4 |
XX |
标志 |
4 |
00 00 03 00,表示控制信息 |
ASCII信息 |
4 |
CNDr |
未知数据1 |
4 |
41 02或 63 00 |
未知数据2 |
2 |
bf 00 或 72 00 |
未知数据3 |
4 |
00 00 00 00 |
主机名长度 |
4 |
XX,字符2字节存储 |
主机名 |
长度 |
XX |
6-5) 服务器提供的设备接口说明:
内容 |
字节数 |
值(字节反存) |
层内数据长度 |
4 |
XX |
标志 |
4 |
03 00 00 00,表示控制信息 |
ASCII信息 |
4 |
SPDr |
设备个数 |
4 |
05 00 00 00 |
设备1标识 |
2 |
01 00 |
设备1信息长度 |
2 |
28 00,从标识开始计算 |
设备1中未知数据 |
4 |
内容见下表 |
4组设备信息 |
8 |
每组只有标识号变化,1可能表示有效0x 00 08 00 01 00 00 00 |
设备1中未知数据:
01 00 00 00 |
02 00 00 00 |
00 00 00 00 |
01 00 05 00 |
ff ff 00 00 |
00 00 00 00 |
03 00 00 00 |
00 00 00 00 |
00 00 00 00 |
|
6-6) 服务器设备申请确认:除标志反位存储外,其他都与6-2)中所说相同。
6-7) 客户端设备提供的接口说明:除标志反位存储、ASCII信息和设备1信息中第11字节值是5之外,其他都与6-2中所说相同。
6-8) 客户端打印机映射申请:
内容 |
字节数 |
值(字节反存) |
层内数据长度 |
4 |
XX |
标志 |
4 |
03 00 00 00,表示控制信息 |
ASCII信息 |
4 |
DADr |
设备个数 |
4 |
01 00 00 00 |
设备1标识 |
4 |
01 00 |
设备1句柄 |
4 |
|
设备1 ASCII信息 |
4 |
|
空位 |
4 |
|
此后数据长度 |
4 |
|
未知数据1长度 |
4 |
|
未知数据1 |
0x0a |
|
驱动打印机名长度 |
8 |
|
空位 |
4 |
|
驱动名称 |
XX |
|
打印机名称 |
XX |
|
6-9) 服务器打印机设备映射成功确认:
内容 |
字节数 |
值(字节反存) |
层内数据长度 |
4 |
XX |
标志 |
4 |
03 00 00 00,表示控制信息 |
ASCII信息 |
4 |
drDr |
设备句柄 |
4 |
01 00 00 00 |
空位 |
4 |
00 00 00 00 |
7 声音处理连接模块:
RDP协议需要单独的虚拟通道传递关于声音的数据。为了能够在本地播放声音,需要进行声音处理模块的连接,但只有要声音回放时才开始连接。连接的内容是:客户端对这些信息进行反馈,以在客户端与服务器之间确定相应的参数。
7-1) 连接过程说明:服务器首先发送一系列的关于声卡的设置参数,以及声音数据的网络格式信息,客户端对本地声卡进行测试并发回可支持的设置参数;服务器得到反馈后再发送测试数据,测试成功则反馈连接成功。
7-2) 声卡设置参数询问结构:
内容 |
字节数 |
值(字节反存) |
层内数据长 |
4 |
XX |
标志 |
4 |
03 00 00 00,表示控制信息 |
声音处理标志 |
1 |
07 表示声卡设置参数询问 |
未知数据1 |
1 |
00 |
此后数据长度 |
2 |
XX |
声音数据标志 |
4 |
07 00 00 00,表示此后是声卡参数 |
声音音量 |
4 |
f0 fa 8b 00 |
声音平衡量 |
4 |
E8 20 f3 77 |
UDP端口? |
2 |
5a ae |
声卡参数组数 |
2 |
XX |
未知数据2 |
1 |
ff |
状态值 |
2 |
05 00 |
未知数据3 |
1 |
76 |
XX组声卡参数 |
XX*18 |
XX |
声卡参数结构:
内容 |
字节数 |
值(字节反存) |
声道数 |
2 |
1或2 |
频率 |
4 |
|
nAvgBttesPerSec |
4 |
|
nBlockAlign |
2 |
|
wBitsPerSample |
2 |
|
cbSize |
2 |
|
7-3) 声卡设置参数反馈结构:
内容 |
字节数 |
值(字节反存) |
层内数据长 |
4 |
XX |
标志 |
4 |
03 00 00 00,表示控制信息 |
声音处理标志 |
1 |
07 表示声卡设置参数反馈 |
未知数据1 |
1 |
00 |
此后数据长度 |
2 |
XX |
声音数据标志 |
4 |
03 00 00 00,表示此后是声卡参数反馈 |
声音音量 |
4 |
80 4d 80 4d |
声音平衡量 |
4 |
00 00 00 00 |
UDP端口? |
2 |
04 0e? |
声卡参数级数 |
2 |
XX |
未知数据2 |
1 |
00 |
状态值 |
2 |
02 00 |
未知数据3 |
1 |
00 |
XX组声卡参数 |
XX*18 |
XX |
7-2) 声卡测试结构:
内容 |
字节数 |
值(字节反存) |
层内数据长 |
4 |
XX |
标志 |
4 |
03 00 00 00,表示控制信息 |
声音处理标志 |
1 |
06 表示声卡设置参数测试 |
未知数据1 |
1 |
23 |
此后数据长度 |
2 |
XX |
声音数据标志1 |
2 |
16 d4 |
声音数据标志2 |
2 |
00 04 |
测试数据 |
XX |
XX |
7-2) 声卡测试反馈结构:
内容 |
字节数 |
值(字节反存) |
层内数据长 |
4 |
08 00 00 00 |
标志 |
4 |
03 00 00 00 |
操作标志 |
2 |
06 00 表示接收反馈 |
其后数据长度1 |
2 |
04 00 |
声音数据标志1 |
2 |
16 d4 |
声音数据标志2 |
2 |
00 04 |
五、各功能模块说明:
任务标志说明:适用于所有非图形通道数据。
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,表示demand,licence认证要求 |
版本 |
1 |
4.0->02,5.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 0x0” |
未知数据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.com0”,1字节表示1字符 |
1-3) request包:s
内容 |
字节数 |
值 |
加密层 |
4 |
80 00 00 00 |
Licence标志 |
1 |
13,表示request,licence认证要求回复 |
版本 |
1 |
4.0->02,5.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,表示authreq,licence认证密钥 |
版本 |
1 |
4.0->02,5.x->03 |
本层长度 |
2 |
26 00 |
未知数据1 |
6 |
46 53 f9 65 f1 7b |
Token长度 |
2 |
0a 00 |
Token值 |
0x0a |
XX,10字节 |
Signature值 |
0x10 |
XX,16字节 |
1-5) authreq包:s
内容 |
字节数 |
值 |
加密层 |
4 |
80 00 00 00 |
Licence标志 |
1 |
15,表示authreq,licence认证密钥 |
版本 |
1 |
4.0->02,5.x->03 |
本层长度 |
2 |
3a 00 |
标志 |
2 |
01 00 |
Token长度 |
2 |
0a 00 |
Token值 |
0x0a |
XX,10字节 |
标志 |
2 |
01 00 |
Hwid长度 |
2 |
14 00 |
Hwid值 |
0x14 |
XX,20字节 |
Signature值 |
0x10 |
XX,16字节 |
1-6) result包:r 不处理
内容 |
字节数 |
值 |
加密层 |
4 |
80 02 10 00 |
Licence标志 |
1 |
ff,表示result,licence认证密钥 |
版本 |
1 |
4.0->02,5.x->03 |
本层长度 |
2 |
10 00 |
未知数据1 |
4 |
07 00 00 00 |
未知数据2 |
4 |
02 00 00 00 |
未知数据3 |
4 |
04 00 00 00 |
3389 远程桌面 Mstsc.exe RDP 协议详细解析,3389解析,3389协议,3389协议解析,3389协议详细解析,3389远程桌面Mstsc.exe协议解析RDP,Mstsc.exe解析,Mstsc.exe协议,Mstsc.exe协议解析,Mstsc.exe协议详细解析,RDP 解析,RDP 协议,RDP 协议解析,RDP 协议详细解析,Windows 远程协议详细解析,Windows 远程终端服务协议解析,Windows 远程终端服务协议详解,Windows 远程终端服务协议详细解析,Windows 远程终端协议详细解析,Windows 终端服务协议详细解析,Windows 终端协议详细解析,远程终端服务协议详细解析,远程终端协议,远程终端协议详解,远程终端协议详细解析,远程桌面解析,远程桌面协议,远程桌面协议解析,远程桌面协议详细解析。
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 , TD> |
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 |
00到ff间循环 |
未知数据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 |
声音数据段索引 |
1 |
00到ff之间循环,由通知信息取得 |
未知数据1 |
1 |
fe,由通知信息取得 |
5-3) 声音数据结构:
内容 |
字节数 |
值 |
层内数据长或标志 |
4 |
00 20 00 00 |
数据标志 |
4 |
1为开始,0为继续,2为结束 |
声音数据 |
XX |
XX |
六、rdpwin结构、数据流说明:
七、总结
3389 远程桌面 Mstsc.exe RDP 协议详细解析,3389解析,3389协议,3389协议解析,3389协议详细解析,3389远程桌面Mstsc.exe协议解析RDP,Mstsc.exe解析,Mstsc.exe协议,Mstsc.exe协议解析,Mstsc.exe协议详细解析,RDP 解析,RDP 协议,RDP 协议解析,RDP 协议详细解析,Windows 远程协议详细解析,Windows 远程终端服务协议解析,Windows 远程终端服务协议详解,Windows 远程终端服务协议详细解析,Windows 远程终端协议详细解析,Windows 终端服务协议详细解析,Windows 终端协议详细解析,远程终端服务协议详细解析,远程终端协议,远程终端协议详解,远程终端协议详细解析,远程桌面解析,远程桌面协议,远程桌面协议解析,远程桌面协议详细解析。