RDP,Remote Desktop Protocol,遠程桌面協議,是一個多通道(mutil-channel)的協議,讓用戶(客戶端或稱“本地電腦”)連上提供微軟終端機服務的電腦(伺服器端或稱“遠程電腦”)。大部分的Windows、Linux、FreeBSD、Mac OS X都有相應的客戶端。服務... ...
RDP協議詳解
一、前言
RDP,Remote Desktop Protocol,遠程桌面協議,是一個多通道(mutil-channel)的協議,讓用戶(客戶端或稱“本地電腦”)連上提供微軟終端機服務的電腦(伺服器端或稱“遠程電腦”)。大部分的Windows、Linux、FreeBSD、Mac OS X都有相應的客戶端。服務端聽取送到 TCP 3389 埠的數據。
windows從NT開始提供終端服務,它是微軟買來的網路協議技術(Citrix),伺服器端要安裝、配置,客戶端要連接程式。終端服務使任何一臺有許可權的終端機,用已知的賬號登錄伺服器,可以使用賬號內的資源,包括軟體,硬體資源;同時,在協議升級後,客戶端連接後可以使用本地的資源,包括本地印表機、聲音本地回放,本地磁碟資源和本地硬體介面。所有的計算都在伺服器端進行,客戶端只需要處理網路連接、接收數據、界面顯示和設備數據輸出。目前,關於RDP服務的linux客戶端程式有winconnect,linrdp,rdesktop,前兩個沒有源碼,但redsktop已經由原來的個人開發後公開代碼演變成現在的項目組開發。
二、概述
1 版本功能說明:
1 RDP協議在終端服務推出後已有四個版本,4.0、5.0、5.1、5.2。一般來說,版本是根據windows的版本確定的。 2 3 從客戶端的角度來說,5.X版本間提供的功能差別不是很大,相對於4.0版本,它提供了用戶帶密碼直接登錄、客戶端驅動器資源映射、客戶端音頻回放、最高24位色顯示和符合FIPS加密級別連接。 4 5 另外,從4.0協議開始變提供的客戶羰功能有:高、中、低三種數據加密級別,客戶端自定義初始登錄環境,客戶端印表機映射,客戶端LPT埠映射,客戶端com埠映射,剪貼板映射,客戶登錄的個性化設置(包括鍵盤、顯示界面大小等)。 6 7 8 7.0版:這是最新的版本,必須要有Windows Server 2008 R2 或 Windows 7。
2、協議層次說明:
1 通過破解研究,我們掌握了RDP協議的基本層次結構。基本上,RDP協議的每一層次上都標示出其層內的數據長度值。對於層次劃分,主要是指RDP協議網路功能數據傳送時通常都包含的各層次,而對於各層次內所實現的單層次連接等功能將做為單獨的模塊來進行闡述。 2 3 網路連接層:RDP協議建立在TCP/IP協議之上,由於傳輸的數據量比較大,因此在協議的底層首先定義一層網路連接層。它定義了一個完整的RDP數據邏輯包,以避免由於網路包長度過長而被分割使數據丟失。 4 5 ISO數據層:在網路連接層之上是ISO數據層,它表示RDP數據的正常連接通信。 6 7 虛擬通道層:在ISO數據層之上,RDP協議定義一個虛擬通道層,用以拆分標示不同虛擬通道的數據,加快客戶端處理速度,節省占用網路介面的時間。 8 9 加密解密層:在虛擬通道層之上,RDP定義一個數據加密解密層。此層用於對所有的功能數據進行加密、解密處理。 10 11 功能數據層:在加密解密層之上是功能數據,畫面信息,本地資源轉換,聲音數據,列印數據等所有的功能數據信息都在此層進行處理。另外,根據數據類型的不同,這些數據都有各自不同層次的分割,他們的內部層次結構將在各個功能模塊中進行闡述。
3 其它說明:
1 本協議解析中所提到的各層次結構都是指RDP功能數據正常傳送時的各底層結構,在功能數據傳送前的各層次的建立連接過程及其結構、實現都歸於模塊實現來進行說明。對於伺服器端的各種設置以及個版本間的內部實現差異請看RDP幫助文檔,以及rdpwin開發文檔。
4 連接過程說明:
1 1) 客戶端連接伺服器 2 2) ISO數據層建立連接 3 3) 發送初始協議相關信息,接收加密、解密密鑰 4 4) 虛擬通道申請 5 5) 加密形式發送客戶端系統信息,同時驗證加密協議 6 6) 平臺軟體證書驗證 7 7) 各功能建立連接,各功能數據傳輸,功能實現
三、網路層次
1.網路連接層
在RDP協議網路實現連接中,本層的數據格式是固定的。
2.ISO數據層
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215163804149-304454703.png)
3.虛擬通道層
虛擬通道層用於在正常網路連接數據之上,中個虛擬通道的功能數據。此層次的連接另見初始連接模塊與通道申請模塊,在此只說明正常數據連接時的層次結構。
1)結構信息
2)類型說明
0x64:客戶端發送數據
0x68:客戶端接收數據
3)用戶號說明
本次連接的用戶號,伺服器發送的是0x0001;客戶端所發送的值是初始連接時請示通道後伺服器同意開通的虛擬個數。
4)虛擬通道號說明:
虛擬通道號是本層次以上所發送的功能數據所在的虛擬通道號,其由初始連接通道申請建立時確定。
5)標誌說明:
客戶端發送的標誌為0x70;伺服器端發送的標誌,當數據是圖像(由通道號識別),其值為0x70,當功能數據是其他數據時,其值為0xf0.
4.加密解密層:
加密解密用於對網路連接中所發送、接收的數據進行加密、解密。我為保證數據和系統的安全性,對網路數據進行加密傳輸時比較常用且必然的,RDP協議在此層對實際的功能數據進行加密。
1)結構信息
5.功能數據層:
功能數據是客戶端與伺服器進行交互的真正數據。他們都有各自固定格式、連接、控制方式,具體情況見各功能模塊的說明。
根據當前我們所掌握的信息,RDP協議將圖像信息、聲音信息、設備信息、剪貼板內容都各自以單一的虛擬通道進行傳送,而印表機映射,磁碟映射,埠映射都做為設備信息的內容進行處理。限於當前左上角工作和項目工作的限度,設備信息中只考慮了印表機映射的部分,對於印表機信息與其他的設備相關的信息沒有進行有效隔離區分,而本協議說明中相關的連接信息、數據傳送都只認為是印表機映射的內容。
四、各連接模塊說明:
1 ISO連接模塊:
在客戶端與伺服器的網路套介面建立之後,需要首先建立RDP協議底層連接,得到連接確認後才能正常通信。具體實現如下:
1) 連接過程說明:
初始連接時,在網路套介面TCP連接建立之後中,客戶端首先進行連接請求,當收到連接確認後表示網路連接層連接建立,隨後開始傳送RDP數據。
2) 連接請求通信數據
3) RDP包類型說明:
1 0xe0:客戶端連接請求 2 3 0xd0:伺服器確認連接
4) 未知數據2說明:
1 0x0000:客戶端請求連接的值 2 3 0x1234:伺服器確認請求的值
5) 其它數據說明:
win2003客戶端在請求時附帶瞭如下字元—“Cookie: mstshash=Administrator0x0d0x0e”,目前不知其意。其中Administrator為自動登錄名,當其長度超過12位元組時,只保留前12位元組,其它字元都固定不變。
2 協議信息初始模塊:
當基本的RDP連接建立後,需要進行客戶端與伺服器的系統環境、RDP連接環境的信息交流與連接確認。
2-1) 發送包結構:
2-1-1) 第一部分未知數據結構:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215164156358-729721312.png)
2-1-2) 第二部分未知數據結構:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215164217110-1171832315.png)
說明:3組參數標誌都是0x30,8個參數值的標誌都是0x20
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215164235194-153442230.png)
2-1-3) 第三部分未知數據結構:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215164251807-1185373937.png)
2-1-3-1:基本信息
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215164322615-286538959.png)
基本信息返回值多少且固定,認為在具體連接時有更多返回信息。加密信息需要取回加密級別與密鑰;通道信息則返回基本圖形信息的通道號和其他虛擬通道號,需要另行申請。
3 通道申請模塊
對於RDP連接,各種功能數據都是通過單獨的虛擬通道傳輸的。初始連接後,在進一步的信息通信之前,需要開闢相應的通道。
1) 過程說明
客戶端首先發送一個建立連接獨立空間請求,再發送一個用戶綁定請求,若伺服器同意,將發送用戶綁定確認,且含有需要申請的虛擬通道總數totalchannel。隨後客戶端申請虛擬通道。虛擬通道號從1001+2=1003開始到1001+totalchannel結束,每次申請都應返回一個申請結果。
2) 建立連接獨立空間請求結構:
3) 綁定用戶請求結構 :
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215165600098-1302131085.png)
4)用戶綁定確認結構:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215165613246-439173926.png)
5)申請虛擬通道號結構:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215165634524-1802838608.png)
6)通道申請確認結構:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215165651685-780537872.png)
4.系統初始連接模塊
當通道申請各部分通過後,開始系統登錄的初始連接。從此數據包開始,所以虛擬通道層以上的網路數據都需要加密,詳細的加密功能實現請參見加密模塊。登錄的網路信息結構如下:
5.圖形連接模塊
在圖形數據發送之前,伺服器需要對此功能模塊驗證,驗證內容是所有與圖形相關的信息,包括滑鼠設置、鍵盤輸入、字體類型、畫圖命令格式、圖形顯示的各種類型。
根據已破解的信息顯示,RDESKTOP原來並沒有正確的賦值,因為它的返回值是沒有固定的,對於伺服器發送來的信息沒有處理,而伺服器在其關於圖形方面的參數設置詢問沒有得到正確的回答時,則以固定的伺服器端的參數進行設置。
連接過程說明:伺服器端首先發送關於圖形方面的基本參數設置,客戶端應該對這些設置進行反饋。此後rdesktop的處理是順序發送同步信息,兩個控制信息包,一個輸入信息包,兩個字體信息包;同時順序接收一個同步信息包,兩控制信息包,一個未知信息包;但redsktop並沒有對接2收的信息包進行處理。
5-2)基本參數設2置信息包結構:
5-3) 詳細參數信息組類別:
每個類型的數據前2位元組為類型,然後是長度,數據。以接收到優先作例介紹。
5-3-1) 通用類型(general->01)
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215165833154-788302335.png)
6印表機映射連接模塊:
RDP協議當前提供映射5個設備,在我們破解過程中並沒有區分出他們的區別,在此視為單一處理。印表機的連接在系統登錄前完成,以配置操作系統信息。
6-1) 連接過程說明
6-2) 設備初始連接通知:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215165911300-1240595798.png)
6-3) 客戶端連接申請:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215165929429-1730885984.png)
6-4) 客戶端名稱註冊:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215165949865-954700945.png)
6-5) 伺服器提供的設備介面說明:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170010636-911625344.png)
6-6) 伺服器設備申請確認:除標誌反位存儲外,其他都與6-2)中所說相同。
6-7) 客戶端設備提供的介面說明:除標誌反位存儲、ASCII信息和設備1信息中第11位元組值是5之外,其他都與6-2中所說相同。
6-8) 客戶端印表機映射申請:
6-9) 伺服器印表機設備映射成功確認:
###聲音處理連接模塊
RDP協議需要單獨的虛擬通道傳遞關於聲音的數據。為了能夠在本地播放聲音,需要進行聲音處理模塊的連接,但只有要聲音回放時才開始連接。連接的內容是:客戶端對這些信息進行反饋,以在客戶端與伺服器之間確定相應的參數。
7-1) 連接過程說明:伺服器首先發送一系列的關於音效卡的設置參數,以及聲音數據的網路格式信息,客戶端對本地音效卡進行測試併發回可支持的設置參數;伺服器得到反饋後再發送測試數據,測試成功則反饋連接成功。
7-2) 音效卡設置參數詢問結構:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170201257-1238987149.png)
音效卡參數結構:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170219846-1698985573.png)
7-3) 音效卡設置參數反饋結構:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170236812-1734183998.png)
7-2) 音效卡測試結構:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170255032-1544540511.png)
7-2) 音效卡測試反饋結構:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170310975-749796883.png)
五、各功能模塊說明
任務標誌說明:適用於所有非圖形通道數據。
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170327772-1195080484.png)
1 licence身份模塊:
在加密、解密驗證通過以後,伺服器發送licence信息進行系統的身份認證。身份證認證的加密、解密系統也是用RSA/RC4體系,但是與網路通信中的加密、解密系統分開的。licence認證中的密鑰是臨時的、單獨的。
1-1) 連接過程說明:伺服器端首先發送demand包,內容是隨機數和一些系統相關的字元信息;客戶端需要回覆requset包,內容是隨機數、空閑值、主機名、用戶名;伺服器再發送authreq包,內容包括token值和signature值;客戶端需要回覆authresq包,內容包括token值、hwid值和signature值。伺服器通過後會發送result包,表明licence認證通過。
1-2) demand包:r
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170347189-1824069359.png)
1-3) request包:s
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170410162-1985664800.png)
1-4) authreq包:r
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170430735-611359009.png)
1-5) authreq包:s
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170447470-363030855.png)
1-6) result包:r 不處理
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170503949-2128131391.png)
2 加密解密模塊:
在初始模塊中對網路通信連接中所設定的加密信息提交給伺服器。而RDP協議實現的加密形式是RSA/RC4。
當取得初始的加密、解密密鑰(在發送初始連接信息後得到的),在初始連接結束後,客戶端需要發送系統登錄的初始信息,用以驗證客戶端加密、解密 的正確性。此後經過licence認證,通過認證後,所有的加密數據都經加密解密層處理。同時,密鑰需要保存,因為加密數據包需要連續的正確加密或解密才能得到正確的數據。
3 圖形處理模塊
在圖形處理中,客戶端將所有的事件轉換為固定格式的網路數據發送到伺服器,伺服器將處理的結果以圖片形式發回伺服器。在圖形處理模塊內部又分了較多的層次,敘述下麵:
3-1) 第一級層次
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170524230-898523412.png)
說明:對於每一組命令,他們都取相應的系統狀態,根據具體的情況進行處理。特別說明的是,顏色值是固定的3位元組,根據深度值取相應的就可以。
3-2-2) 點陣圖:前2位元組是圖片的數量。其後是圖片數據,取出後畫圖片。
每一張圖片的結構:
![](https://img2023.cnblogs.com/blog/27422/202212/27422-20221215170542563-1669423028.png)
4列印數據模塊
1 RDP協議提供本地印表機映射到伺服器功能。在用戶通過終端連接伺服器並映射本地印表機後,可在遠程主機上使用本地的印表機。客戶端需要將本地印表機的型號傳送給伺服器,只有當前的伺服器含有此印表機型號驅動時,印表機才會映射成功,在通道建立之後,對於印表機映射還需要信息交互確認。 2 3 伺服器把需要列印的數據發送到印表機所在的網路連接終端,通過單獨的虛擬通道傳送到客戶端,由客戶端負責列印數據的處理。在終端連接初始建立時,需要發送映射本地印表機的請求,伺服器接受映射後,客戶端應申請相應的虛擬通道以進行列印數據的相關操作。將要列印的數據在網路傳輸中,是以PRN格式存放的。在用本地映射的印表機進行列印工作時,需要對印表機進行相應的連接,列印數據以PRN的形式從伺服器發送到客戶端,客戶端只要把他們直接輸出到印表機埠即可列印。對於列印的數據及其網路協議本身的控制信息需要客戶端能夠正確的分離、操作。 4 5 本地設備操作說明:設備的每一個任務操作,伺服器都會發送請求,當任務操作結束時,需要客戶端正確回覆確認。對於設備的每一次具體任務,都需要首先創建任務,當得到確定的答覆以後才可能繼續任務。任務創建後執行具體的內容。設備的功能操作又分讀、寫和控制;對於每一種功能操作,任務數據分開始、傳輸中和結束三種。需要順序傳送。每一小段數據傳輸結束後需要回覆確認。當任務結束後,需要回覆確認。
本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/RDP-Protocol-Details.html