Threat Intelligence
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](https://framerusercontent.com/images/gy8i4keLHJNdBDPRmTofRvHc.png?width=1946&height=510)
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

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.

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.

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

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==

caption - Decrypt and invoke method
The downloaded and decrypted PE is also a .NET assembly and is obfuscated with .NET Reactor.

caption -Downloaded and decrypted .NET file
The assembly information reveals details about the Newtonsoft.Json framework, indicating that the malware utilizes PureCrypter.

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

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.

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.

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
2. Detection‑evasion configuration data
3. Additional configuration data
3.1. Persistence configuration data
3.2. MessageBox display configuration data
3.3. File drop-and-execute configuration data
3.4. GZIP compression configuration data
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

caption - Mutex creation
Anti Debugging
The process terminates when predefined conditions are satisfied.
A debugger is detected via CheckRemoteDebuggerPresent().
Modules such as
SbieDll.dll
orcuckoomon.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

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.

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

caption - Stripping "Janroe"

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.

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.

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
The executed script adds the currently running file and the %appdata%\temp.exe file to the Windows Defender scan exclusion process.

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.

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.

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.

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.
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.
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.
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.

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.

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.
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.
caption - Standard process hollowing
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.
caption - Executing the shellcode in the current 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.

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

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.

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.

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.

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.

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.

caption - Routine for jumping to 64-bit code

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.

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.

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

caption - Collected system and user information
The collected data is encrypted through the following steps.
RC4 encryption
Base64 encoding
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

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.

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.

caption - Packet parsing routine
Command identifiers consist of "1" through "9," with each corresponding to a specific action.
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.

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.

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.
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.

caption - C&C server root directory
The additional second-stage PureCrypter loader was obfuscated with .NET Reactor, the same as the analyzed malware.

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.

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
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.
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.

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
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
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/