<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hardening consulting (Posts about freerdp)</title><link>https://www.hardening-consulting.com/</link><description></description><atom:link href="https://www.hardening-consulting.com/en/categories/freerdp.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Mon, 05 Jan 2026 15:05:40 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>QFreeRDP platform QPA    </title><link>https://www.hardening-consulting.com/en/posts/20260105-qfreerdp-platform.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/qt.jpg" width="100px"&gt;
First post of 2026, I wish you all the best for the new year.&lt;/p&gt;
&lt;p&gt;In this post, I'm going to talk about an old project that I find very interesting and that is still up-to-date even after more than
10 years of existence: &lt;a href="https://github.com/hardening/qfreerdp_platform"&gt;qfreerdp_platform&lt;/a&gt;. I've made some interesting improvements to this project recently,
so I'm going to talk about them.&lt;/p&gt;
&lt;p&gt;&lt;br style="clear: both;"&gt;&lt;/p&gt;
&lt;h2&gt;Qt internals&lt;/h2&gt;
&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/specifications.png" width="100px"&gt;&lt;/p&gt;
&lt;p&gt;The Qt framework works with an abstraction of the platform on which it runs: Qt is designed with
independent classes that implement widgets, QML scripting, rendering, etc. But the components that
interacts with the system, such as sending content to the graphics card or
collecting signals from input devices (keyboard, mouse, or touchscreen), are implemented
by a QPA, a Qt Platform Abstraction. For example, when you run a Qt application on Linux, there will be
a heuristic system that will either load the QPA for X11 (xcb) or the Wayland QPA.&lt;/p&gt;
&lt;p&gt;I already mentioned this in 2013 in this &lt;a href="https://www.hardening-consulting.com/posts/20130917passer-des-arguments-a-son-platform-integration-plugin.html"&gt;post&lt;/a&gt;. An interesting thing is that 
you can force the QPA that will be used by an application by
passing the parameter &lt;code&gt;-platform &amp;lt;name of qpa&amp;gt;&lt;/code&gt; when calling the Qt program (this is why you
have to pass the command line parameters to &lt;code&gt;QApplication&lt;/code&gt;, so that Qt can treat the arguments that are for him). 
The really surprising thing is that any Qt program, without rebuild, can run on 
both X11 and Wayland, or on a QPA that it is told to use...&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/en/posts/20260105-qfreerdp-platform.html"&gt;Read more…&lt;/a&gt; (4 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>freerdp</category><category>qpa</category><category>qt</category><guid>https://www.hardening-consulting.com/en/posts/20260105-qfreerdp-platform.html</guid><pubDate>Mon, 05 Jan 2026 07:11:00 GMT</pubDate></item><item><title>FreeRDP and server-side kerberos    </title><link>https://www.hardening-consulting.com/en/posts/20251208-freerdp-and-kerberos-server-side.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/rdplogo.jpeg" width="100px"&gt;
Lately, I've been exploring topics related to FreeRDP with remote credential guard, Kerberos, 
and NLA, so I'm writing this post on how Kerberos-ize FreeRDP server-side.&lt;/p&gt;
&lt;p&gt;&lt;br style="clear: both;"&gt;&lt;/p&gt;
&lt;h2&gt;NLA, SPNego and Kerberos&lt;/h2&gt;
&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/kerberos.png" width="150px"&gt;&lt;/p&gt;
&lt;p&gt;The whole Kerberos process starts with &lt;em&gt;NLA&lt;/em&gt;: if you connect to an &lt;em&gt;RDP&lt;/em&gt; server
with &lt;em&gt;mstsc&lt;/em&gt; and the configuration is fairly standard, 
when you run &lt;code&gt;mstsc /v:dc.hardening2.com&lt;/code&gt;, &lt;em&gt;mstsc&lt;/em&gt; will: &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/en/posts/20251208-freerdp-and-kerberos-server-side.html"&gt;Read more…&lt;/a&gt; (4 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>freerdp</category><category>kerberos</category><category>nla</category><category>spnego</category><guid>https://www.hardening-consulting.com/en/posts/20251208-freerdp-and-kerberos-server-side.html</guid><pubDate>Mon, 08 Dec 2025 11:08:00 GMT</pubDate></item><item><title>Exploring NTLM_REMOTE_SUPPLEMENTAL_CREDENTIAL    </title><link>https://www.hardening-consulting.com/en/posts/20251205-NTLM_REMOTE_SUPPLEMENTAL_CREDENTIAL.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/rdplogo.jpeg" width="100px"&gt;
Some time ago, I've been working on the kerberos part of remote credential guards, and after complains
about compatibility against windows 11 and recent DCs, I have looked at the NTLM part.&lt;/p&gt;
&lt;p&gt;&lt;br style="clear: both;"&gt;&lt;/p&gt;
&lt;h2&gt;Remote credential guards&lt;/h2&gt;
&lt;p&gt;The idea behind &lt;em&gt;remote credential guards&lt;/em&gt; is that we connect to a remote machine, the password is not sent 
but we still have SSO. So in theory, even if we connect to a compromised machine, we will
not have our password stolen.&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/en/posts/20251205-NTLM_REMOTE_SUPPLEMENTAL_CREDENTIAL.html"&gt;Read more…&lt;/a&gt; (3 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>freerdp</category><category>ntlm</category><category>remote credential guard</category><guid>https://www.hardening-consulting.com/en/posts/20251205-NTLM_REMOTE_SUPPLEMENTAL_CREDENTIAL.html</guid><pubDate>Fri, 05 Dec 2025 06:08:00 GMT</pubDate></item><item><title>Accendino 0.5.10 alpha 1</title><link>https://www.hardening-consulting.com/en/posts/20251003-accendino-0.5.10-alpha-1-release.html</link><dc:creator>David FORT</dc:creator><description>&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/accendino.png" width="100px"&gt;&lt;/p&gt;
&lt;p&gt;More improvements on &lt;em&gt;Accendino&lt;/em&gt;, with that 0.5.10alpha1 version which is the stabilization course for 0.5.10.&lt;/p&gt;
&lt;p&gt;FFmpeg is one of those softwares that are horrible to automatically build under windows (just behind OpenSSL), and one of 
the targets for this version was to be able to build FreeRDP with the support of FFmpeg under windows with the Visual Studio toolchain, 
and do all that automatically. No by hand hacks to make it work, just &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;accendino&lt;span class="w"&gt; &lt;/span&gt;--targets&lt;span class="o"&gt;=&lt;/span&gt;freerdp3&lt;span class="w"&gt; &lt;/span&gt;freerdp.accendino
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;It checks out, compiles and it's ready.&lt;/p&gt;
&lt;p&gt;&lt;br style="clear: both;"&gt;&lt;/p&gt;
&lt;h2&gt;New features in version 0.5.10 alpha 1&lt;/h2&gt;
&lt;h3&gt;Support for Msys2&lt;/h3&gt;
&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/msys2.png" width="100px"&gt;&lt;/p&gt;
&lt;p&gt;First step to compile FFmpeg with Visual Studio: you need to execute commands under &lt;code&gt;msys2&lt;/code&gt;, and therefore this version brings package 
installation support to this environment. If you put &lt;code&gt;'msys2/yasm'&lt;/code&gt; in packages dependencies, &lt;em&gt;accendino&lt;/em&gt; will install the corresponding 
packages in the &lt;code&gt;msys2&lt;/code&gt; environment.&lt;/p&gt;
&lt;p&gt;Extract from the FFmpeg accendino file:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;...&lt;/span&gt;

&lt;span class="n"&gt;ffmpegPkgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s1"&gt;'Darwin'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'nasm'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="s1"&gt;'Windows'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'choco/nasm|path/nasm'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'msys2/make'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'msys2/yasm'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'msys2/diffutils'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This support was not very complex to implement because &lt;code&gt;msys2&lt;/code&gt; uses  &lt;code&gt;pacman&lt;/code&gt; as package manager, which is already supported in &lt;em&gt;accendino&lt;/em&gt; for ArchLinux. 
We already had everything we needed to list installed packages and run package installations.&lt;/p&gt;
&lt;p&gt;A new &lt;code&gt;makeMsys2&lt;/code&gt; builder type has been added for &lt;code&gt;CustomCommandBuildArtifact&lt;/code&gt;, which allows to launch &lt;code&gt;make&lt;/code&gt; but in the &lt;code&gt;msys2&lt;/code&gt; environment, 
that's the way to build FFmpeg with MSVC.&lt;/p&gt;
&lt;p&gt;&lt;br style="clear: both;"&gt;&lt;/p&gt;
&lt;h3&gt;Toolchain&lt;/h3&gt;
&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/specifications2.png" width="100px"&gt;&lt;/p&gt;
&lt;p&gt;This version brings the notion of toolchain, which basically allows to specify which buildchain to use. Under the Unixes, 
we have the choice between &lt;code&gt;gcc&lt;/code&gt; and &lt;code&gt;clang&lt;/code&gt;, and under windows we will detect Visual Studio and you can use with &lt;code&gt;MSVC&lt;/code&gt; or 
&lt;code&gt;clang&lt;/code&gt; (&lt;code&gt;vs/msvc&lt;/code&gt; or &lt;code&gt;vs/clang&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The toolchain support enables to set the right environment variables for &lt;code&gt;gcc&lt;/code&gt; or &lt;code&gt;clang&lt;/code&gt; builds (which will then be used by &lt;code&gt;meson&lt;/code&gt;, &lt;code&gt;cmake&lt;/code&gt; or others), 
but also to call the &lt;code&gt;VsDevCmd.bat&lt;/code&gt; script of visual studio (or its powershell equivalent).&lt;/p&gt;
&lt;p&gt;All of this was required for FFmpeg, because when you do the build process by hand, you open a Visual Studio development shell that allows you to have the PATH positioned properly, 
then from there you run a &lt;code&gt;msys2&lt;/code&gt; shell that will inherit of these values, and the build is launched inside this msys2 shell.&lt;/p&gt;
&lt;p&gt;The build process under windows has therefore also been redesigned and so now we generate a powershell script containing all commands and this powershell script is then executed. 
This facilitates management of environment variables, but also debugging, because you can easily restart the script with exactly the same environment (because all this
is done in the powershell script itself). With all these additions, we automate the construction of FFmpeg under windows with Visual Studio. &lt;/p&gt;
&lt;p&gt;Even if we already had the possibility to make a cross compilation with mingw on Linux and then transfer the files under windows, it is so more convenient 
to build on windows and use directly VisualStudio if you have to do a debugging session.&lt;/p&gt;
&lt;p&gt;With the support of the toolchains, the &lt;code&gt;BuildArtifact&lt;/code&gt; gains a new &lt;code&gt;toolchainArtifacts&lt;/code&gt; argument that gives the list of artifacts that should be pulled from the toolchain. The default value is to indicate that it is desired to use a C compiler (&lt;code&gt;c&lt;/code&gt;), but
you can also add &lt;code&gt;c++&lt;/code&gt; for projects coded in this language. &lt;/p&gt;
&lt;p&gt;&lt;br style="clear: both;"&gt;&lt;/p&gt;
&lt;h3&gt;Various other changes&lt;/h3&gt;
&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/new.png" width="100px"&gt;&lt;/p&gt;
&lt;p&gt;A lot of other improvements have been made in this version:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;accendino&lt;/em&gt; files have been added for &lt;code&gt;Cairo&lt;/code&gt;, &lt;code&gt;cJson&lt;/code&gt; and &lt;code&gt;qfreerdp_platform&lt;/code&gt;, which allows to build these projects very 
    easily and have a more feature complete FreeRDP under windows;&lt;/li&gt;
&lt;li&gt;now when &lt;em&gt;accendino&lt;/em&gt; detects a rebuild for an item, it will also rebuild all the items which that item depends on;&lt;/li&gt;
&lt;li&gt;with this version we look for the &lt;em&gt;accendino&lt;/em&gt; files passed in command line in the current path and then in the pockets: 
  no need to give the complete path when the &lt;em&gt;accessino&lt;/em&gt; file is stored in a pocket directory;&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;include()&lt;/code&gt; command has a new &lt;code&gt;include_once&lt;/code&gt; parameter (true by default) which allows to specify that a file should only be 
  included once during the execution of &lt;em&gt;accendino&lt;/em&gt;;&lt;/li&gt;
&lt;li&gt;CI tests have been added to validate that everything is working properly after changes, this allows to validate a number of 
  build cases with &lt;em&gt;accendino&lt;/em&gt; under linux and even windows;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;To conclude&lt;/h2&gt;
&lt;p&gt;With these changes, you can easily have the latest FreeRDP under windows with every possible features with a simple:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="go"&gt;C:\Users\david&amp;gt; accendino --targets=freerdp3 freerdp.accendino&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;VisualStudio will be detected, any packages installed, etc.&lt;/p&gt;
&lt;p&gt;And under Linux:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;accendino&lt;span class="w"&gt; &lt;/span&gt;--targets&lt;span class="o"&gt;=&lt;/span&gt;qfreerdp_platform-qt6&lt;span class="w"&gt; &lt;/span&gt;--toolchain&lt;span class="o"&gt;=&lt;/span&gt;clang&lt;span class="w"&gt; &lt;/span&gt;qfreerdp_platform.accendino
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;and you have &lt;code&gt;qfreerdp_platform&lt;/code&gt; compiled for Qt6 under clang. There's really no excuse to not have tested these nice projects yet !&lt;/p&gt;
&lt;p&gt;This is basically the functional scope that will be in the 0.5.10 release, any feedback or bug reports are welcome.&lt;/p&gt;</description><category>accendino</category><category>freerdp</category><category>ogon</category><guid>https://www.hardening-consulting.com/en/posts/20251003-accendino-0.5.10-alpha-1-release.html</guid><pubDate>Fri, 03 Oct 2025 06:15:00 GMT</pubDate></item><item><title>Release of Accendino 0.5.9</title><link>https://www.hardening-consulting.com/en/posts/20250210-accendino-0.5.9-release.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/accendino.png" width="100px"&gt;&lt;/p&gt;
&lt;p&gt;I made some updates to my &lt;em&gt;Accendino&lt;/em&gt; script, until it became a program of its own with
interesting features. This version 0.5.9 adds a lot of nice things compared to the
previous version. Over time, I see &lt;em&gt;Accendino&lt;/em&gt; more as a program allowing to build a complex software from
several software sources, and on several platforms. For now my case study is FreeRDP, I try to have
accendino files that allow to build FreeRDP from scratch on as many platforms as possible (linux, mac,
windows, mingw, ...)&lt;/p&gt;
&lt;p&gt;&lt;br style="clear: both;"&gt;&lt;/p&gt;
&lt;h2&gt;History&lt;/h2&gt;
&lt;p&gt;Originally &lt;em&gt;accendino&lt;/em&gt; was just a small script to run the &lt;em&gt;Ogon&lt;/em&gt; installation instructions. It was
a bit more complex because you could specify the git locations to download. For example, to use the &lt;em&gt;Forgiare&lt;/em&gt;
repositories instead of the official &lt;em&gt;Ogon&lt;/em&gt; repositories. With version 0.5.0, I extended its features quite a lot:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the ability to include accendino files to reuse existing definitions;&lt;/li&gt;
&lt;li&gt;the program sources have been greatly extended and no longer necessarily come from git. We can have local sources,
  or from git. Many git options are now accessible;&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/en/posts/20250210-accendino-0.5.9-release.html"&gt;Read more…&lt;/a&gt; (5 min remaining to read)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><category>accendino</category><category>freerdp</category><category>ogon</category><guid>https://www.hardening-consulting.com/en/posts/20250210-accendino-0.5.9-release.html</guid><pubDate>Mon, 10 Feb 2025 10:15:00 GMT</pubDate></item><item><title>Quick tip: massif tool of Valgrind </title><link>https://www.hardening-consulting.com/en/posts/20240618-valgrind-and-massif.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/valgrind.png" width="100px"&gt;
A little tip that I discovered some time ago: the &lt;code&gt;massive&lt;/code&gt; tool from &lt;code&gt;valgrind&lt;/code&gt;. It can address cases
where we have a program that eats up too much memory unnecessarily, but since it does cleanups correctly at the end, we don't
see anything with standard leak tools like &lt;code&gt;valgrind&lt;/code&gt; or &lt;code&gt;asan&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br style="clear: both;"&gt;&lt;/p&gt;
&lt;h2&gt;Massif&lt;/h2&gt;
&lt;p&gt;This is where the &lt;code&gt;massif&lt;/code&gt; tool from &lt;code&gt;valgrind&lt;/code&gt; comes in as well as the &lt;code&gt;massif-visualizer&lt;/code&gt; visualization tool. This
tool will allow you to regularly take snapshots of memory allocations, and to see the callstacks of location in our programs 
that make these allocations.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/en/posts/20240618-valgrind-and-massif.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>freerdp</category><category>massif</category><category>valgrind</category><guid>https://www.hardening-consulting.com/en/posts/20240618-valgrind-and-massif.html</guid><pubDate>Tue, 18 Jun 2024 05:08:00 GMT</pubDate></item><item><title>Smartcard logon with FreeRDP    </title><link>https://www.hardening-consulting.com/en/posts/20231004-smartcard-logon.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/rdplogo.jpeg" width="100px"&gt;
In (the future) FreeRDP 3.0, there is support for the &lt;em&gt;smartcard logon&lt;/em&gt;, on which I have worked, let's give some details.&lt;/p&gt;
&lt;p&gt;&lt;br style="clear: both;"&gt;&lt;/p&gt;
&lt;h2&gt;Smartcard support&lt;/h2&gt;
&lt;p&gt;We start by checking that we can access the smartcard, in my case it is a &lt;em&gt;yubikey(TM)&lt;/em&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="gp"&gt;$&lt;/span&gt;opensc-tool&lt;span class="w"&gt; &lt;/span&gt;-l
&lt;span class="gp"&gt;# &lt;/span&gt;Detected&lt;span class="w"&gt; &lt;/span&gt;readers&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;pcsc&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="go"&gt;Nr. Card Features Name&lt;/span&gt;
&lt;span class="go"&gt;0 Yes Yubico YubiKey OTP+FIDO+CCID 00 00&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/en/posts/20231004-smartcard-logon.html"&gt;Read more…&lt;/a&gt; (4 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>freerdp</category><category>logon</category><category>smartcard</category><guid>https://www.hardening-consulting.com/en/posts/20231004-smartcard-logon.html</guid><pubDate>Wed, 04 Oct 2023 05:08:00 GMT</pubDate></item><item><title>UDP support in FreeRDP part 2   </title><link>https://www.hardening-consulting.com/en/posts/20230109-udp-support-2.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/rdplogo.jpeg" width="100px"&gt;
Let's take a closer look at the RDPUDP protocol which will transport data over UDP.
To begin with, remember that only  channel data can be transported on top of UDP, so it doesn't affect older 
graphics orders (so forget speed up of &lt;em&gt;bitmapUpdates&lt;/em&gt; with UDP), however it will work with any &lt;em&gt;egfx&lt;/em&gt; transported graphics. The migration from TCP to UDP is
done through the dynamic channel, so &lt;em&gt;drdynvc&lt;/em&gt; is mandatory. This mechanism also allows
 static channels to be migrated to UDP by setting the &lt;code&gt;TRANSPORTTYPE_UDP_PREFERRED&lt;/code&gt; flag in the gcc packet of multi-transport channel data.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/en/posts/20230109-udp-support-2.html"&gt;Read more…&lt;/a&gt; (8 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>freerdp</category><category>rdp</category><category>ssl</category><category>tls</category><category>udp</category><guid>https://www.hardening-consulting.com/en/posts/20230109-udp-support-2.html</guid><pubDate>Mon, 09 Jan 2023 10:08:00 GMT</pubDate></item><item><title>UDP support in FreeRDP part 1   </title><link>https://www.hardening-consulting.com/en/posts/20210131-udp-support-1.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/rdplogo.jpeg" width="100px"&gt;
Months that I have not posted anything. So let's begin with some wishes for the new year, let's hope the Covid will
be more quiet in 2021.&lt;/p&gt;
&lt;p&gt;I'm currently working on implementing UDP support in FreeRDP, so let's have a serie of post on that subject. I'm gonna
begin with an overview, how it works, implications and I'll certainly go more in the details in the next posts.&lt;/p&gt;
&lt;p&gt;&lt;br style="clear: both;"&gt;&lt;/p&gt;
&lt;h2&gt;Overview of the UDP transport&lt;/h2&gt;
&lt;h3&gt;Documentation and specifications&lt;/h3&gt;
&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/specifications2.png" width="100px"&gt;&lt;/p&gt;
&lt;p&gt;The UDP transport is described in multiple specifications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/5073f4ed-1e93-45e1-b039-6e30c385867c]"&gt;MS-RDPBCGR&lt;/a&gt; : the core RDP specification, we have some flags in GCC packets, and of
course the description of multi-transport; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpemt/d22b606c-32c4-4647-b356-86f75e23a22c"&gt;MS-RDPEMT&lt;/a&gt; : this document describes multi-transport, that allows to install multiple transports at the
same time;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpeudp/2744a3ee-04fb-407b-a9e3-b3b2ded422b1"&gt;MS-RDPEUDP&lt;/a&gt; : the UDP transport itself;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpeudp2/9db34630-e880-4bfd-9d8d-50bc044c3288"&gt;MS-RDPEUDP2&lt;/a&gt; : the new version of the protocol;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpedyc/3bd53020-9b64-4c9a-97fc-90a79e7e1e06"&gt;MS_RDPEDYC&lt;/a&gt; : dynamic channels specification;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/en/posts/20210131-udp-support-1.html"&gt;Read more…&lt;/a&gt; (4 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>freerdp</category><category>rdp</category><category>udp</category><guid>https://www.hardening-consulting.com/en/posts/20210131-udp-support-1.html</guid><pubDate>Sun, 31 Jan 2021 10:08:00 GMT</pubDate></item><item><title>Using FreeRDP logging facility   </title><link>https://www.hardening-consulting.com/en/posts/20193001-freerdp-and-wlog.html</link><dc:creator>David FORT</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img class="alignright" src="https://www.hardening-consulting.com/images/FreeRDP.png" width="100px"&gt;
When you're working on &lt;em&gt;FreeRDP&lt;/em&gt;, it's quite usual to increase the log level and to have to collect a
massive amount of logs. And most often it doesn't fit in the terminal backscroll history, or it
is so slow (terminal rendering is CPU intensive) that you need a file storage. Another case is when
you're on a remote host and you want to retrieve the log over the network.&lt;/p&gt;
&lt;p&gt;As each time I want to use the &lt;em&gt;WLog&lt;/em&gt; capacities I'm looking at the source code, I had the idea
to write that post on the subject, so that next time I will look at this text.
&lt;br style="clear: both;"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.hardening-consulting.com/en/posts/20193001-freerdp-and-wlog.html"&gt;Read more…&lt;/a&gt; (1 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>freerdp</category><guid>https://www.hardening-consulting.com/en/posts/20193001-freerdp-and-wlog.html</guid><pubDate>Wed, 30 Jan 2019 10:12:00 GMT</pubDate></item></channel></rss>