<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jonas Lieb</title><link>https://www.jonaslieb.de/</link><description>Recent content on Jonas Lieb</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 25 Apr 2026 12:00:00 +0100</lastBuildDate><atom:link href="https://www.jonaslieb.de/index.xml" rel="self" type="application/rss+xml"/><item><title>Yet Another Hilbert Map of the (IPv4) Internet</title><link>https://www.jonaslieb.de/blog/iphilbert/</link><pubDate>Sat, 25 Apr 2026 12:00:00 +0100</pubDate><guid>https://www.jonaslieb.de/blog/iphilbert/</guid><description>&lt;p&gt;In this blog post I want to showcase a recent project of mine: I took &lt;a href="https://mediatum.ub.tum.de/1723389" class="external-link" target="_blank" rel="noopener"&gt;IPv4 port
scans gathered by Patrick Sattler et al. (Technische Universität
München)&lt;/a&gt; and visualized it as a &lt;em&gt;zoomable&lt;/em&gt;
Hilbert map using &lt;a href="https://leafletjs.com/" class="external-link" target="_blank" rel="noopener"&gt;Leaflet&lt;/a&gt;. Visualization of the
Internet using the Hilbert curve is not a new approach, as it has been suggested
and implemented by several people in the past. Nevertheless, all existing
implementations that I looked at were lacking interactivity, especially the
ability to zoom into subnets for closer inspection. That&amp;rsquo;s why I built
&lt;a href="https://hilbert.app.jonaslieb.de/" class="external-link" target="_blank" rel="noopener"&gt;https://hilbert.app.jonaslieb.de/&lt;/a&gt;!&lt;/p&gt;</description></item><item><title>TOTP Brute-Force Statistics</title><link>https://www.jonaslieb.de/blog/totp-brute-force/</link><pubDate>Mon, 09 Mar 2026 21:10:00 +0100</pubDate><guid>https://www.jonaslieb.de/blog/totp-brute-force/</guid><description>&lt;p&gt;There is this tiny statistics problem in IT security that almost nobody talks
about, yet I have seen people get it wrong many times in the past: Calculation
of the success probability of brute-force attacks against TOTP two-factor
authenticators.&lt;/p&gt;
&lt;p&gt;As a reminder: TOTP tokens are defined in &lt;a class="external-link" target="_blank" href="https://datatracker.ietf.org/doc/html/rfc6238" title="RFC 6238 (&amp;#34;TOTP: Time-Based One-Time Password Algorithm&amp;#34;)"&gt;RFC 6238 (&amp;#34;TOTP: Time-Based One-Time Password Algorithm&amp;#34;)&lt;/a&gt;. They usually consist
of six-digit strings that change every 30 seconds. The entire sequence of tokens
is derived from a secret (and the current time) in a way that makes token
prediction without the secret impossible. TOTP tokens are commonly used as a
second factor, in addition to a user&amp;rsquo;s password, reducing the impact of a
potential password compromise.&lt;/p&gt;</description></item><item><title>The Curious Case of nltest and LmOwfPassword/NtOwfPassword</title><link>https://www.jonaslieb.de/blog/nltest-ntowfpassword/</link><pubDate>Mon, 25 Nov 2024 17:47:50 +0100</pubDate><guid>https://www.jonaslieb.de/blog/nltest-ntowfpassword/</guid><description>&lt;p&gt;I recently fiddled around with Window&amp;rsquo;s built-in command
&lt;a href="https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/cc731935%28v=ws.11%29" class="external-link" target="_blank" rel="noopener"&gt;&lt;code&gt;nltest&lt;/code&gt;&lt;/a&gt;
and noticed that &lt;code&gt;nltest /user:&amp;lt;username&amp;gt;&lt;/code&gt;, when executed as an Administrator,
yields some interesting information about the requested user:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.jonaslieb.de/blog/nltest-ntowfpassword/images/nltest.png" title="Output of nltest"&gt;&lt;img src="https://www.jonaslieb.de/blog/nltest-ntowfpassword/images/nltest_hu_c9fe61e021a325f5.webp" width="1013" height="683" alt="Output of nltest"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The two fields &lt;code&gt;LmOwfPassword&lt;/code&gt; and &lt;code&gt;NtOwfPassword&lt;/code&gt; spiked my interest. The
abbreviation &amp;ldquo;Owf&amp;rdquo; typically stands for &lt;em&gt;one-way-function&lt;/em&gt;, which is synonymous
with &lt;em&gt;hash function&lt;/em&gt; or even &lt;em&gt;hash value&lt;/em&gt;. If &lt;code&gt;LmOwfPassword&lt;/code&gt; and
&lt;code&gt;NtOwfPassword&lt;/code&gt; corresponded to the user&amp;rsquo;s LM and NT hash, &lt;code&gt;nltest&lt;/code&gt; might be
another option for dumping the
&lt;a href="https://en.wikipedia.org/wiki/Security_Account_Manager" class="external-link" target="_blank" rel="noopener"&gt;SAM&lt;/a&gt; &amp;#x1f914;&lt;/p&gt;</description></item><item><title>Working with TCP Streams in Wireshark Dissectors</title><link>https://www.jonaslieb.de/blog/wireshark-tcp/</link><pubDate>Sat, 02 Nov 2024 09:33:34 +0200</pubDate><guid>https://www.jonaslieb.de/blog/wireshark-tcp/</guid><description>&lt;p&gt;In &lt;a href="https://www.jonaslieb.de/series/wireshark-dissector-guides/" &gt;my previous posts of this series&lt;/a&gt;, I focused on analyzing UDP-based protocols. However, many real-life network protocols rely on TCP for reliability, ordering and error checking. Unfortunately, TCP&amp;rsquo;s &lt;em&gt;stream&lt;/em&gt;-like nature, compared for example to UDP&amp;rsquo;s discrete &lt;em&gt;datagrams&lt;/em&gt;, creates unique challenges for packet analysis. This post will discuss how to handle these complexities in Wireshark dissectors. I will build on &lt;a href="https://wiki.wireshark.org/Lua/Dissectors#tcp-reassembly" class="external-link" target="_blank" rel="noopener"&gt;Wireshark&amp;rsquo;s documentation regarding TCP desegmentation&lt;/a&gt; and suggest effective patterns for implementing TCP-aware dissectors in Lua.&lt;/p&gt;</description></item><item><title>Enhancing Wireshark Lua Dissectors with C Libraries</title><link>https://www.jonaslieb.de/blog/wireshark-lua-c/</link><pubDate>Fri, 13 Sep 2024 20:52:55 +0200</pubDate><guid>https://www.jonaslieb.de/blog/wireshark-lua-c/</guid><description>&lt;p&gt;Another way to step up your Wireshark game is to enhance Lua dissectors with features implemented in C/C++. Lua has a wonderful &lt;a href="https://www.lua.org/pil/24.html" class="external-link" target="_blank" rel="noopener"&gt;C API&lt;/a&gt; that allows to seamlessly leverage C libraries within Lua code. I found this especially helpful when working with cryptography or compression, as Wireshark does not provide such capabilities in its Lua API. With this post I want to explain how to wrap C libraries for using them in Lua and how to use pre-packaged Lua libraries from &lt;a href="https://luarocks.org/" class="external-link" target="_blank" rel="noopener"&gt;LuaRocks&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Analyzing VPN Protocols with Wireshark</title><link>https://www.jonaslieb.de/blog/wireshark-vpn/</link><pubDate>Mon, 09 Sep 2024 21:34:49 +0200</pubDate><guid>https://www.jonaslieb.de/blog/wireshark-vpn/</guid><description>&lt;p&gt;In the &lt;a href="../python-vpn/" &gt;previous post&lt;/a&gt;, I demonstrated how to implement a simple VPN service in Python. In this post I&amp;rsquo;ll show how to write a plugin for the packet sniffer &lt;a href="https://www.wireshark.org/" class="external-link" target="_blank" rel="noopener"&gt;Wireshark&lt;/a&gt; in order to analyze the VPN. The post is again intended as a general template, this time for the creation of Wireshark dissectors, with a focus on tunneling protocols.&lt;/p&gt;</description></item><item><title>Implementing Layer-3 VPN Protocols in Python</title><link>https://www.jonaslieb.de/blog/python-vpn/</link><pubDate>Sun, 25 Aug 2024 15:07:00 +0200</pubDate><guid>https://www.jonaslieb.de/blog/python-vpn/</guid><description>&lt;p&gt;In this post, we&amp;rsquo;ll explore a practical approach to implementing tunneling protocols in Python. Along the way, you&amp;rsquo;ll gain an understanding of key concepts such as tunneling, TUN/TAP interfaces, and packet encapsulation. This post will be the first in a multipart &lt;a href="https://www.jonaslieb.de/series/wireshark-dissector-guides/" &gt;series&lt;/a&gt;, where I will also demonstrate how to analyze tunneling protocols in Wireshark.&lt;/p&gt;</description></item><item><title>Reverse Engineering Arduino Binaries with Ghidra</title><link>https://www.jonaslieb.de/blog/arduino-ghidra-intro/</link><pubDate>Mon, 08 Apr 2024 00:00:00 +0000</pubDate><guid>https://www.jonaslieb.de/blog/arduino-ghidra-intro/</guid><description>&lt;p&gt;Reverse engineering binaries for embedded devices like the Arduino can provide valuable insights for security researchers, but documentation on how to do so — especially using tools like &lt;a href="https://ghidra-sre.org/" class="external-link" target="_blank" rel="noopener"&gt;Ghidra&lt;/a&gt; — is surprisingly limited. This post will provide a short introduction to the architecture and serve as a starting point for the analysis. As of April 2024, Ghidra&amp;rsquo;s support for the ATmega328P (used by the Arduino Uno) is still evolving, which we&amp;rsquo;ll explore in detail.&lt;/p&gt;</description></item></channel></rss>