Rust implementation of the Microsoft Remote Desktop Protocol (RDP)
Find a file
Benoît Cortier c949f5b46c
fix(graphics): harden RLE implementation (#86)
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.
2023-03-07 07:01:22 -05:00
.github fix(graphics): harden RLE implementation (#86) 2023-03-07 07:01:22 -05:00
ffi/wasm fix: bad width and height for Rectangle (#80) 2023-02-28 14:48:03 +00:00
fuzz fix(graphics): harden RLE implementation (#86) 2023-03-07 07:01:22 -05:00
iron-remote-gui fix(iron-remote-gui): border on hover and fit scale function (#85) 2023-03-06 16:02:00 +00:00
iron-svelte-client fix(iron-remote-gui): border on hover and fit scale function (#85) 2023-03-06 16:02:00 +00:00
iron-tauri-client refactor: architecture rework 2023-01-26 22:20:43 -05:00
ironrdp fix: build with native-tls feature (#77) 2023-02-24 09:25:58 -05:00
ironrdp-cli fix: build with native-tls feature (#77) 2023-02-24 09:25:58 -05:00
ironrdp-core fix(graphics): harden RLE implementation (#86) 2023-03-07 07:01:22 -05:00
ironrdp-devolutions-gateway fix: build with native-tls feature (#77) 2023-02-24 09:25:58 -05:00
ironrdp-graphics fix(graphics): harden RLE implementation (#86) 2023-03-07 07:01:22 -05:00
ironrdp-gui-client fix: build with native-tls feature (#77) 2023-02-24 09:25:58 -05:00
ironrdp-input fix(input): MousePdu wheel rotation units encoding (#71) 2023-02-13 21:12:17 +00:00
ironrdp-renderer fix: bad width and height for Rectangle (#80) 2023-02-28 14:48:03 +00:00
ironrdp-replay-client refactor: split into multiple crates (#57) 2022-12-19 11:56:58 -05:00
ironrdp-session fix(graphics): harden RLE implementation (#86) 2023-03-07 07:01:22 -05:00
ironrdp-session-async refactor: architecture rework 2023-01-26 22:20:43 -05:00
ironrdp-tls refactor: split into multiple crates (#57) 2022-12-19 11:56:58 -05:00
.gitignore feat: glutin-based GUI client (#55) 2022-12-16 09:55:59 -05:00
Cargo.toml refactor: split into multiple crates (#57) 2022-12-19 11:56:58 -05:00
LICENSE-APACHE ironrdp: initial commit 2019-07-10 17:31:26 -04:00
LICENSE-MIT ironrdp: initial commit 2019-07-10 17:31:26 -04:00
README.md docs: update section about supported codecs (#81) 2023-02-28 15:56:08 +00:00
rust-toolchain.toml build: update Rust toolchain to 1.67.0 2023-01-26 22:20:43 -05:00
rustfmt.toml style: run cargo fmt 2022-04-15 13:39:34 -04:00

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 crates
  • ironrdp-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 of ironrdp-graphics.
  • ironrdp-session-async: Futures built on top of ironrdp-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 using Svelte and Material frameworks).
  • iron-tauri-client: a native client built with Tauri. Frontend is using the iron-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:

  1. Run gpedit.msc.

  2. 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

  3. 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

  4. Enable Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/Limit maximum color depth

  5. Reboot.

Demonstration

https://user-images.githubusercontent.com/3809077/202049929-76f42471-aeb0-41da-9118-0dc6ea491bd2.mp4