<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="https://amrosia.dev/feed_style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <tabi:metadata xmlns:tabi="https://github.com/welpo/tabi">
        <tabi:base_url>https:&#x2F;&#x2F;amrosia.dev</tabi:base_url>
        <tabi:separator>
            •
        </tabi:separator>
        <tabi:about_feeds>This is a web feed, also known as an Atom feed. Subscribe by copying the URL from the address bar into your newsreader. Visit About Feeds to learn more and get started. It&#x27;s free.</tabi:about_feeds>
        <tabi:visit_the_site>Visit website</tabi:visit_the_site>
        <tabi:recent_posts>Recent posts</tabi:recent_posts>
        <tabi:last_updated_on>Updated on $DATE</tabi:last_updated_on>
        <tabi:default_theme>dark</tabi:default_theme>
        <tabi:post_listing_date>date</tabi:post_listing_date>
        <tabi:current_section>rust</tabi:current_section>
    </tabi:metadata><link rel="extra-stylesheet" href="https://amrosia.dev/skins/teal.css?h=bd19e558a52d678a50de" /><title>Segfault diaries - rust</title>
        <subtitle>Welcome to my blog!</subtitle>
    <link href="https://amrosia.dev/tags/rust/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://amrosia.dev/tags/rust/" rel="alternate" type="text/html"/>
    <generator uri="https://www.getzola.org/">Zola</generator><updated>2026-07-25T00:00:00+00:00</updated><id>https://amrosia.dev/tags/rust/atom.xml</id><entry xml:lang="en">
        <title>Introducing WireWrench v2</title>
        <published>2026-07-25T00:00:00+00:00</published>
        <updated>2026-07-25T00:00:00+00:00</updated>
        <author>
            <name>amrosia</name>
        </author>
        <link rel="alternate" href="https://amrosia.dev/blog/introducing-wirewrench/" type="text/html"/>
        <id>https://amrosia.dev/blog/introducing-wirewrench/</id>
        
            <content type="html">&lt;p&gt;WireWrench v1 automated URL injection for web shells. v2 rethinks the architecture: decouple the shell from the client so the shell survives crashes, disconnects, and agent reboots.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;problem&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#problem&quot; aria-label=&quot;Anchor link for: problem&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Problem&lt;&#x2F;h2&gt;
&lt;p&gt;AI agents and automated tooling need stateless interactions with remote shells. A traditional reverse shell ties the client and shell together — if the agent crashes or the connection drops, the session is gone.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;solution&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#solution&quot; aria-label=&quot;Anchor link for: solution&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Solution&lt;&#x2F;h2&gt;
&lt;p&gt;Two binaries:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ww-server&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt; — Listens on a port, catches incoming reverse shells, keeps them alive&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ww&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt; — Sends one-shot commands to the server, reads output over a Unix socket&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The shell stays alive regardless of what happens to the client. Multiple clients can interact with different sessions through the same server.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;use-cases&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#use-cases&quot; aria-label=&quot;Anchor link for: use-cases&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Use cases&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Penetration testing without fragile session management&lt;&#x2F;li&gt;
&lt;li&gt;AI-assisted operations — fire a command, read output, disconnect, come back later&lt;&#x2F;li&gt;
&lt;li&gt;Multi-operator scenarios — team members interact with different shells on the same target&lt;&#x2F;li&gt;
&lt;li&gt;CTFs — persistent shell access through client crashes&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;amrosia&#x2F;wirewrench&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;amrosia&#x2F;wirewrench&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        <summary type="html">WireWrench v1 automated URL injection for web shells. v2 rethinks the architecture: decouple the shell from the client so the shell survives crashes, disconnects, and agent reboots…</summary>
        </entry><entry xml:lang="en">
        <title>Introducing LarpRDP</title>
        <published>2026-07-24T00:00:00+00:00</published>
        <updated>2026-07-24T00:00:00+00:00</updated>
        <author>
            <name>amrosia</name>
        </author>
        <link rel="alternate" href="https://amrosia.dev/blog/introducing-larprdp/" type="text/html"/>
        <id>https://amrosia.dev/blog/introducing-larprdp/</id>
        
            <content type="html">&lt;p&gt;SharpRDP runs commands on Windows over RDP by injecting keystrokes via mstscax.dll. It’s clever — RDP is a GUI protocol, and treating it as a scripting surface brings the same automation benefits that shell scripting brings to a terminal.&lt;&#x2F;p&gt;
&lt;p&gt;But SharpRDP is Windows-only and limited to opening the Run dialog and typing one command.&lt;&#x2F;p&gt;
&lt;p&gt;LarpRDP is a Linux-native rewrite in Rust wrapping FreeRDP3.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;what-s-different&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#what-s-different&quot; aria-label=&quot;Anchor link for: what-s-different&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
What’s different&lt;&#x2F;h2&gt;
&lt;p&gt;Headless RDP is similar to BadUSB. Instead of a single Win+R command, LarpRDP supports DuckyScript — full keystroke sequences with delays, modifier combos, and screenshot capture for verification. Same format USB Rubber Ducky uses, running over RDP.&lt;&#x2F;p&gt;
&lt;p&gt;The repo includes an example DuckyScript that automates a reverse shell: start a listener, run &lt;code&gt;larprdp&lt;&#x2F;code&gt;, and it types everything out end to end.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;where-it-fits&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#where-it-fits&quot; aria-label=&quot;Anchor link for: where-it-fits&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Where it fits&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Pentesting — post-exploitation through RDP without dropping agents&lt;&#x2F;li&gt;
&lt;li&gt;CTFs — reverse shell onto RDP-only targets&lt;&#x2F;li&gt;
&lt;li&gt;Red teaming — DuckyScript payloads over RDP instead of USB&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;amrosia&#x2F;LarpRDP&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;amrosia&#x2F;LarpRDP&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        <summary type="html">SharpRDP runs commands on Windows over RDP by injecting keystrokes via mstscax.dll. It’s clever — RDP is a GUI protocol, and treating it as a scripting surface brings the same automation benefits that shell scripting brings to a terminal.
But SharpRDP is Windows-only and limited to opening the Run dialog and typing one command.
LarpRDP is a Linux-native rewrite in Rust wrapping FreeRDP3…</summary>
        </entry>
</feed>
