Chrysalis Backdoor – In-Depth Technical Analysis of a Sophisticated Supply Chain Compromise

1. The Cause

2nd February: it was confirmed that the vendor’s website has been compromised for at least 5 months (between June 2025 & November/December 2025).

  • The attack allowed malicious actors to intercept and redirect update traffic destined for notepad-plus-plus.org
  • This was abused to deliver an undocumented custom backdoor, now dubbed as “Chrysalis”
  • This was due to infrastructural weaknesses on the hosting provider’s end.

To address this issue, notepad++’s website is migrated to a new hosting provider.

2. Overview Of The Malware

The campaign is being attributed to the APT Group Lotus Blossom (ID: G0030); a well-documented nation-state actor.

Every piece of malware was neatly packed in a NSIS installer file. Following are it’s contents:

  • NSIS installation script
  • BluetoothService.exe (Renamed a Bitdefender file, then abused it for DLL sideloading)
  • BluetoothService (Encrypted shellcode)
  • log.dll (The said malicious DLL loaded by “BluetoothService.exe”)

The attackers took a real Bitdefender program, renamed it, and used it to trick Windows into loading a malicious DLL file that ran the malware. (DLL sideloading)

3. The Implant

Action 1: Notepad++ is opened (On its own, this is completely normal.)

Action 2: GUP.exe runs next (Legitimate ; the auto-updater for Notepad++) Action 3: A program called “update.exe” runs – This is where things get interesting.

3a. Update.exe

  • Update.exe is download from “95.179.213.0” 
  • As per VT, it’s got a Bad Reputation : https://www.virustotal.com/gui/url/b9fd40e71672371f3172674ae17c30183d6accc367b61590097f5510bc50568c

Analysis show that it is an NSIS installer (Tool to create windows installers)

Upon unpacking, it extracts:

  • NSIS installation script
  • BluetoothService.exe
  • BluetoothService 
  • log.dll

3b. BluetoothService.exe

  • The “BluetoothService.exe” is just the renamed version of a legit Bitdefender program.
  • The attackers used this as a loader by placing a malicious DLL (log.dll) beside it.
  • When the renamed program runs, it loads the malicious DLL due to how Windows resolves DLLs.

3c. log.dll

  • Windows looks for required DLLs in the same directory as the executable before looking in system folders; this is the mechanism that is abused by the attackers in this case.
  • This file has 2 functions in it; LogInit & LogWrite 
  • LogInit loads “BluetoothService (Encrypted shellcode)” into the memory of the running process.
  • LogWrite decrypts and execute the shellcode
  • It implements API Hashing function (Resolves required APIs at execution)

4. The Malware itself

Once decrypted by the log.dll, Chrysalis is uncovered; A deliberate anti-analysis tradecraft that’s persistent, loaded with capabilities, utilizes advanced evasion techniques.

  • Evasions of Signature -based detections: Abuses legitimate executables for DLL sideloading with a generic DLL name. 
  • AV/Static Analysis/YARA Evasion: Directly calling the Windows APIs in specific combinations/order can be detected as a sign of malicious behaviour by most AVs and security solutions hence Separate custom API hashing mechanisms are implemented in both the loader and payload. This also delays behavioural detections 
  • layered obfuscation and a structured C2 communication model. 
  • The code is intentionally such that it conceals strings, make static analysis difficult, and evades signature-based detection. The names of the DLLs that the main function calls are constructed on the go using 2 separation functions; these functions implement a custom, position-dependent character obfuscation scheme meaning that each character is transformed using multiple binary mathematical operations (XOR, Multiplication, bit rotations) to ensure that identical characters are transformed diversely.
  • Once these DLLs are load, the backdoor begins executing the main logic which includes configuration to establish communication with the C2 (command-and-control) to achieve objectives.
  • First, the malware must decrypt its configuration; the “BluetoothService” file saves the encrypted configuration at a specific memory offset and is of an expected memory length. Once again, this technique makes the static analysis more complex as the analyst does not know where the configuration will be, or where in the memory the decryption key will be.

4a. Runtime

The program initializes like a normal windows program by performing a MSVC C runtime initialization after which it dynamically reconstructs and loads multiple DLLs needed to run; the names of these DLLs are constructed on the go and the process is described in detail in the former heading.

Once this is done, the malware must access its configurations and establish communication with the C2. Initially, the configuration is encrypted and the malware has the key hardcoded at a specific memory offset and of specific length (which are also hardcoded into it). Once the backdoor has taken ahold of the decryption key, (and it knows that the algorithm is RC4), it decrypts the configuration using this key (qwhvb^435h&*7).

4b. Communications

The configuration reveals the following information:

Before comms start, the malware has already:

  1. Resolved networking APIs via API hashing
  2. Loaded required DLLs
  3. Initialized runtime structures and configurations.

To blend in with the normal traffic, C2 server and backdoor communicates in HTTP making it look like normal windows application traffic. 

When the Chrysalis backdoor runs, it interprets command-line arguments and, if none or only specific ones are present, it proceeds to install itself persistently before doing anything else. Its persistence behavior is controlled by the first process instance it launches without special flags.

Chrysalis differentiates its operational mode based on the command-line arguments passed at startup:

ArgumentModeWhat Happens
(None)InstallationSets persistence (creates service or registry autorun), then restarts itself with a launcher flag and exits.
-iLauncherSpawns a new instance with a payload flag then exits.
-kPayloadSkips persistence checks and runs the main backdoor logic.

So, when it first runs without arguments, Chrysalis installs persistence and then restarts itself to actually run the malicious payload. Persistence is set up primarily via service creation or registry as a fall back mechanism.

Once done, a mutex(“mutual exclusion object” is a synchronization primitive used in programming to protect shared resources from concurrent access by multiple threads) is registered to ensure only one instance of this being executed; if another instance exists, malware is terminated. Else, if the check is clear, information gathering begins; malware queries for the following: 

  • Current time
  • Installed AVs
  • OS version
  • user name
  • computer name

Next, the computer name, user name, OS version and string “1.01” are concatenated and the data is hashed. This value is later turned into its decimal ascii representation and used most likely as a unique identifier of the infected host.

Chrysalis’ first beacon typically includes:

  • System details (hostname, OS, architecture)
  • A unique identifier (GUID-based)
  • A campaign/implant identifier
  • Possibly other telemetry

This is packaged in an HTTP request to the C2 URL and All of this happens using Windows’ built-in HTTP stack, hence the traffic is encrypted using TLS which helps in hide content from network detection.

Conclusion

The discovery of the Chrysalis backdoor is a testament to the statement that the only true way to a secure environment is with continuous monitoring and detection. MMC helps organizations by providing MDR and 24/7 SOC (Security Operation Center) services to ensure that they’re protected in the ever-evolving landscape of cyber security.

Indicators of compromise (IoCs)

File indicators

Note: data may appear cut-off or hidden due to the string lengths in column 2. You can copy the full string by highlighting what is visible.

update.exea511be5164dc1122fb5a7daa3eef9467e43d8458425b15a640235796006590c9
[NSIS.nsi]8ea8b83645fba6e23d48075a0d3fc73ad2ba515b4536710cda4f1f232718f53e
BluetoothService.exe2da00de67720f5f13b17e9d985fe70f10f153da60c9ab1086fe58f069a156924
BluetoothService77bfea78def679aa1117f569a35e8fd1542df21f7e00e27f192c907e61d63a2e
log.dll3bdc4c0637591533f1d4198a72a33426c01f69bd2e15ceee547866f65e26b7ad
u.bat9276594e73cda1c69b7d265b3f08dc8fa84bf2d6599086b9acc0bb3745146600
conf.cf4d829739f2d6ba7e3ede83dad428a0ced1a703ec582fc73a4eee3df3704629a
libtcc.dll4a52570eeaf9d27722377865df312e295a7a23c3b6eb991944c2ecd707cc9906
admin831e1ea13a1bd405f5bda2b9d8f2265f7b1db6c668dd2165ccc8a9c4c15ea7dd
loader10a9b8df968df41920b6ff07785cbfebe8bda29e6b512c94a3b2a83d10014d2fd
uffhxpSy4c2ea8193f4a5db63b897a2d3ce127cc5d89687f380b97a1d91e0c8db542e4f8
loader2e7cd605568c38bd6e0aba31045e1633205d0598c607a855e2e1bca4cca1c6eda
3yzr31vk078a9e5c6c787e5532a7e728720cbafee9021bfec4a30e3c2be110748d7c43c5
ConsoleApplication2.exeb4169a831292e245ebdffedd5820584d73b129411546e7d3eccf4663d5fc5be3
system7add554a98d3a99b319f2127688356c1283ed073a084805f14e33b4f6a6126fd
s047t5g.exefcc2765305bcd213b7558025b2039df2265c3e0b6401e4833123c461df2de51a

Network indicators

95.179.213.0
api[.]skycloudcenter[.]com
api[.]wiresguard[.]com
61.4.102.97
59.110.7.32
124.222.137.114

MITRE TTPs

ATT&CK IDName
T1204.002User Execution: Malicious File
T1036Masquerading
T1027Obfuscated Files or Information
T1027.007Obfuscated Files or Information: Dynamic API Resolution
T1140Deobfuscate/Decode Files or Information
T1574.002DLL Side-Loading
T1106Native API
T1055Process Injection
T1620Reflective Code Loading
T1059.003Command and Scripting Interpreter: Windows Command Shell
T1083File and Directory Discovery
T1005Data from Local System
T1105Ingress Tool Transfer
T1041Exfiltration Over C2 Channel
T1071.001Application Layer Protocol: Web Protocols (HTTP/HTTPS)
T1573Encrypted Channel
T1547.001Boot or Logon Autostart Execution: Registry Run Keys
T1543.003Create or Modify System Process: Windows Service
T1480.002Execution Guardrails: Mutual Exclusion
T1070.004Indicator Removal on Host: File Deletion

*IOCs contributed by @AIexGP on X.

*IOCs taken from Rapid7’s blog “The Chrysalis Backdoor: A Deep Dive into Lotus Blossom’s toolkit”

Sources:

Rapid7’s Research: https://www.rapid7.com/blog/post/tr-chrysalis-backdoor-dive-into-lotus-blossoms-toolkit/

Notepad++ Press Release: https://notepad-plus-plus.org/news/hijacked-incident-info-update/

case studies

See More Case Studies

Contact us

Contact us

We’re happy to answer any questions you may have and help you determine which of our services best fit your needs.

What happens next?
1

We Schedule a call at your convenience 

2

We do a discovery and consulting meeting 

3

We prepare a proposal 

Schedule a Free Consultation