RDP協議詳細解析
阿新 • • 發佈:2019-01-03
一、前言
windows從NT開始提供終端服務,它是微軟買來的網路協議技術(Citrix),伺服器端要安裝、配置,客戶端要連線程式。終端服務使任何一臺有許可權的終端機,用已知的賬號登入伺服器,可以使用賬號內的資源,包括軟體,硬體資源;同時,在協議升級後,客戶端連線後可以使用本地的資源,包括本地印表機、聲音本地回放,本地磁碟資源和本地硬體介面。所有的計算都在伺服器端進行,客戶端只需要處理網路連線、接收資料、介面顯示和裝置資料輸出。
目前,關於RDP服務的linux客戶端程式有winconnect,linrdp,rdesktop,前兩個沒有原始碼,但redsktop已經由原來的個人開發後公開程式碼演變成現在的專案組開發。由於專案的跨平臺開發需要,我們在開始時進行過單獨的協議破解工作,破解後,我們的程式在原來的RDP4.0基礎上擴充套件到5.1,實現了16位顏色,聲音本地回放, 對映本地印表機。對於當前的終端機,這些功能完全滿足需要,因此其他功能暫不便破解實現。為防患RDP協議的升級而影響我們破解而得的終端程式的功能性,需要對RDP協議的變化進行跟蹤,對et-rdesktop進行優化、完善。鑑於當前的工作安排,將跟蹤redsktop專案的進展,以提煉功能為我所用和完善現有程式。
二、概述
1 版本功能說明:
RDP協議在終端服務推出後已有四個版本,4.0、5.0、5.1、5.2。一般來說,版本是根據windows的版本確定的。
從客戶端的角度來說,5.X版本間提供的功能差別不是很大,相對於4.0版本,它提供了使用者帶密碼直接登入、客戶端驅動器資源對映、客戶端音訊回放、最高24位色顯示和符合FIPS加密級別連線。
另外,從4.0協議開始變提供的客戶羰功能有:高、中、低三種資料加密級別,客戶端自定義初始登入環境,客戶端印表機對映,客戶端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
邏輯長度,從版本號開始到本包結束
2 ISO資料層:
在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-2
2
2
8
值
從下位元組開始計算
0x0800
0x1000/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協議將影象資訊、聲音資訊、裝置資訊、剪貼簿內容都各自以單一的虛擬通道進行傳送,而印表機對映,磁碟對映,埠對映都做為裝置資訊的內容進行處理。限於當前左上角工作和專案工作的限度,裝置資訊中只考慮了印表機對映的部分,對於印表機資訊與其他的裝置相關的資訊沒有進行有效隔離區分,而本協議說明中相關的連線資訊、資料傳送都只認為是印表機對映的內容。
四、各連線模組說明:
1 ISO連線模組:
在客戶端與伺服器的網路套介面建立之後,需要首先建立RDP協議底層連線,得到連線確認後才能正常通訊。具體實現如下:
1) 連線過程說明:
初始連線時,在網路套介面TCP連線建立之後中,客戶端首先進行連線請求,當收到連線確認後表示網路連線層連線建立,隨後開始傳送RDP資料。
2) 連線請求通訊資料:
內容
層內資料長度
RDP包型別
未知1
未知2
標誌
其它
位元組數
1
1
2
2
1
不定
值
從下一位元組開始計算
0xd0或0xe0
0x0000
另見
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
0x82 0xlength
第一部分未知資料
7
04 00 04 00 01 01 ff
第二部分未知資料
XX
三組協議引數
第三部分未知資料
XX
四種連線引數
2-1-1) 第一部分未知資料結構:
內容
位元組數
值
Calling domain
2
0x0400
Called domain
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
0x04 0x82 0xlength1
未知資料1
4
00 05 00 14 7c 00 01
餘下的資料長度
2
0x8000|length2
未知資料2
8
00 08 00 10 00 01 c0 00
未知資料3
4
44 75 63 61 –“Duca”
4組資料
XX
各功能模組連線資訊
2-1-3-1:基本資訊
內容
位元組數
值(反位元組儲存)
標誌
2
0xc001
長度
2
這一組資料的長度
Licence版本
2
1,4,5;lincence標誌升級
未知資料1
2
0x0008
視窗寬度、高度
4
寬度,高度
未知資料2
4
0xca01,0xaa03
Keylayout
4
0x00000409
客戶端系統元件數
4
419,2195,2462
客戶端機器名
32
2位元組儲存1個字元
未知資料3
12
0x04,0x00,0x0c各四個位元組
未知資料4
64
都是0
未知資料5
8
01 ca 01 00 00 00 00 00
圖形顏色位(最大值)
2
24,16,15,8
未知資料6(疑最小位)
2
07 00
未知資料7
4
01 00 00 00
基本資訊返回值多少且固定,認為在具體連線時有更多返回資訊。加密資訊需要取回加密級別與金鑰;通道資訊則返回基本圖形資訊的通道號和其他虛擬通道號,需要另行申請。
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或0x80000002->X.509
2-2-1-3-1) RDP4型別金鑰
內容
位元組數
值
未知資料1
8
01 00 00 00 01 00 00 00
公鑰標誌
2
0x0006
長度
2
length公鑰資訊
RSA1標誌
4
52 53 41 31 --“RSA1”
公鑰模數+襯墊長度
4
48 00 00 00-> =64+8
未知資料2
8
00 02 00 00 3f 00 00 00
公鑰指數(exponent)
4
01 00 01 00
公鑰模數值(modulu)
64
XX
公鑰襯墊值(pad)
8
00 00 00 00 00 00 00 00
公鑰簽名標誌,長度
4
0x0008 length(=0x48)
簽名模數值
64
XX
簽名襯墊值
8
00 00 00 00 00 00 00 00
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
值
XX
0x04
0x0001
0x0001
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
11 00,表示是圖形資訊連線確認
基本通道號
2
ea 03,固定
基本通道號
2
ea 03,固定(share?)
未知資料1
2
01 00
ASCII資訊長度
2
XX
基本引數長度
2
XX
ASCII資訊
長度值+1
52 44 50 00,r->“RDP”,s->“MSTSC”
引數資訊
2
r->0b 00,s->0d
空位
2
30或00
詳細各組引數
組數
內容XX
5-3) 詳細引數資訊組類別:
每個型別的資料前2位元組為型別,然後是長度,資料。以接收到優先作例介紹。
型別值
說明
01r
通用型別(general)
02r
點陣圖型別(bitmap)
03r
命令(order)
04
點陣圖快取(bitmap cache)
05
控制(control)
07
活動(active)
08r
指標(pointer)
09r
共享(share)
0ar
顏色快取(color cache)
0c
未知
0dr
未知
0e
未知
10
未知
12r
未知
14r
未知
16r
未知
40
未知
00r
未知
5-3-1) 通用型別(general->01)
內容
位元組數
值(位元組反存)
系統主型別
2
01 00,OS major type
系統次型別
2
03 00,OS minor type
協議版本號
2
02 00,protocol version
空資料1
2
00 00
壓縮型別
2
00 00不壓縮
空資料2
2
1d 04
更新屬性
2
00 00
共享屬性
2
00 00
壓縮級別
2
00 00
空資料3
2
01 01
5-3-2) 點陣圖型別(bitmap->02)
內容
位元組數
值(位元組反存)
最佳顏色深度
2
協商值
1顏色深度
2
01 00
2顏色深度
2
01 00
3顏色深度
2
01 00
桌面寬度
2
width
桌面高度
2
height
空位1
2
00 00
允許調整大小
2
01 00
點陣圖壓縮
2
01 00
未知資料1
2
00 00
未知資料2
2
01 00
空位2
2
00 00
5-3-3) 命令(order->03)
內容
位元組數
值(位元組反存)
Terminal desc1
16
0值
Terminal desc2
4
10 42 0f 00
快取X間隔
2
01 00
快取Y間隔
2
14 00
未知資料1
2
00 00
最大命令級別
2
01 00
字型數目
2
00 00
容量標誌
2
22 00
命令支援格式
32
另見
文字容量標誌
2
a1 06
未知資料2
6
00 00 40 42 0f 00
桌面快取大小
4
40 42 0f 00
未知資料3
4
01 00 00 00
未知資料4
4
00 00 00 00
命令支援格式說明:共32個標誌,只對已知標誌進行說明。
位元組位置,0-31
值含義,1代表支援,0代表不支援
0
Dest blt
1
Pat blt
2
Screen blt
3
Required for memblt
8
Line1
9
Line2
10
Rect
11
Desktop save
13
Memblt
14
Triblt
22
Polyline
27
Text2
5-3-4) 點陣圖快取(bitmapcache->04)
內容
位元組數
值(位元組反存)
未使用資料1
24
0值
Entries
2
58 02
Max cell size
2
00 01
Entries
2
2c 01
Max cell size
2
00 04
Entries
2
06 01
Max cell size
2
00 10
5-3-5) 控制(control->05)
內容
位元組數
值(位元組反存)
Control capability
2
00 00
Remote detach
2
00 00
Control interest
2
02 00
Detach interest
2
02 00
5-3-6) 活動(activer->07)
內容
位元組數
值(位元組反存)
Help key
2
00 00
Help index key
2
00 00
Extended help key
2
00 00
Window active
2
00 00
5-3-7) 指標(pointer->08)
內容
位元組數
值(位元組反存)
Color pointer
2
01 00
Cache size
2
19 00
未知資料1
2
19 00
5-3-8) 共享(share->09)
內容
位元組數
值(位元組反存)
基本通道號
2
ea 03
未知資料1
2
7d e1
5-3-9) 顏色快取(colorcache->0a)
內容
位元組數
值(位元組反存)
快取大小
2
06 00
未知資料1
2
7d e1
5-3-10) 未知型別->d 收到:
內容
位元組數
值(位元組反存)
未知資料1
12
35 00 00 00 a1 06 00 00 40 42 0f 00
未知資料2
12
40 42 0f 00 44 e6 0a ba 93 53 19 ba
未知資料3
12
08 60 03 e1 6a 05 1a ba 4c e6 0a ba
未知資料4
12
4c a4 7d e1 08 a0 7d e1 01 00 00 00
未知資料5
12
08 a4 7d e1 00 00 00 00 44 e6 0a ba
未知資料6
12
54 f2 19 ba 08 a0 7d e1 38 e6 0a ba
未知資料7
12
00 00 00 00 08 00 0a 00 01 00 19 00
5-3-11) 未知型別->12收到:
內容
位元組數
值(位元組反存)
未知資料1
2
01 00
未知資料2
2
00 00
5-3-12) 未知型別->14收到:
內容
位元組數
值(位元組反存)
未知資料1
2
02 00
未知資料2
2
00 00
5-3-13) 未知型別->16收到:
內容
位元組數
值(位元組反存)
未知資料1
12
01 00 00 00 6e 01 00 00 01 00 00 00
未知資料2
12
d0 07 40 bf 01 b0 83 bf 00 00 00 00
未知資料3
12
a4 e6 0a ba 5c db 4f 80 e6 01 00 00
6印表機對映連線模組:
RDP協議當前提供對映5個裝置,在我們破解過程中並沒有區分出他們的區別,在此視為單一處理。印表機的連線在系統登入前完成,以配置作業系統資訊。
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
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
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結構、資料流說明:
七、總結