RDP协议详细解析(五)
五、各功能模块说明:任务标志说明:适用于所有非图形通道数据。00 00 00 0001 00 00 0002 00 00 0003 00 00 0000 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内容字节数值加密层480 02 86 00Licence标志101,表示demand,licence认证要求版本14.0->02,5.x->03本层长度286 00服务器随机数32XX未知数据1402 00 05 00公司信息长度42c 00 00 00公司信息0x2c“Microsoft Corporation 0”,2字节表示1字符未知2长度408 00 00 00未知数据2841 00 30 00 32 00 00 00,“A02 0x0”未知数据380d 00 04 00 01 00 00 00未知数据485c f5 00 00? 01 00 00 00未知数据540e 00 0e 00网址信息0x0e“Microsoft.com0”,1字节表示1字符1-3) request包:s内容字节数值加密层480 00 00 00Licence标志113,表示request,licence认证要求回复版本14.0->02,5.x->03本层长度28a 00未知数据1801 00 00 00? 00 00 01 ff客户端随机数32全是0值(mod+pad)长度448 00 00 00Modulus值64全是0值Padding值8全是0值用户标志20f 00用户名长度2XX用户名长度值1字节表示1字符,例“YYY”主机标志210 00主机名长度2XX主机名长度值1字节表示1字符,例“YYY”1-4) authreq包:r内容字节数值加密层480 02 26 00Licence标志102,表示authreq,licence认证密钥版本14.0->02,5.x->03本层长度226 00未知数据1646 53 f9 65 f1 7bToken长度20a 00Token值0x0aXX,10字节Signature值0x10XX,16字节1-5) authreq包:s内容字节数值加密层480 00 00 00Licence标志115,表示authreq,licence认证密钥版本14.0->02,5.x->03本层长度23a 00标志201 00Token长度20a 00Token值0x0aXX,10字节标志201 00Hwid长度214 00Hwid值0x14XX,20字节Signature值0x10XX,16字节?1-6) result包:r 不处理内容字节数值加密层480 02 10 00Licence标志1ff,表示result,licence认证密钥版本14.0->02,5.x->03本层长度210 00未知数据1407 00 00 00未知数据2402 00 00 00未知数据3404 00 00 002 加密解密模块:在初始模块中对网络通信连接中所设定的加密信息提交给服务器。而RDP协议实现的加密形式是RSA/RC4。当取得初始的加密、解密密钥(在发送初始连接信息后得到的),在初始连接结束后,客户端需要发送系统登录的初始信息,用以验证客户端加密、解密 的正确性。此后经过licence认证,通过认证后,所有的加密数据都经加密解密层处理。同时,密钥需要保存,因为加密数据包需要连续的正确加密或解密才能得到正确的数据。3 图形处理模块在图形处理中,客户端将所有的事件转换为固定格式的网络数据发送到服务器,服务器将处理的结果以图片形式发回服务器。在图形处理模块内部又分了较多的层次,叙述下面:3-1) 第一级层次内容字节数值层内数据长度2XX第一级类型标记217 00 代表具体数据,0000时跳过后4字节基本通道号2ea 03,固定基本通道号2ea 03,固定(share?)未知数据1201 00网络包顺序号2XX此后数据长度2XX具体数据类型1见说明数据压缩类型100 不压缩数据压缩长度200具体数据类型说明:值含义说明2图形更新27鼠标指针操作34响铃38登录信息47断开重连提示3-2) 图形更新:前2字节是更新的类型值含义说明0 画图命令1位图2调色板3同步,锁定3-2-1) 画图命令:其后是若干组画图命令内容字节数值未知数据12XX画图命令组数2XX未知数据22XX每组画图命令XX?说明:对于每一组命令,他们都取相应的系统状态,根据具体的情况进行处理。特别说明的是,颜色值是固定的3字节,根据深度值取相应的就可以。3-2-2) 位图:前2字节是图片的数量。其后是图片数据,取出后画图片。每一张图片的结构:内容字节数值图片水平左坐标2XX图片垂直上坐标2XX图片水平右坐标2XX图片垂直下坐标2XX图片水平点数2XX图片垂直点数2XX图片点深度值2XX图片压缩标志200 表示不压缩压缩数据长度2XX压缩数据段内容段据2-1XXXX压缩数据段内容:compress & 0x400 为真时size=压缩数据长度,其后只有数据内容字节数值未知数据12XX压缩数据长度2XX行长度2XXfinal_size2XX压缩数据内容XXXX3-2-3) 调色板:用服务器传过来调色板代替系统的调色板。当256色时才有内容字节数值未知数据12XX颜色组数2一般是256,即00 001未知数据22XX调色颜色值3倍每组值3字节,分别为红绿蓝色值3-3) 鼠标指针操作内容字节数值操作类型2见说明空位2XX鼠标指针操作类型说明:值含义说明1取初始值3移动6新状态7缓存3-3-1) 鼠标指针操作取初始值处理:当是00 00时设鼠标为不可见状态。内容字节数值取初始值类型200 003-3-2) 鼠标指针操作移动处理:将鼠标移动到指定位置内容字节数值鼠标移动目标水平位置2X值鼠标移动目标垂直位置2Y值3-3-3) 鼠标指针操作新状态处理:创建新状态到鼠标状态缓存,并设置状态。内容字节数值鼠标缓存号2新的鼠标状态缓存号水平位置2X值垂直位置2Y值宽度2XX高度2XX掩码长度2XX数据长度2XX掩码值掩码长度XX数据值数据长度XX3-3-4) 鼠标指针操作缓存处理:设置鼠标为系统已存的状态号的状态。内容字节数值鼠标缓存号2已存在的鼠标状态缓存号3-4) 响铃:直接系统响铃发声处理3-5) 登录信息:忽略,跳过3-6) 断开重连提示:忽略,跳过4打印数据模块RDP协议提供本地打印机映射到服务器功能。在用户通过终端连接服务器并映射本地打印机后,可在远程主机上使用本地的打印机。客户端需要将本地打印机的型号传送给服务器,只有当前的服务器含有此打印机型号驱动时,打印机才会映射成功,在通道建立之后,对于打印机映射还需要信息交互确认。服务器把需要打印的数据发送到打印机所在的网络连接终端,通过单独的虚拟通道传送到客户端,由客户端负责打印数据的处理。在终端连接初始建立时,需要发送映射本地打印机的请求,服务器接受映射后,客户端应申请相应的虚拟通道以进行打印数据的相关操作。将要打印的数据在网络传输中,是以PRN格式存放的。在用本地映射的打印机进行打印工作时,需要对打印机进行相应的连接,打印数据以PRN的形式从服务器发送到客户端,客户端只要把他们直接输出到打印机端口即可打印。对于打印的数据及其网络协议本身的控制信息需要客户端能够正确的分离、操作。4-1) 本地设备操作说明:设备的每一个任务操作,服务器都会发送请求,当任务操作结束时,需要客户端正确回复确认。对于设备的每一次具体任务,都需要首先创建任务,当得到确定的答复以后才可能继续任务。任务创建后执行具体的内容。设备的功能操作又分读、写和控制;对于每一种功能操作,任务数据分开始、传输中和结束三种。需要顺序传送。每一小段数据传输结束后需要回复确认。当任务结束后,需要回复确认。4-2) 任务请求通用结构:内容字节数值层内数据长和标志8XX任务标志4见说明ASCII信息4IRDr设备标识401 00 00 00 ---打印机设备设备号400 00 00 00 ---创建时为空值赋予的ID号401 00 00 00设备操作主类型4见说明设备操作次类型400 00 00 00 ---打印机为空值输出操作数据长度4XX输入操作数据长度400 00 00 00 ---打印机为空值请求标志400 00 00 00未知数据120XX具体操作数据XXXX设备操作主类型说明:00 00 00 0002 00 00 0003 00 00 0004 00 00 000e 00 00 00创建操作结束操作读操作写操作控制操作4-3) 各请求说明:对于“传输中”任务和“传输结束”任务,在任务标志后直接是“具体操作数据”,无其他数据;对于“传输控制”任务,无“具体操作数据”。4-4) 任务确认通用结构内容字节数值层内数据长和标志815 00 00 00任务标志400 00 03 00ASCII信息4ICDr设备标识401 00 00 00 ---打印机设备赋予的ID号401 00 00 00操作结果4见说明接收操作数据长度4打印机是“输出操作数据长度”回复数据400,打印机为空值操作结果说明:00 00 00 000d 00 00 0010 00 00 c022 00 00 c0操作成功无效参数无效设备请求存取拒绝5 声音回放模块RDP协议是提供声音回放功能。声音数据通过单独的虚拟通道传送,在初始连接时需要申请声音回放模式,当服务器接受声音回放模式后,应申请相应的虚拟通道以传送声音。为在本地播放声音,服务器会对本地的声卡设置情况和状态进行询问,当得到合适的答复后,服务器才确认声音数据能够正常回放。关于声卡的确认在终端登录前完成。声音数据是以wave格式传送过来的,当终端在使用过程中有声音回放请求时,服务器便将声音数据以wave格式映射到网络连接中,在客户端通过声音虚拟通道正确分离声音数据后,将其直接输出到声卡,即可实现声音回放。对声卡的设置,声音数据的属性调整等都通过网络映射到本地,需要终端程序能够正确的分离、响应。5-1) 网络实现说明:服务器将声音数据分段发送处理。当有一段声音数据需要传送时,服务器首先发送接收通知,然后是具体的声音数据,数据包中有顺序传送标志:开始,进行,结束。数据接收通知中包含声音数据的格式,标签,索引等信息。在一段数据结束时,需要接收数据处理完毕的反馈信息。5-2) 数据接收通知结构:内容字节数值层内数据长410 00 00 00标志403 00 00 00操作标志102 表示准备接收声音数据网络标志120数据长度2本段声音数据的长度声音数据片标记2XX声音数据格式209 00声音数据段索引100到ff间循环未知数据11Fe未知数据228b 00未知数据34各不相同5-3) 声音数据接收反馈结构:内容字节数值层内数据长408 00 00 00标志403 00 00 00操作标志205 00 表示接收反馈其后数据长度204 00空位200 00