<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>svnscha - security</title>
    <subtitle>automating annoying tasks, sharing tips, and embracing less frustration</subtitle>
    <link rel="self" type="application/atom+xml" href="https://svnscha.de/tags/security/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://svnscha.de"/>
    <generator uri="https://astro.build/">Astro</generator>
    <updated>2025-07-01T00:00:00+00:00</updated>
    <id>https://svnscha.de/tags/security/atom.xml</id>
    <entry xml:lang="en">
        <title>When Citrix App Protection Becomes App Obstruction</title>
        <published>2025-07-01T00:00:00+00:00</published>
        <updated>2025-07-01T00:00:00+00:00</updated>
        <author>
          <name>Sven Scharmentke</name>
        </author>
        <link rel="alternate" type="text/html" href="https://svnscha.de/posts/citrix-app-protection-restricted-launch/"/>
        <id>https://svnscha.de/posts/citrix-app-protection-restricted-launch/</id>
        <summary type="html">A gentle reminder that sometimes our own security features work a little too well. Even against ourselves.</summary>
        <content type="html" xml:base="https://svnscha.de/posts/citrix-app-protection-restricted-launch/">&lt;h2 id=&quot;when-your-own-product-keeps-you-honest&quot;&gt;When Your Own Product Keeps You Honest&lt;/h2&gt;
&lt;p&gt;You're trying to connect to your virtual desktop through Citrix Workspace, ready to access your work environment and get stuff done, when suddenly you're greeted with this delightfully cryptic message:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;App protection component is restricting this launch. Contact your system administrator for further assistance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Ah yes, classic.&lt;/strong&gt; Especially when you ARE the system administrator and this error message tells you absolutely nothing useful. It's like getting a &quot;something went wrong&quot; alert - technically accurate, but not exactly actionable.&lt;/p&gt;
&lt;p&gt;In my case, Nextcloud running on the host caused the problem. Closing Nextcloud allowed Citrix to connect; starting it again blocked the connection. I work at Citrix on a different team, which made this an interesting problem to debug in my spare time.&lt;/p&gt;
&lt;h2 id=&quot;so-why&quot;&gt;So, why?&lt;/h2&gt;
&lt;p&gt;Here's what's happening: When you have Nextcloud running on your host machine, it uses &lt;code&gt;LD_PRELOAD&lt;/code&gt; as part of its Flatpak sandboxing mechanism. This is a perfectly legitimate system mechanism that allows applications to override or extend library functions at runtime.&lt;/p&gt;
&lt;p&gt;App Protection sees a process using &lt;code&gt;LD_PRELOAD&lt;/code&gt; on the host and treats it as suspicious, even though the process is unrelated to the virtual desktop connection.&lt;/p&gt;
&lt;p&gt;The solution? A gentle conversation with the allow list to explain that these specific &lt;code&gt;LD_PRELOAD&lt;/code&gt; patterns from Nextcloud are actually friends, not foes.&lt;/p&gt;
&lt;h2 id=&quot;the-essential-references&quot;&gt;The Essential References&lt;/h2&gt;
&lt;p&gt;Before we fix this, credit where credit is due. The Citrix documentation that actually helped:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.citrix.com/en-us/citrix-workspace-app/app-protection/troubleshoot/generic-troubleshooting-scenarios.html&quot;&gt;General Troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.citrix.com/en-us/citrix-workspace-app/app-protection/configure/configure-allowlist-for-ld-preload&quot;&gt;LD_PRELOAD allow list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-fix-configuring-the-ld_preload-allow-list&quot;&gt;The Fix: Configuring the LD_PRELOAD Allow List&lt;/h2&gt;
&lt;p&gt;First, open the App Protection allow list configuration file:&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; nano&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; /opt/Citrix/ICAClient/config/AppProtection_Preload_Allowlist.json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add the following entries to diplomatically inform App Protection that these specific &lt;code&gt;LD_PRELOAD&lt;/code&gt; patterns from Nextcloud are legitimate and shouldn't trigger its protective instincts:&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;  &quot;LD_PRELOAD=/app/bin/../lib/libzypak-preload-host.so:/app/bin/../lib/libzypak-preload-host-spawn-strategy.so:/app/bin/../lib/libzypak-preload-host-spawn-strategy-close.so&quot;&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; : &lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;Nextcloud&quot;&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;  &quot;LD_PRELOAD=/app/bin/../lib/libzypak-preload-child.so:/app/bin/../lib/libzypak-preload-child-spawn-strategy.so&quot;&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; : &lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;/app/lib/com.nextcloud.talk/Nextcloud&quot;&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;  &quot;LD_PRELOAD=/app/bin/../lib/libzypak-preload-child.so:/app/bin/../lib/libzypak-preload-child-spawn-strategy.so&quot;&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; : &lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;/app/lib/com.nextcloud.talk/Nextcloud&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;what-do-these-entries-mean&quot;&gt;What do these entries mean?&lt;/h3&gt;
&lt;p&gt;Each line maps a specific &lt;code&gt;LD_PRELOAD&lt;/code&gt; pattern to the application that uses it. The first entry handles Nextcloud's main process, while the second handles child processes. By adding these to the allow list, App Protection will graciously step aside and allow your virtual desktop connections to proceed without further interrogation.&lt;/p&gt;
&lt;h2 id=&quot;bonus-finding-your-own-ld_preload-patterns&quot;&gt;Bonus: Finding Your Own LD_PRELOAD Patterns&lt;/h2&gt;
&lt;p&gt;If you're dealing with other applications that get blocked, here's a handy script to identify which processes are using &lt;code&gt;LD_PRELOAD&lt;/code&gt; on your system (copied from the linked documentation):&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A9955&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C586C0&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt; pid&lt;/span&gt;&lt;span style=&quot;color:#C586C0&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; /proc/*/&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#C586C0&quot;&gt;do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;    pid&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;=${&lt;/span&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;pid&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;%*/}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;    pid&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;=${&lt;/span&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;pid&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;##*/}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;    environ_file&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;/proc/&lt;/span&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;$pid&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;/environ&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C586C0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; [[ ! -f &lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;$environ_file&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; ]]; &lt;/span&gt;&lt;span style=&quot;color:#C586C0&quot;&gt;then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C586C0&quot;&gt;        continue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C586C0&quot;&gt;    fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;    ld_preload_entry&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;=$(&lt;/span&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;tr&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; '\0'&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; '\n'&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; &amp;lt; &lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;$environ_file&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; | &lt;/span&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;grep&lt;/span&gt;&lt;span style=&quot;color:#569CD6&quot;&gt; -w&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; &quot;LD_PRELOAD&quot;&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C586C0&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; [[ -n &lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;$ld_preload_entry&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; ]]; &lt;/span&gt;&lt;span style=&quot;color:#C586C0&quot;&gt;then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;        cmdline_file&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;/proc/&lt;/span&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;$pid&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;/cmdline&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;        cmdline&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;=$(&lt;/span&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;tr&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; '\0'&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; ' '&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; &amp;lt; &lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;$cmdline_file&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; | &lt;/span&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;awk&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; '{print $1}'&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;        echo&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#D7BA7D&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;$ld_preload_entry&lt;/span&gt;&lt;span style=&quot;color:#D7BA7D&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; : &lt;/span&gt;&lt;span style=&quot;color:#D7BA7D&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;$cmdline&lt;/span&gt;&lt;span style=&quot;color:#D7BA7D&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C586C0&quot;&gt;    fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C586C0&quot;&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This script scans all running processes and outputs the exact format you need for the allow list configuration.&lt;/p&gt;
&lt;h2 id=&quot;apply-the-changes&quot;&gt;Apply the Changes&lt;/h2&gt;
&lt;p&gt;Once you've updated the configuration file, restart the App Protection service:&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; restart&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; AppProtectionService-install.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Et voilà!&lt;/strong&gt; Harmony restored. Error banished, virtual desktop connection established, and you can finally keep Nextcloud running on your host machine while accessing your work environment without any diplomatic incidents.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Document this fix somewhere you'll actually remember to look. Future you will thank present you when setting up a new machine or after a product update kindly resets your allow list. This post is basically my way of creating searchable breadcrumbs for anyone (including future me) who encounters that cryptic error message and wonders why Nextcloud seems to be the culprit.&lt;/p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>🚀 New Release: antispy SDK 2025.1.0</title>
        <published>2025-04-22T00:00:00+00:00</published>
        <updated>2025-04-22T00:00:00+00:00</updated>
        <author>
          <name>Sven Scharmentke</name>
        </author>
        <link rel="alternate" type="text/html" href="https://svnscha.de/posts/antispy-sdk-release/"/>
        <id>https://svnscha.de/posts/antispy-sdk-release/</id>
        <summary type="html">Because shipping an antispy SDK in 2025 still makes sense.</summary>
        <content type="html" xml:base="https://svnscha.de/posts/antispy-sdk-release/">&lt;p&gt;I work on system insights and observability with the &lt;a href=&quot;https://uberagent.com&quot;&gt;uberAgent&lt;/a&gt; team at Citrix. Outside work, &lt;a href=&quot;https://www.windegger.wtf/&quot;&gt;Rene Windegger&lt;/a&gt; and I maintain the antispy SDK. We have worked on it for six years, and version 2025.1.0 is now available.&lt;/p&gt;
&lt;p&gt;What began as a weekend experiment to confuse disassemblers has grown into an SDK for developers who want to make binary analysis more difficult.&lt;/p&gt;
&lt;h2 id=&quot;whats-new&quot;&gt;What's New?&lt;/h2&gt;
&lt;h3 id=&quot;-comprehensive-documentation&quot;&gt;📚 Comprehensive Documentation&lt;/h3&gt;
&lt;p&gt;We've documented everything-every macro, every intricate detail of the virtual machine, and even the obscure compile-time tricks. Explore it all at &lt;a href=&quot;https://antispy.xyz/docs&quot;&gt;antispy.xyz/docs&lt;/a&gt;. Plus, you can test examples live.&lt;/p&gt;
&lt;h3 id=&quot;-compiler-explorer-integration&quot;&gt;✨ Compiler Explorer Integration&lt;/h3&gt;
&lt;p&gt;Meet &lt;a href=&quot;https://play.antispy.xyz&quot;&gt;play.antispy.xyz&lt;/a&gt;, your in-browser playground for experimenting with the SDK. Adjust macros, tweak compile options, and analyze disassembly to your heart's content. Think of it as godbolt, but tailored for the paranoid.&lt;/p&gt;
&lt;h4 id=&quot;example&quot;&gt;Example&lt;/h4&gt;
&lt;p&gt;Explore the demo showcasing &lt;code&gt;libantispy::encrypted_ptr&lt;/code&gt;, a feature that compiles into 22 basic blocks of obfuscated code-serious protection in action.&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C586C0&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; &amp;lt;antispy/libantispy.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#569CD6&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4EC9B0&quot;&gt;    libantispy&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#4EC9B0&quot;&gt;encrypted_pointer&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#569CD6&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#9CDCFE&quot;&gt;ptr&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/casts/2025-04-22-antispy-sdk-release-demo1.png&quot; alt=&quot;Demo 1&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Try it yourself: &lt;a href=&quot;https://play.antispy.xyz/z/E3dh9aPr93zcfjMoW5oazMfnr9o5KxEqYGabEsY8vb46fzrj1fr1&quot;&gt;play.antispy.xyz - libantispy::encrypted_pointer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unlike &lt;code&gt;libantispy::encrypted_pointer&lt;/code&gt;, the standard &lt;code&gt;std::shared_ptr&lt;/code&gt; behaves quite differently, as demonstrated below:&lt;/p&gt;
&lt;p&gt;After all, &lt;code&gt;std::shared_ptr&lt;/code&gt; isn't designed to be obfuscated, is it?&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/casts/2025-04-22-antispy-sdk-release-demo2.png&quot; alt=&quot;Demo 2&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;-constexpr-code-generation&quot;&gt;🧠 Constexpr Code Generation&lt;/h3&gt;
&lt;p&gt;The antispy virtual machine now supports full compile-time constexpr functionality. Transform data, encrypt logic, and generate obfuscation layers-all before runtime. Who needs CPU cycles anyway?&lt;/p&gt;
&lt;h3 id=&quot;️-updated-toolchains&quot;&gt;⚙️ Updated Toolchains&lt;/h3&gt;
&lt;p&gt;We've modernized everything so you don't have to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Android + iOS SDKs:&lt;/strong&gt; ✅&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Outdated compilers:&lt;/strong&gt; 🪦&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legacy baggage:&lt;/strong&gt; 🔥&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you're still using GCC 4.x, well, good luck.&lt;/p&gt;
&lt;h2 id=&quot;why-antispy-sdk&quot;&gt;Why antispy SDK?&lt;/h2&gt;
&lt;p&gt;The antispy SDK is useful for high-assurance binaries, anti-reversing work, or experiments with disassemblers. It includes documentation and a live explorer so you can try the available techniques before adding them to a project.&lt;/p&gt;
&lt;h3 id=&quot;platforms--architectures&quot;&gt;Platforms &amp;amp; Architectures&lt;/h3&gt;
&lt;p&gt;The antispy SDK supports the following major compilers and CPU architectures when C++20 is available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows:&lt;/strong&gt; x86, x64, ARM64&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux:&lt;/strong&gt; x86, x64, ARM64&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;macOS:&lt;/strong&gt; ARM and Intel&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;iOS:&lt;/strong&gt; Including tvOS, watchOS, visionOS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Android:&lt;/strong&gt; x86, x86_64, armeabi-v7a, armv8a&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bare Metal SOCs:&lt;/strong&gt; Fully supported&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This gives you the same API across the supported platforms.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; If C++ metaprogramming excites you and you believe binaries should fight back, this SDK is your perfect match.&lt;/p&gt;
&lt;p&gt;Got feedback, feature requests? Let us know-we're probably not sleeping anyway.&lt;/p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Simplify SSH</title>
        <published>2024-10-03T00:00:00+00:00</published>
        <updated>2024-10-03T00:00:00+00:00</updated>
        <author>
          <name>Sven Scharmentke</name>
        </author>
        <link rel="alternate" type="text/html" href="https://svnscha.de/posts/simplify-ssh/"/>
        <id>https://svnscha.de/posts/simplify-ssh/</id>
        <summary type="html">How to stop typing your SSH Key passphrase every time. (because, let's be real, we're all a little lazy)</summary>
        <content type="html" xml:base="https://svnscha.de/posts/simplify-ssh/">&lt;h2 id=&quot;why-you-ask&quot;&gt;Why, You Ask?&lt;/h2&gt;
&lt;p&gt;I was tired of entering my SSH key passphrase every time I connected to a server. The setup below lets &lt;code&gt;ssh-agent&lt;/code&gt; remember it for the current terminal session and also keeps host settings in one place.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It's time-consuming and frustrating. I'm tired of it.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;So, you've got your shiny new SSH key and every time you want to connect to a server, you're greeted with that ever-familiar password prompt. Sure, typing your SSH key passphrase every time is good for security, but, come on  -  who wants to do that? I mean, I don't know about you, but I've got enough passwords to remember without constantly dealing with this nonsense.&lt;/p&gt;
&lt;p&gt;Let's save ourselves some time and effort by getting the SSH agent to remember our keys for us. That way, you can just run your commands like the seasoned developer you are without worrying about the whole &quot;password entering&quot; thing every single time.&lt;/p&gt;
&lt;h2 id=&quot;step-1-start-the-ssh-agent&quot;&gt;Step 1: Start the SSH Agent&lt;/h2&gt;
&lt;p&gt;First things first  -  let's get the SSH agent up and running. It's like your personal SSH butler, here to remember your key so you don't have to.&lt;/p&gt;
&lt;p&gt;Open up your terminal and type:&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; $(&lt;/span&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;ssh-agent&lt;/span&gt;&lt;span style=&quot;color:#569CD6&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Boom! Now the agent is running in the background, ready to hold your keys like the responsible little daemon it is.&lt;/p&gt;
&lt;h2 id=&quot;step-2-add-your-key-to-the-ssh-agent&quot;&gt;Step 2: Add your key to the SSH Agent&lt;/h2&gt;
&lt;p&gt;Now that the agent is up, let's give it your key. You only need to do this once per session, and the agent will keep it ready for you.&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;ssh-add&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; ~/.ssh/your_key&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Replace &lt;code&gt;your_key&lt;/code&gt; with the name of your private key file. Enter the passphrase once and &lt;code&gt;ssh-agent&lt;/code&gt; will remember it for the rest of the terminal session.&lt;/p&gt;
&lt;h2 id=&quot;step-3-configure-your-ssh-setup-to-be-even-lazier-i-mean-efficient&quot;&gt;Step 3: Configure your SSH setup to be even lazier (I mean efficient)&lt;/h2&gt;
&lt;p&gt;Okay, we've got the agent running and the key added, but we can take it one step further. Why not tell SSH exactly what key to use for which server, so you never have to worry about it picking the wrong one?&lt;/p&gt;
&lt;p&gt;To do this, we're going to set up a &lt;code&gt;~/.ssh/config&lt;/code&gt; file. If you don't have this file yet, don't worry  -  it's as easy as creating it:&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;touch&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; ~/.ssh/config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, crack open that file with your favorite text editor and set things up like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;Host&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; your-server-alias&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;    HostName&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; your.server.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;    User&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; your-username&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;    IdentityFile&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; ~/.ssh/your_key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;    IdentitiesOnly&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; yes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;breaking-it-down&quot;&gt;Breaking it down&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host&lt;/strong&gt;: You can use any alias here that makes sense to you. This is what you'll type when you want to connect to this server.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HostName&lt;/strong&gt;: The actual domain or IP address of the server.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User&lt;/strong&gt;: Your username on that server, so you do not have to specify it each time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IdentityFile&lt;/strong&gt;: The path to your SSH private key.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IdentitiesOnly yes&lt;/strong&gt;: Tells SSH to use &lt;em&gt;only&lt;/em&gt; this key, rather than trying every key it can find in the agent (which is how you avoid that annoying &quot;user mismatch&quot; issue).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;step-4-create-a-wrapper-script-for-ssh-agent-control&quot;&gt;Step 4: Create a wrapper script for SSH Agent control&lt;/h2&gt;
&lt;p&gt;Alright, you want control over when your SSH agent starts up  -  totally understandable! Instead of running the agent automatically on login (which might feel a bit &lt;em&gt;too&lt;/em&gt; autonomous), we'll create a neat little wrapper script. You can trigger it whenever you feel like starting the agent and adding your SSH key for the session.&lt;/p&gt;
&lt;p&gt;Here's how to set that up.&lt;/p&gt;
&lt;h3 id=&quot;create-the-wrapper-script&quot;&gt;Create the wrapper script&lt;/h3&gt;
&lt;p&gt;Let's create a script that starts the SSH agent, adds your key, and gives you control over when it runs. We'll call this script &lt;code&gt;init-ssh&lt;/code&gt;, and we'll stick it somewhere like &lt;code&gt;/usr/local/bin&lt;/code&gt; so it's available from anywhere in your terminal.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create the script:&lt;/strong&gt;
Open your terminal and create the &lt;code&gt;init-ssh&lt;/code&gt; script:&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; nano&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; /usr/local/bin/init-ssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Add the script content:&lt;/strong&gt;
Paste the following content into the file:&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A9955&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A9955&quot;&gt;# Start the SSH agent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; $(&lt;/span&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;ssh-agent&lt;/span&gt;&lt;span style=&quot;color:#569CD6&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A9955&quot;&gt;# Add the key to the agent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;ssh-add&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; ~/.ssh/your_key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A9955&quot;&gt;# Optional: Display agent status for peace of mind&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;ssh-add&lt;/span&gt;&lt;span style=&quot;color:#569CD6&quot;&gt; -l&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Make the script executable:&lt;/strong&gt;
Give the script executable permissions:&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; chmod&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; +x&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; /usr/local/bin/init-ssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;how-to-use-the-script&quot;&gt;How to use the script&lt;/h4&gt;
&lt;p&gt;Whenever you want to start your SSH agent for a session, just run:&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CE9178&quot;&gt; init-ssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will start the agent, add your key, and show you a list of the keys currently loaded in the agent. You've got full control  -  start the agent when you want, stop it when you're done, and enjoy a password-free SSH experience for the duration of that session.&lt;/p&gt;
&lt;h3 id=&quot;optional-stopping-the-ssh-agent&quot;&gt;Optional: Stopping the SSH Agent&lt;/h3&gt;
&lt;p&gt;If you want to stop the SSH agent after you're done with it, you can either let it die when you close your terminal or manually kill it with:&lt;/p&gt;
&lt;pre class=&quot;astro-code dark-plus&quot; style=&quot;background-color:#1E1E1E;color:#D4D4D4; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt; $(&lt;/span&gt;&lt;span style=&quot;color:#DCDCAA&quot;&gt;ssh-agent&lt;/span&gt;&lt;span style=&quot;color:#569CD6&quot;&gt; -k&lt;/span&gt;&lt;span style=&quot;color:#D4D4D4&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That way, you get all the convenience of an SSH agent when you need it, without it running indefinitely in the background. You're now in complete control of your SSH setup, and you can keep things secure and efficient, exactly the way you like it.&lt;/p&gt;
&lt;p&gt;Happy SSH'ing!&lt;/p&gt;
</content>
    </entry>
</feed>
