Threat Intelligence

Analysis of Formbook Payload Loaded by PureCrypter Distributed from South Korean IP

Analysis of Formbook Payload Loaded by PureCrypter Distributed from South Korean IP

EnkiWhiteHat

2025. 8. 29.

Executive Summary

  • We identified a South Korean IP address that was leveraged for phishing email distribution and malware delivery.

  • Threat actor employed FormBook malware packaged with PureCrypter.

  • The malware employs various techniques such as anti-debugging and multi-stage code injection to complicate analysis and conceal malicious behavior.

  • Similarities were found between the C&C server used in the attack and other Kimsuky attack infrastructure.

1. Overview

In May 2025, multiple RAR and EXE files associated with the South Korean IP address 158.247.250[.]251 were discovered. This IP was found in historical DNS records to be linked to a domain suspected of being part of phishing infrastructure related to Naver. Also, URL query logs associated with Naver login pages remain on VirusTotal.

Scanned URLs of 158.247.250[.]251

caption - Scanned URLs of 158.247.250[.]251

Malicious files related to this IP (phishing email files and attached RAR, EXE files) were reported in South Korea, and the phishing email was also sended to the email account of a South Korean energy company. We finally confirmed that the distributed malware is FormBook, packed with PureCrypter.

2. Malware Analysis

Attack Flow Diagram

caption - Attack Flow Diagram

2.1. Initial Access

Initial access was carried out through an Outlook phishing email. The receiver of the email was confirmed to belong to a South Korean energy company, and the email contained an EXE file disguised as an air cargo waybill, compressed in a RAR archive.


Sent phishing email

caption - Sent phishing email

The sender of the email is noreplychleeportchlee@dhl.com. It appears to be spoofing the domain of a Germany-based logistics company, and the strategy of delivering phishing emails in the form of international shipping invoices has frequently been used by threat actors as an initial intrusion method in the past.

2.2. PureCrypter

When the email attachment is decompressed, a .NET executable file is revealed. This EXE file was identified as the first stage of the commercial .NET loader, PureCrypter.

PureCrypter has been sold since 2021 and has been used for the distribution of numerous malware families. By using PureCrypter, the attacker can customize various attack configurations such as persistence mechanisms, injection methods and targets, and techniques to bypass security algorithms. The data configured by the attacker is serialized through the Newtonsoft.json framework and stored in the resource section, and upon execution, it is deserialized and utilized.

The assembly name is Utdmecvq.exe, and inside it, open‑source related classes are present, along with the RemoteExecuterApp class that performs the actual malicious behavior. Only the RemoteExecuterApp class executes the main logic, and the entry point also resides within the RemoteExecuterApp class.

Utdmecvq.exe internal classes

caption - Utdmecvq.exe internal classes

The malware first sets a User-Agent and sends a download request to the C&C server. This disguises the malware’s download request to the C&C server as one generated by a common web browser.

The URLs issuing download requests and the configured User-Agent are as follows.

  • URL: http://158.247.250[.]251/Gmfbssvfg.vdf

  • User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0

Downloading encoded file from C&C server

caption - Downloading encoded file from C&C server

If the download succeeds, the downloaded file is decrypted using an AES key and IV that are Base64-encoded and loaded into memory. Then the method pY8vRcOLI of the class Ts8mNZe9r3J0nu8Oa0.e4XQsmqqJcMfslpD8o is invoked.

  • base64 encoded key : eq78+DV08bw6vTK7GtbEEcXfM/7YWzVL50qlG2HSJkY=

  • base64 encoded IV : LqF17M9RPpHJCRbrkD6msw==

Decrypt and invoke method

caption - Decrypt and invoke method

The downloaded and decrypted PE is also a .NET assembly and is obfuscated with .NET Reactor.

Downloaded and decrypted .NET file

caption -Downloaded and decrypted .NET file

The assembly information reveals details about the Newtonsoft.Json framework, indicating that the malware utilizes PureCrypter.

복호화된 .NET 파일 어셈블리 정보

caption - Assembly information

Resource Data Decryption

After execution, the malware first retrieves the encrypted data from the resource section, decrypts it, and stores it as a hash table. The encryption algorithm can be selected from DES, AES, TDES, Rijndael, RC2, or a custom block cipher; in the analyzed case, AES is used.

  • AES key hex: A872738399912091389AE9720D5E068A0EF3B7D4C42B1FF24EA864F6C85683E9

  • AES IV hex: F96CF8CAFBAF112548F6F122D9270CCA

Resource data decryption

caption - Resource data decryption

The decrypted data table contains various strings used by the malware, which are later retrieved by accessing the hash table with a key. After extracting the resource name strings, using dnSpy’s Watch feature to call the AppDomain.CurrentDomain.GetData method allows inspection of the fully decrypted Hashtable.

Decrypted string hash table

caption - Decrypted string hash table

Configuration Data Deserialization

When PureCrypter is applied, various options such as injection method, target process, and whether to bypass security features can be configured. The configuration data is serialized and AES encrypted, then stored in the resource section of the packed file. At runtime, the configuration in the resource section is dynamically deserialized and used.

Configuration data deserialization

caption - Configuration data deserialization

Configuration Data Structure

The data indexing is defined based on ProtoMember identifiers, and three configuration groups are present: "Payload injection configuration data", "Detection‑evasion configuration data", and "Additional configuration data".

1. Payload injection configuration data

| ProtoMember | Description | Info |
| --- | --- | --- |
| 1 | A flag that determines whether to use an internally stored payload or download it (True loads internal data; False downloads externally). | true |
| 2 | A byte array that stores either the payload to be injected or the download URL. | Formbook payload |
| 3 | A flag indicating whether the malware’s execution process is 64-bit. | false |
| 4 | An enum that determines the payload injection method (0: .NET assembly load and Invoke, 1: process hollowing, 2: reflective DLL injection). | 1 |
| 5 | A string specifying the target process name into which the payload will be executed or injected. | "Itself" |
| 6 | A string of command-line arguments passed when executing the injected payload. | "" |
| 7 | A string specifying the process name to be used as the parent process. | "explorer" |
| 8 | An unused value. | null |
| 9 | A DWORD value that determines the window style at process creation. | 1

2. Detection‑evasion configuration data

| ProtoMember | Description | Info |
| --- | --- | --- |
| 1 | A variable that determines how many times the malware will execute the SleepEx(999) function during runtime. | 0x15 |
| 2 | A flag that determines whether to perform mutex creation. | false |
| 3 | The string used when creating the mutex. | "Xilnulmx" |
| 4 | A flag that determines whether to exclude the current process’s file and the file copied to %Temp% from Windows Defender scans | false |
| 5 | A flag that determines whether to execute VM and sandbox detection logic using system and process information. | false |
| 6 | A flag that determines whether to perform process handle duplication. | false |
| 7 | A flag that determines whether to execute IP release or renew commands. | false |
| 8 | An additional PowerShell script string. | null |
| 9 | A flag that determines whether to perform library-hooking detection. | false |
| 10 | A flag that determines whether to perform AMSI bypass. | false |
| 11 | A flag that determines whether to perform ETW-based detection evasion. | false |
| 12 | An unused value. | false |
| 13 | A flag that determines whether to perform self-deletion. | false |
| 16 | A flag that determines whether to run the additional PowerShell script with administrative privileges. | false

3. Additional configuration data

3.1. Persistence configuration data

| ProtoMember | Description | Info |
| --- | --- | --- |
| 1 | An enum that determines the persistence mechanism (0: registry key registration, 1: startup directory/program registration, 2: scheduled task). | 1 |
| 2 | A string used as the self-replication path. | "%appdata%" |
| 3 | A string used as the self-replication file name. | "temp.exe" |
| 4 | A flag that determines whether to append dummy bytes during self-replication. | false

3.2. MessageBox display configuration data

| ProtoMember | Description | Info |
| --- | --- | --- |
| 1 | A flag that determines whether a MessageBox should display a warning or information indicator. | false |
| 2 | The string displayed in the MessageBox. | null

3.3. File drop-and-execute configuration data

| ProtoMember | Description | Info (null) |
| --- | --- | --- |
| 1 | A byte array containing the executable file data to be dropped and executed. | null |
| 2 | A string specifying the file name of the executable to be dropped and executed. | null |
| 3 | A flag that determines whether to perform file drop and execution. | false |
| 4 | A flag that determines whether to perform file drop and execution. | false

3.4. GZIP compression configuration data

| ProtoMember | Description | Info (null) |
| --- | --- | --- |
| 1 | An additional GZIP-compressed payload to be injected. | null

Detailed Behavior

Mutex Creation

If a specific flag in the deserialized structure is set, the malware attempts to create and acquire a mutex. In the analyzed sample, the flag is set to False. It waits up to 15 seconds to acquire the mutex, and it executes the ipconfig command to renew the IP. The mutex name is as follows

  • Xilnulmx

Mutex creation

caption - Mutex creation

Anti Debugging

The process terminates when predefined conditions are satisfied.

  • A debugger is detected via CheckRemoteDebuggerPresent().

  • Modules such as SbieDll.dll or cuckoomon.dll are loaded in the current process.

  • Execution environment reports two or fewer CPU cores.

  • The parent process name contains "cmd"

  • BIOS Version or SerialNumber contain "Microsoft", "VMWare", or "Virtual".

  • BIOS manufacturer or model contain "Microsoft", "VMWare", or "Virtual".

  • display resolution is low.

  • OS is 32-bit.

  • Username is "john", "anna", or "xxxxxxxx".

IP Release

The malware invokes ipconfig to release the assigned IP address

IP release

caption - IP release

Amsi Bypass

The routine first resolves the address of AmsiScanBuffer used in AMSI scanning, and adjusts the page’s protection to allow writing. Then it patches the prologue so the function immediately returns a benign result depending on the Windows bitness, effectively disabling scanning.

Amsi bypass

caption - Amsi bypass

The code reconstructs the AmsiScanBuffer identifier at runtime by stripping "Janroe" from the stored string before use.

Stripping "Janroe"

caption - Stripping "Janroe"

AmsiScanBuffer string before stripping

caption - AmsiScanBuffer string before stripping

ETW-based Detection Evasion

EtwEventWrite is patched in the same manner as AmsiScanBuffer. Unlike the AMSI patch routine, no specific substring is stripped to obtain the function name.

ETW-based detection evasion

caption - ETW-based detection evasion

Anti library hooking

The malware overwrites the ntdll.dll or kernel32.dll loaded in the current process with the original files from the %System% directory.

Anti library hooking

caption - Anti library hooking

Windows Defender Exclusion

The routine checks whether the current executable path equals "%appdata%\temp.exe". If not, it constructs a Base64-encoded PowerShell payload and launches PowerShell with -enc to run it. The script uses Add-MpPreference to register both the current executable and %appdata%\temp.exe as Defender exclusion processes

Add-MpPreference -ExclusionPath {filepath};
Add-MpPreference -ExclusionProcess {filepath};
Add-MpPreference -ExclusionPath %appdata%\\temp.exe;
Add-MpPreference -ExclusionProcess %appdata%\\temp.exe;

The executed script adds the currently running file and the %appdata%\temp.exe file to the Windows Defender scan exclusion process.

Windows defender exclusion

caption - Windows defender exclusion

PowerShell Script Execution

If a specific field in the structure contains a PowerShell script, the script is passed as an argument to a new PowerShell process launched either normally or with administrator privileges, depending on a flag.

PowerShell script execution

caption - PowerShell script execution

File Drop and Execution

If a file at the path and name stored in the structure does not exist, the data stored in the structure is reversed, Gzip‑decompressed, saved to that path, and executed.

File drop and execution

caption - File drop and execution

Displaying MessageBox

If the currently running process is not "%Appdata%\temp.exe" or is not under the %Windows% path, a specific string in the structure is displayed via a MessageBox. In this case, if a specific constant in the field is 0, a warning icon is used; otherwise, an information icon is used.

Displaying messageBox

caption - Displaying messageBox

Persistence and Self-replication

If the current process executable is not %Appdata%\temp.exe or is not under the %Windows% directory path, create the %Appdata%\temp.exe path. If the %Appdata% directory does not exist, create the directory. The self-replication path and file name can be configured by the attacker.

자가 복제 로직

caption - Self-replication

Then, different actions are performed depending on the value stored in the structure.

  • If 0: Register the path "%Appdata%\temp.exe" to the key "HKCR\Software\Microsoft\Windows\CurrentVersion\Run" to establish persistence.

    Register registry key

    caption - Register registry key

  • If 1: Create a temp.vbs file in the Startup directory that executes "%Appdata%\temp.exe," and register it as a startup program.

    Startup program registration

    caption - Startup program registration

  • If 2: Create a scheduled task that executes "%Appdata%\temp.exe" at random intervals between 2 and 4 minutes. The task name is used as-is from the self-replication result file’s name.

    Task creation

    caption - Task creation

After completing the persistence setup, copy the currently running process executable to "%Appdata%\temp.exe."

Process Handle Duplication

By duplicating the malware’s process handle into explorer.exe, the file appears to be in use and cannot be deleted or modified.

Process Handle Duplication

caption - Process Handle Duplication

Payload Injection

First, if the current process is running with administrator privileges, it enters DebugMode before proceeding. Depending on a specific field flag, the payload is either obtained by directly AES‑decrypting and Gzip‑decompressing the data stored internally, or by downloading it from an external URL. The AES key and IV used here are identical to those used during the initial resource decryption. The analyzed malware embeds the encrypted payload within the file.

Additional payload acquisition

caption - Additional payload acquisition

Different injection methods are used depending on a specific value stored in the structure.

  • If 0: Load the assembly data into memory and invoke the method.

    Loading and invoking .NET assembly

    caption - Loading and invoking .NET assembly

  • If 1: Inject code via process hollowing and execute it. Depending on the provided parameter, either perform standard process hollowing or hollowing preceded by parent process spoofing.

    Standard process hollowing

    caption - Standard process hollowing

    Process hollowing with parent process spoofing

    caption - Process hollowing with parent process spoofing

  • If 2: Allocate native shellcode in memory and execute it. Depending on the provided parameter, load and execute the shellcode in the current process or in another process.

    Executing the shellcode in the current process

    caption - Executing the shellcode in the current process

    Executing the shellcode in another process

    caption - Executing the shellcode in another process

The analyzed malware spoofs explorer.exe as the parent process and then performs process hollowing into itself.

Compressed Payload Injection

Reverse specific data inside the structure, Gzip-decompress it, and inject it into a target process using the previously described shellcode injection method.

Compressed Payload Injection

caption - Compressed Payload Injection

Self-deletion and process termination

Execute a PowerShell script to self-delete the malware, then forcibly terminate the currently running process. The PowerShell script executed is as follows:

  • Start-Sleep -Seconds 5; Remove-Item -Path '{filepath}' -Force

Self-deletion and process termination

caption - Self-deletion and process termination

2.3. Formbook

The payload stored in encrypted form is a PE format, and identified as Formbook upon analysis.

PureCrypter로 패킹된 최종 페이로드 정보

caption - Formbook PE information

The malware’s behavior and the code-area decryption process are highly similar to those described in the referenced analysis of Formbook.

  • https://www.fortinet.com/blog/threat-research/deep-analysis-formbook-new-variant-delivered-phishing-campaign-part-ii

This Formbook variant dynamically loads and uses low-level libraries to conceal API calls. To do this, it obtains a handle to ntdll.dll via ZwCreateFile, stores it in memory via NtReadFile, and grants ERW permissions via NtAllocateVirtualMemory. Thereafter, whenever an ntdll.dll API is invoked, the code refers to that memory region.

ntdll.dll separately loaded in memory

caption - ntdll.dll separately loaded in memory

The detailed behavior can be identified by analyzing the register values and arguments passed to instructions that dynamically resolve and call ntdll.dll API addresses.


The malware is comprehensively encrypted by a complex encryption routine, and upon execution, the main logic is decrypted and jumped to immediately. Even after this first-stage decryption, key functions remain encrypted. The malware decrypts each function just before use and re-encrypts it after the function returns.

Function decryption and re-encryption

caption - Function decryption and re-encryption

There is also logic to detect debugging environments prior to malicious activity. Because the system information loaded during anti-debugging is also used by the malware’s behavior, dynamic analysis must proceed at least to the return point of the data-loading function. The anti-debug checks include specific process names, parent directory names, Windows account names, and kernel information classes.

Environment  information collection and debugger detection

caption - Environment information collection and debugger detection

After detection logic completes, preparation begins to inject the Formbook module. During this process, the Heaven’s Gate technique is used to transition from 32-bit code to 64-bit code. The stored 64-bit code performs different actions depending on the execution point. In this case, it copies the same 64-bit code into another process and executes it.

64bit 코드로 점프하는 명령어

caption - Routine for jumping to 64-bit code

실행되는 64bit 의사 코드

caption - 64-bit pseudocode in use.

The 64-bit shellcode copied into another process (in this case, OneDrive.exe) creates runonce.exe as a child process. It then creates a shared memory section between the newly created runonce.exe process and the original parent process, OneDrive.exe.

64bit 쉘코드가 생성한 자식 프로세스

caption - runonce.exe created by the 64-bit shellcode

The original Formbook process copies the Formbook payload into the runonce.exe process via the shared memory section. Using ntdll.dll’s thread APIs, it adjusts the rax register for RtlUserThreadStart and resumes the thread so the injected payload runs.

Information collection and remote command execution module

The shellcode injected into the runonce.exe process decrypts the entire code. After decryption, the module performs anti-debugging checks and then calls the main operation routine.

Formbook module’s anti-debugging routine

caption - Formbook module’s anti-debugging routine

First, it collects basic system and user information using registry keys and advapi32.dll APIs. The merged data is structured as follows, with each field separated by a colon (":").

  • Windows Information

  • Computer name and user name, Base64‑encoded

Collected system and user information

caption - Collected system and user information

The collected data is encrypted through the following steps.

  1. RC4 encryption

  2. Base64 encoding

  3. Prefix "PKT2:" is attached, then RC4 encryption again

The RC4 keys used in this process are as follows.

  • First RC4 key (hex): 1DC0668A628EA91766A75C87319A23B24939C07B

  • Second RC4 key (hex): 3A665CF99A9B7A79F4FECB77BBE2BF5FF79687E3

After the initial information gathering, it invokes the 64-bit code again to inject a Formbook communications module payload into one of explorer.exe’s 64-bit child processes. This injected payload is then used for subsequent C&C server communications.

After injection and RIP manipulation, execution returns to 32‑bit code, which sends a WM_COMMAND message via PostThreadMessageW to the communications module thread waiting for user requests, resuming its execution. The injected payload runs from a different entry point and serves as the communications module.

Following injection, it repeats the cycle of information collection, command reception, and command execution. During collection, it harvests various browser and email data, including:

  • Windows information

  • Email profiles (Outlook, Thunderbird, Foxmail, etc.)

  • Browser (Internet Explorer, Firefox, Chrome, etc.) personal data

  • Windows Vault credentials

Collecting sensitive data

caption - Collecting sensitive data

For Chrome’s Login Data, the database is copied to %Temp%\IE13ci5 and then queried via SQL to extract the data.

Login Data 복사 로직

caption - Login Data copy routine

All collected data is stored in shared memory with the 64‑bit communications module process and is transmitted when the module communicates with the C&C server.

Formbook also receives data from the C&C server to execute remote commands. If the data received by the communications module and saved to shared memory begins with the magic string "XLNG," the next byte is treated as the opcode.

Packet parsing routine

caption - Packet parsing routine

Command identifiers consist of "1" through "9," with each corresponding to a specific action.

| Command | Behavior |
| --- | --- |
| "1" | Download files with the extensions exe, dll, and ps1, save them to the `%Temp%` directory, and execute them. |
| "2" | Download a PE file, verify its header, save it to the `%Temp%` directory, and execute it. |
| "3" | Self-delete and restart explorer.exe. |
| "4" | Download and execute an exe or ps1 file in the `%Temp%` directory. |
| "5" | Collect browser data (cookies, login credentials, profiles, sessions). |
| "6" | Collect Windows, operating system, and user name information. |
| "7" | Reboot the system. |
| "8" | Shut down the system. |
| "9" | Do nothing

Formbook Communication Module

The payload injected into the 64-bit process initiates communications with the C&C server. Formbook stores not only the real C&C address but also numerous fake dummy C&C addresses, sending requests to all of them to make identifying the real C&C difficult.

Decrypted domains

caption - Decrypted domains

The malware dynamically decrypts the encrypted C&C server URLs and issues requests to them. Exfiltrated data is included in packets after custom encryption followed by Base64 encoding. The collected URLs are attached in the appendix under “Formbook URLs.”

The communications module also collects clipboard data via the GetClipboardData API and stores it in shared memory. The clipboard data is sent to the C&C server together with sensitive information that the information-collection module running in runonce.exe has written to shared memory.

Functions for collecting clipboard data

caption - Functions for collecting clipboard data

3. Additional malware and attribution

3.1. Malware distributed from the same IP

Additional malware was obtained that decrypts and executes files downloaded from the same IP (158.247.250[.]251). Although the initial access vector could not be determined, most were delivered as RAR archives, suggesting distribution via phishing emails in a manner similar to the analyzed malware.

The detailed information on the additional malware is as follows.

| Name | MD5 | Base64 Encoded AES Key | Base64 Encoded AES IV | User-Agent |
| --- | --- | --- | --- | --- |
| ljwflx.exe | 81bfe3b3204ede1fca418e44aa19b310 | KnJ27qGTjAZZNKQexmBuXSOnnFvFQv/BKoLXk48czKg= | +PNBK7GBbAf397zUxJVbQA== | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/96.0.4693.80 |
| Kahogdwhj.exe | 52a321e48902b8fbd1e984d9bd15f278 | PDXdRECJmaHFmRrowwO11ODbcK9klmg78nXy4Dd9VuE= | 3Dma78UCdly9DQH6md97kw== | Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0 |
| Endolsydm.exe | 310ebb7ca19ff9b75d4054c340b0c82e | x1ehIEX7Pxv5/8qKPc91WFsl+5PCPtjdaxJZa0J05+c= | eCzZQvqLFuqZ5qiO471g2g== | Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.199 Mobile Safari/537.36 |
| lkdsnivzaem.exe | ca9cb7bb06398670abc6d19186c336cd | auCoaTwzm/qB/9TAvmSm81zuddQ/sJbMELul5a5ti6s= | oH8nCT02nAmvySgN5wye6g== | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/96.0.4693.80

On the C&C server at 158.247.250.251, directory listing exposed files, and modifications continued at least until June 3. At the time of analysis, four files (including the analyzed sample) were available for download, and one of the files was additionally decryptable.

C&C server root directory

caption - C&C server root directory

The additional second-stage PureCrypter loader was obfuscated with .NET Reactor, the same as the analyzed malware.

Csxkd.dll internal classes

caption - Csxkd.dll internal classes

In the same manner, a string hash table and deserialized data can be inspected. The key and IV are as follows.

  • base64 encoded key : "aOmN7DquQ0DhLOXV9UsPjyqVGWY5RNEE2rx2fcmP/pk="

  • base64 encoded IV : "numBuSJgCDpuy8TlrrBsIg=="

The additional malware ultimately injects a Formbook payload identical in hash to the analyzed sample.

After the second week of June, the C&C server was deactivated and the files were no longer accessible. Lastly, in the final week of June, a b374k web shell file, admin.php, was found in the root path.

Uploaded b374k web shell

caption - Uploaded b374k web shell

3.2. Additional C&C servers

Based on the User-Agent strings, .NET PureCrypter downloaders developed around the same time were identified. The discovered malware samples not only used attacker‑controlled C&C servers as in the analyzed case, but also uploaded files to compromised websites or shared drives and then downloaded them. They were distributed in multiple archive formats, including RAR files as well as ISO images and 7z.

User-Agent information configured inside PureCrypter alone is insufficient to conclusively attribute these samples to the same actor. Therefore, only malware that was distributed from attacker‑controlled C&C servers showing the same SSL thumbprint as the analyzed case and that retained Formbook‑related detection names was selected.

  • C&C

161.248.239[.]119
95.214.54[.]164
195.177.94[.]43
147.135.109[.]

While all observed cases involved malware packed with PureCrypter, there are also cases of other families being distributed—such as SnakeKeylogger—in addition to Formbook.

As most of the infrastructure is currently inaccessible, the final payloads that were stored on the servers cannot be verified.

3.3. Association with Kimsuky C&C infrastructure

The malware distribution server, South Korean IP 158.247.250[.]251, exhibits some similarities with infrastructure attributed to the North Korea–nexus group Kimsuky. EnkiWhiteHat’s Threat Research Team has continuously monitored related threats since analyzing Kimsuky’s GitHub‑abuse campaign in the first half of 2025. In the course of this work, a XenoRAT C&C server with commonalities with the Formbook distribution server was identified at 158.247.240[.]40.

The commonalities identified are shown in the table below.

| Features | `158.247.250[.]251` | `158.247.240[.]40` |
| --- | --- | --- |
| Webshell Path | /admin.php | /admin.php |
| Webshell Type | b374k | b374k |
| Mapped Domain | *.store | *.store |
| JARM Fingerprint | 07d19d12d21d21d07c42d43d0000009424803a662b126a748cf4f90707a33c | 07d19d12d21d21d07c42d43d0000009424803a662b126a748cf4f90707a33c

Additionally, domains mapped to 158.247.250[.]251—such as menavcorp[.]store and nidlip.onlinenservicesite[.]store—indicate intent to leverage this C&C server for Naver‑themed phishing. Historically, Kimsuky has often used domains of the pattern {Naver‑related keyword}[.]store in phishing targeting Korean users.

4. Course of Action

4.1. Avoid downloading and executing email attachments from suspicious sources.

Korean text present in the embedded images suggests the attacker targeted Korean individuals during initial access. Also, the sender domain was spoofed to look like DHL’s official domain and used the common "noreply" string seen in legitimate automated emails to reduce suspicion.

When receiving a suspicious email of this kind, refrain from downloading or running attachments, and actively use scanning services such as VirusTotal to check whether the archived files exhibit malicious behavior.

Phishing email with Korean text in image

caption - Phishing email with Korean text in image

However, in this case, the attached archive was not password-protected, so it would have been subject to scanning by the browser and security softwares allowing users with to recognize the risk.

5. Conclusion

In this article, a case of Formbook malware distribution from a South Korean IP via phishing emails was analyzed. The final malware, Formbook, was loaded by PureCrypter and performs actions such as exfiltrating compromised PC information and executing remote commands.

In the analyzed case, the modular, multi‑stage Formbook was further shielded by PureCrypter, obscuring behavior and complicating analysis. As security and detection technologies advance, evasion techniques enabling stealthy and successful malicious operations continue to evolve in parallel.

Similarities with Kimsuky’s attack infrastructure were also found on the C&C servers used in the attack. While the analyzed case differs in several respects from Kimsuky’s recent patterns—and it remains plausible that a single IP was used by multiple actors—there are supporting similaritis, including historical mapping to Naver-themed phishing domains, the presence of a b374k-type web shell on the C&C server, and a matching JARM fingerprint.

Phishing emails impersonating multiple companies and institutions continue to be observed as a distribution vector for malware. Attackers exploit perceived trust in known brands to lower vigilance and drive infections, so heightened caution and rigorous security measures are required at both the individual and organizational levels.

6. Appendix

Appendix A. MITRE ATT&CK

| Tactics | Techniques |
| --- | --- |
| Initial Access | T1566.001: Phishing: Spearphishing Attachment |
| Execution | T1059.001: Command and Scripting Interpreter: PowerShell-nT1059.003: Command and Scripting Interpreter: Windows Command Shell-nT1047: Windows Management Instrumentation-nT1204.002: User Execution: Malicious File |
| Persistence | T1547.001: Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder |
| Defense Evasion | T1027.002: Obfuscated Files or Information: Software Packing-nT1027.014: Obfuscated Files or Information: Encrypted/Encoded File-nT1055.002: Process Injection: Portable Executable Injection-nT1055.003: Process Injection: Thread Execution Hijacking-nT1055.012: Process Injection: Process Holowing-nT1134.001: Access Token Manipulation: Token Impersonation/Theft-nT1140: Deobfuscate/Decode Files or Information-nT1497.001: Virtualization/Sandbox Evasion: System Checks-nT1622: Debugger Evasion-nT1070.010: Indicator Removal: Relocate Malware |
| Discovery | T1057: Process Discovery-nT1082: System Information Discovery |
| Collection | T1115: Clipboard Data-nT1005: Data from Local System |
| Command and Control | T1095: Non-Application Layer Protocol-nT1071: Application Layer Protocol: Web Protocols-nT1665: Hide Infrastructure-nT1132.001: DataEncoding: Standard Encoding-nT1573.001: Encrypted Channel: Symmetric Cryptography |
| Exfiltration | T1041: Exfiltration Over C2 Channel

Appendix B. IOCs

Hash

  • e78be07019dfaf682c601985ac3ba424

  • 108b5fd1b62489fd5cdb4ebd4a463226

  • 42d24ccfb0a05c5f299181ca3afc7ae3

  • a6c26a0b5df0db6a35b15c24342f27f8

  • 6e5198c3aae9005cc58d011a8c6f0bec

  • 81bfe3b3204ede1fca418e44aa19b310

  • 52a321e48902b8fbd1e984d9bd15f278

  • 310ebb7ca19ff9b75d4054c340b0c82e

  • ca9cb7bb06398670abc6d19186c336cd

C&C

  • 158.247.250[.]251

  • 95.214.54[.]164

  • 161.248.239[.]119

  • 195.177.94[.]43

  • 147.135.109[.]226

  • 158.247.240[.]40

Mutex

  • Xilnulmx

  • Ncppn

User-Agent

  • Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/96.0.4693.80

  • Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0

  • Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.199 Mobile Safari/537.36

Email

  • noreplychleeportchlee@dhl.com

Appendix C. Formbook URLs

  • www.asymptote[.]fund/geqw/

  • www.u90hm[.]top/q3ld/

  • www.eufi[.]xyz/sk5i/

  • www.netbarg[.]com/r6jx/

  • www.ml[.]com/zh1t/

  • www.adoptados[.]pet/rnaj/

  • www.synergysynergyeqhu[.]lol/hjvu/

  • www.businessauth[.]xyz/9nn7/

  • www.realbigteeth[.]net/29f4/

  • www.cleartrek[.]top/e35m/

  • www.dekoratifcamfilmi[.]xyz/gxr6/

  • www.sanlou86[.]vip/4h4w/

  • www.tridentoutdoor[.]net/odp0/

  • www.bmf.gv[.]at/bmvd/

  • www.dgdetailing[.]pro/g9w4/

  • www.ogrex[.]org/w7hs/

  • www.teamx[.]club/egab/

  • www.df96w[.]top/oodw/

  • www.dubrovnik[.]services/8fpw/

  • www.gamevui[.]shop/84g1/

  • www.uwd64[.]top/p1wy/

  • www.iconimax[.]org/geqw/

  • www.parshmen[.]art/ym9z/

  • www.g50tz[.]top/cdm7/

  • www.goldenstreamzxy[.]pro/vvrb/

  • www.070bn[.]shop/panb/

  • www.later[.]info/trou/

  • www.imprint[.]boutique/eqc8/

  • www.honghuo-qq2l2[.]sbs/aa4d/

  • www.fabu2024b01[.]xyz/ow2j/

  • www.aishiteru4[.]click/wirg/

  • www.japp4[.]icu/2q9x/

  • www.agrimater[.]shop/o05o/

  • www.fmtuxu[.]top/hlfg/

  • www.new8838[.]win/7evm/

  • www.slayflu[.]xyz/n871/

  • www.thebriefingpod[.]media/hwu8/

  • www.lawson[.]co[.]jp/n307/

  • www.yourcredential[.]xyz/v4li/

  • www.donaldcoin[.]com/n66l/

  • www.novatek[.]tech/o29b/

  • www.gorillalegends[.]xyz/xgry/

  • www.babyhan64[.]shop/4s99/

  • www.artscriptor[.]info/a2d4/

  • www.cardo[.]work/am6j/

  • www.hirufm[.]lk/whj4/

  • www.h34ry[.]top/ssr8/

  • www.ztg86[.]top/3whz/

  • www.freedom[.]golf/ip3t/

  • www.kl3u2l[.]top/v5n7/

  • www.dagdijital[.]xyz/bhvz/

  • www.resolve[.]fitness/d7x3/

  • www.precisednutrition[.]net/z82q/

  • www.autorolluphub[.]xyz/ulhr/

  • www.mastermohamedfight[.]top/o7rb/

  • www.farcana-drop[.]xyz/2p9m/

  • www.itmoh[.]town/hwcx/

  • www.sticker[.]business/728a/

  • www.arcade[.]plus/lvbq/

EnkiWhiteHat

EnkiWhiteHat

Offensive security experts delivering deeper security through an attacker's perspective.

Offensive security experts delivering deeper security through an attacker's perspective.

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.