RDP協議詳解

来源:https://www.cnblogs.com/88223100/archive/2022/12/18/RDP-Protocol-Details.html
-Advertisement-
Play Games

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.05.05.15.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數據層

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) 第一部分未知數據結構:

 

2-1-2) 第二部分未知數據結構:

 

說明:3組參數標誌都是0x30,8個參數值的標誌都是0x20

 

2-1-3) 第三部分未知數據結構:

 

2-1-3-1:基本信息

 

基本信息返回值多少且固定,認為在具體連接時有更多返回信息。加密信息需要取回加密級別與密鑰;通道信息則返回基本圖形信息的通道號和其他虛擬通道號,需要另行申請。

3 通道申請模塊

對於RDP連接,各種功能數據都是通過單獨的虛擬通道傳輸的。初始連接後,在進一步的信息通信之前,需要開闢相應的通道。

1) 過程說明

客戶端首先發送一個建立連接獨立空間請求,再發送一個用戶綁定請求,若伺服器同意,將發送用戶綁定確認,且含有需要申請的虛擬通道總數totalchannel。隨後客戶端申請虛擬通道。虛擬通道號從1001+2=1003開始到1001+totalchannel結束,每次申請都應返回一個申請結果。

2) 建立連接獨立空間請求結構:

3) 綁定用戶請求結構 :

 

4)用戶綁定確認結構:

 

5)申請虛擬通道號結構:

 

6)通道申請確認結構:

 

4.系統初始連接模塊

當通道申請各部分通過後,開始系統登錄的初始連接。從此數據包開始,所以虛擬通道層以上的網路數據都需要加密,詳細的加密功能實現請參見加密模塊。登錄的網路信息結構如下:

5.圖形連接模塊

在圖形數據發送之前,伺服器需要對此功能模塊驗證,驗證內容是所有與圖形相關的信息,包括滑鼠設置、鍵盤輸入、字體類型、畫圖命令格式、圖形顯示的各種類型。

根據已破解的信息顯示,RDESKTOP原來並沒有正確的賦值,因為它的返回值是沒有固定的,對於伺服器發送來的信息沒有處理,而伺服器在其關於圖形方面的參數設置詢問沒有得到正確的回答時,則以固定的伺服器端的參數進行設置。

連接過程說明:伺服器端首先發送關於圖形方面的基本參數設置,客戶端應該對這些設置進行反饋。此後rdesktop的處理是順序發送同步信息,兩個控制信息包,一個輸入信息包,兩個字體信息包;同時順序接收一個同步信息包,兩控制信息包,一個未知信息包;但redsktop並沒有對接2收的信息包進行處理。

5-2)基本參數設2置信息包結構:

5-3) 詳細參數信息組類別:

每個類型的數據前2位元組為類型,然後是長度,數據。以接收到優先作例介紹。

5-3-1) 通用類型(general->01)

 

6印表機映射連接模塊:

RDP協議當前提供映射5個設備,在我們破解過程中並沒有區分出他們的區別,在此視為單一處理。印表機的連接在系統登錄前完成,以配置操作系統信息。

6-1) 連接過程說明

6-2) 設備初始連接通知:

 

6-3) 客戶端連接申請:

 

6-4) 客戶端名稱註冊:

 

6-5) 伺服器提供的設備介面說明:

 

6-6) 伺服器設備申請確認:除標誌反位存儲外,其他都與6-2)中所說相同。

6-7) 客戶端設備提供的介面說明:除標誌反位存儲、ASCII信息和設備1信息中第11位元組值是5之外,其他都與6-2中所說相同。

6-8) 客戶端印表機映射申請:

6-9) 伺服器印表機設備映射成功確認:

 

###聲音處理連接模塊
RDP協議需要單獨的虛擬通道傳遞關於聲音的數據。為了能夠在本地播放聲音,需要進行聲音處理模塊的連接,但只有要聲音回放時才開始連接。連接的內容是:客戶端對這些信息進行反饋,以在客戶端與伺服器之間確定相應的參數。

7-1) 連接過程說明:伺服器首先發送一系列的關於音效卡的設置參數,以及聲音數據的網路格式信息,客戶端對本地音效卡進行測試併發回可支持的設置參數;伺服器得到反饋後再發送測試數據,測試成功則反饋連接成功。

7-2) 音效卡設置參數詢問結構:

音效卡參數結構:

 

7-3) 音效卡設置參數反饋結構:

 

7-2) 音效卡測試結構:

 

7-2) 音效卡測試反饋結構:

 

 

五、各功能模塊說明

任務標誌說明:適用於所有非圖形通道數據。

 

1 licence身份模塊:

在加密、解密驗證通過以後,伺服器發送licence信息進行系統的身份認證。身份證認證的加密、解密系統也是用RSA/RC4體系,但是與網路通信中的加密、解密系統分開的。licence認證中的密鑰是臨時的、單獨的。

1-1) 連接過程說明:伺服器端首先發送demand包,內容是隨機數和一些系統相關的字元信息;客戶端需要回覆requset包,內容是隨機數、空閑值、主機名、用戶名;伺服器再發送authreq包,內容包括token值和signature值;客戶端需要回覆authresq包,內容包括token值、hwid值和signature值。伺服器通過後會發送result包,表明licence認證通過。

1-2) demand包:r

1-3) request包:s

 

1-4) authreq包:r

 

1-5) authreq包:s

 

1-6) result包:r 不處理

 

2 加密解密模塊:

在初始模塊中對網路通信連接中所設定的加密信息提交給伺服器。而RDP協議實現的加密形式是RSA/RC4。

當取得初始的加密、解密密鑰(在發送初始連接信息後得到的),在初始連接結束後,客戶端需要發送系統登錄的初始信息,用以驗證客戶端加密、解密 的正確性。此後經過licence認證,通過認證後,所有的加密數據都經加密解密層處理。同時,密鑰需要保存,因為加密數據包需要連續的正確加密或解密才能得到正確的數據。

3 圖形處理模塊

在圖形處理中,客戶端將所有的事件轉換為固定格式的網路數據發送到伺服器,伺服器將處理的結果以圖片形式發回伺服器。在圖形處理模塊內部又分了較多的層次,敘述下麵:

3-1) 第一級層次

說明:對於每一組命令,他們都取相應的系統狀態,根據具體的情況進行處理。特別說明的是,顏色值是固定的3位元組,根據深度值取相應的就可以。

3-2-2) 點陣圖:前2位元組是圖片的數量。其後是圖片數據,取出後畫圖片。

每一張圖片的結構:

 

4列印數據模塊

1    RDP協議提供本地印表機映射到伺服器功能。在用戶通過終端連接伺服器並映射本地印表機後,可在遠程主機上使用本地的印表機。客戶端需要將本地印表機的型號傳送給伺服器,只有當前的伺服器含有此印表機型號驅動時,印表機才會映射成功,在通道建立之後,對於印表機映射還需要信息交互確認。
2 
3    伺服器把需要列印的數據發送到印表機所在的網路連接終端,通過單獨的虛擬通道傳送到客戶端,由客戶端負責列印數據的處理。在終端連接初始建立時,需要發送映射本地印表機的請求,伺服器接受映射後,客戶端應申請相應的虛擬通道以進行列印數據的相關操作。將要列印的數據在網路傳輸中,是以PRN格式存放的。在用本地映射的印表機進行列印工作時,需要對印表機進行相應的連接,列印數據以PRN的形式從伺服器發送到客戶端,客戶端只要把他們直接輸出到印表機埠即可列印。對於列印的數據及其網路協議本身的控制信息需要客戶端能夠正確的分離、操作。
4 
5    本地設備操作說明:設備的每一個任務操作,伺服器都會發送請求,當任務操作結束時,需要客戶端正確回覆確認。對於設備的每一次具體任務,都需要首先創建任務,當得到確定的答覆以後才可能繼續任務。任務創建後執行具體的內容。設備的功能操作又分讀、寫和控制;對於每一種功能操作,任務數據分開始、傳輸中和結束三種。需要順序傳送。每一小段數據傳輸結束後需要回覆確認。當任務結束後,需要回覆確認。

 

 

本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/RDP-Protocol-Details.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大家好,歡迎來到 Crossin的編程教室 ! 看過我Python入門教程的朋友應該會看到其中有提到一個點球小游戲的作業。 在世界盃決賽即將到來之際,我們再來回顧一下這個小游戲。對於剛剛學習編程不久的同學,這是個不錯的練手習題,可以嘗試自己寫一寫。 【視頻】用Python寫個“點球大戰”小游戲 先說 ...
  • File對象測試數據的讀寫與操作 #def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True): # known special case of open #file ...
  • f-string,亦稱為格式化字元串常量(formatted string literals),是Python3.6新引入的一種字元串格式化方法,該方法源於PEP 498 – Literal String Interpolation,主要目的是使格式化字元串的操作更加簡便。 ...
  • 問題描述 fastjson通過代碼指定全局序列化返回時間格式,導致使用JSONField註解標註屬性的特殊日期返回格式失效 使用版本 | 應用名稱 | 版本 | | | | | springboot | 2.0.0.RELEASE | | fastjson | 1.2.83 | 全局設置代碼 pub ...
  • 一、前言 最近學習pyqt5中文教程時,最後一個例子製作了一個俄羅斯方塊小游戲,由於解釋的不是很清楚,所以源碼有點看不懂,查找網上資料後,大概弄懂了源碼的原理。 二、繪製主視窗 將主視窗居中,且設置了一個狀態欄來顯示三種信息:消除的行數,游戲暫停狀態或者游戲結束狀態。 class Tetris(QM ...
  • JZ46 把數字翻譯成字元串 描述 有一種將字母編碼成數字的方式:'a'->1, 'b->2', ... , 'z->26'。 現在給一串數字,返回有多少種可能的解碼結果 示例1 輸入: "12" 返回值:2 說明: 2種可能的解碼結果(”ab” 或”l”) 思路 思路: 對於普通數組1-9,解碼方 ...
  • 1、設計想法 原理與之前的串口發送模塊一樣,1位的數據位和8位的數據位再加上1位的停止位。唯一不同的是在接收的時候要考慮到有干擾的情況下,為了避免干擾,我們對每位數據進行多次採樣,按出現概率大的值為該數據位的值。 如果按照通常想法在每bits位中間取值的話,bit3位出現圖中的干擾很有可能會讀出錯誤 ...
  • win11特有的快捷鍵 win鍵就是圖案是windows圖標的那個按鍵 | 作用 | 快捷鍵 | | | | | 打開快速設置,win11是展開音量,wifi,藍牙的設置項,win10也可以用 | win + a | | 打開通知中心和日曆,win10無 | win + n | | 打開投屏,win ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...