![]() Mostly added bound checks in case an invalid RLE-compressed bitmap is received. Implementation have been fuzzed for a few hours in order to find blind spots. |
||
---|---|---|
.github | ||
ffi/wasm | ||
fuzz | ||
iron-remote-gui | ||
iron-svelte-client | ||
iron-tauri-client | ||
ironrdp | ||
ironrdp-cli | ||
ironrdp-core | ||
ironrdp-devolutions-gateway | ||
ironrdp-graphics | ||
ironrdp-gui-client | ||
ironrdp-input | ||
ironrdp-renderer | ||
ironrdp-replay-client | ||
ironrdp-session | ||
ironrdp-session-async | ||
ironrdp-tls | ||
.gitignore | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md | ||
rust-toolchain.toml | ||
rustfmt.toml |
IronRDP
A Rust implementation of the Microsoft Remote Desktop Protocol, with a focus on security.
Architecture (Work In Progress…)
ironrdp
: meta crate re-exporting important cratesironrdp-core
: core, RDP protocol packets encoding and decoding.ironrdp-graphics
: image processing primitives and algorithms (ZGFX, DWT…).ironrdp-input
: helpers to build FastPathInput packets.ironrdp-session
: abstract state machine on top ofironrdp-graphics
.ironrdp-session-async
:Future
s built on top ofironrdp-session
.ironrdp-tls
: TLS boilerplate common with most IronRDP clients.ironrdp-devolutions-gateway
: Devolutions Gateway extensions.ironrdp-renderer
:glutin
primitives for OpenGL rendering.ironrdp-cli
: basic command-line client mostly for debugging purposes.ironrdp-gui-client
: basic GUI client for IronRDP.ironrdp-replay-client
: utility tool to replay RDP graphics pipeline for debugging purposes.iron-remote-gui
: core frontend ui used by both, iron-svelte-client and iron-tauri-client.iron-svelte-client
: web-based frontend usingSvelte
andMaterial
frameworks).iron-tauri-client
: a native client built with Tauri. Frontend is using theiron-web-client
/iron-svelte-client
component.ffi/wasm
: WebAssembly high-level bindings targeting web browsers.
Video Codec Support
Supported codecs:
- Uncompressed raw bitmap
- Interleaved Run-Length Encoding (RLE) Bitmap Codec
- Microsoft RemoteFX (RFX)
How to enable RemoteFX on server
Run the following PowerShell commands, and reboot.
Set-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows NT\Terminal Services' -Name 'ColorDepth' -Type DWORD -Value 5
Set-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows NT\Terminal Services' -Name 'fEnableVirtualizedGraphics' -Type DWORD -Value 1
Alternatively, you may change a few group policies using gpedit.msc
:
-
Run
gpedit.msc
. -
Enable
Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/RemoteFX for Windows Server 2008 R2/Configure RemoteFX
-
Enable
Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/Enable RemoteFX encoding for RemoteFX clients designed for Windows Server 2008 R2 SP1
-
Enable
Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/Limit maximum color depth
-
Reboot.
Demonstration
https://user-images.githubusercontent.com/3809077/202049929-76f42471-aeb0-41da-9118-0dc6ea491bd2.mp4