Rust implementation of the Microsoft Remote Desktop Protocol (RDP)
Find a file
2023-11-17 09:50:03 -05:00
.cargo refactor: re-organize workspace (#101) 2023-03-29 19:09:15 -04:00
.github ci: check for dirty lock files (#277) 2023-11-09 21:53:08 -05:00
crates refactor(credssp): follow up to #260 (#287) 2023-11-17 09:50:03 -05:00
fuzz ci: check for dirty lock files (#277) 2023-11-09 21:53:08 -05:00
web-client refactor(credssp): follow up to #260 (#287) 2023-11-17 09:50:03 -05:00
xtask ci: check for dirty lock files (#277) 2023-11-09 21:53:08 -05:00
.gitignore chore(web-client): update .gitignore files 2023-11-04 02:26:46 -04:00
ARCHITECTURE.md docs: add "on bit flags" section (#237) 2023-10-30 22:09:18 +00:00
Cargo.lock feat(credssp): support for Kerberos (#260) 2023-11-17 04:12:13 +00:00
Cargo.toml feat(credssp): support for Kerberos (#260) 2023-11-17 04:12:13 +00:00
clippy.toml refactor: check for additional lints (#200) 2023-10-02 13:46:05 +03: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 doc: elaborate high-level documentation (#192) 2023-09-18 19:03:39 +00:00
rust-toolchain.toml feat(cliprdr): Clipboard support for Windows (#194) 2023-09-27 14:45:47 -04:00
rustfmt.toml style: run cargo fmt 2022-04-15 13:39:34 -04:00
STYLE.md docs: add STYLE.md document (#275) 2023-11-13 17:05:49 +02:00
typos.toml feat(pdu): pointer messages PDUs parsing support 2023-07-17 17:59:53 +03:00

IronRDP

A collection of Rust crates providing an implementation of the Microsoft Remote Desktop Protocol, with a focus on security.

Demonstration

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

Video Codec Support

Supported codecs:

  • Uncompressed raw bitmap
  • Interleaved Run-Length Encoding (RLE) Bitmap Codec
  • RDP 6.0 Bitmap Compression
  • Microsoft RemoteFX (RFX)

Examples

ironrdp-client

A full-fledged RDP client based on IronRDP crates suite, and implemented using non-blocking, asynchronous I/O.

cargo run --bin ironrdp-client -- <HOSTNAME> --username <USERNAME> --password <PASSWORD>

screenshot

Example of utilizing IronRDP in a blocking, synchronous fashion.

This example showcases the use of IronRDP in a blocking manner. It demonstrates how to create a basic RDP client with just a few hundred lines of code by leveraging the IronRDP crates suite.

In this basic client implementation, the client establishes a connection with the destination server, decodes incoming graphics updates, and saves the resulting output as a BMP image file on the disk.

cargo run --example=screenshot -- --host <HOSTNAME> --username <USERNAME> --password <PASSWORD> --output out.bmp

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.

Architecture

See the ARCHITECTURE.md document.