Multiple strong indicators support a malicious classification: (1) per-directory ransom-note filename HOW_TO_DECRYPT.txt and extension marker .CONTI, (2) recursive directory traversal with file task scheduling, (3) large multithreaded network/target enumeration (32 threads), (4) runtime API resolution and heavy obfuscation to hinder static analysis, (5) payload launcher that executes embedded command blocks via CreateProcess with no window, (6) resource-driven configuration/payloads and lack of clear benign functionality. While exact per-file encryption routine is not visible in the provided excerpts, the combined capabilities indicate ransomware dropper/encryptor behavior with potential persistence actions in the executed payloads. Therefore, the verdict is malicious.
engaged_palladium_6461553e
Natural Language Summary
Verdict: Likely Malicious
Summary
The binary implements runtime import resolution, a block-based XOR deobfuscation routine, an embedded configuration/payload dropper, and a multi-threaded target enumeration and file-processing framework consistent with ransomware behavior. It writes per-directory ransom notes, uses a marker extension .CONTI, excludes system folders, and orchestrates a 32-thread worker pool to operate across discovered IPs/hosts and target files. Embedded command blobs decoded at runtime via CreateProcess (hidden) indicate staged payloads and potential persistence mechanisms. Overall, the artifacts and behaviors are aligned with malicious ransomware tooling.
Orchestration
Central orchestration occurs in _start (0x402610). It resolves APIs at runtime (sub_4010e0), loads embedded configuration/payload data from RCDATA resources (IDs 0x68/0x69), decodes configuration (via the 128bit XOR key data_4099d0 using sub_401000) and compares against "null", then executes an execution-phase runner (sub_402bf0) and other initializers (sub_4032a0, sub_407fa0). It constructs target lists (hostnames via sub_4024b0 and IPs via sub_402990) and schedules per-target work through sub_407fe0, before final orchestration and cleanup via sub_408c50 and ExitProcess. The worker pool is initialized by sub_408bd0, with threads started in sub_408c10 and tasks enqueued by sub_408ca0; control messages are dispatched by sub_408c50 and wait-for-termination logic is in the same path. The overall flow is designed to be opaque statically, but functionally implements discovery, per-target task scheduling, and payload execution.
Installation
Embedded configuration/payloads are stored as RCDATA resources (IDs 0x68 and 0x69). _start loads both resources and decodes one with MultiByteToWideChar, comparing the decoded content to the string "null" to decide if a payload should be executed. The binary decodes multiple embedded command blocks and passes them to CreateProcessA/CreateProcessW with CREATE_NO_WINDOW, effectively acting as a dropper/launcher for secondary payloads. No explicit registry autostart artifacts are visible in the provided code paths, but decoded command lines could install persistence via subsequent payloads.
Persistence
No explicit Windows autostart mechanisms (registry Run keys, scheduled tasks, services) are visible in the provided functions. The presence of decoded command strings executed via CreateProcess suggests a high likelihood of persistence mechanisms being installed by the executed payloads (not visible in the supplied code). Follow-up decoding of embedded command blocks is required to confirm persistence techniques.
Code Protection
Strings and API names are obfuscated. Runtime API resolution uses decoded names via GetProcAddress (sub_4010e0), and a block-based XOR deobfuscation routine (sub_401000) applies a 128bit XOR with data_4099d0 followed by a single-byte XOR of trailing bytes (0x99). The import table appears empty statically, increasing analyze difficulty and hindering static linking of APIs.
Environment Awareness
No explicit anti-debug/VM checks are evident in the provided functions. However, the dynamic API resolution and heavy obfuscation imply anti-analysis intent by complicating static disassembly and import tracking. Additional anti-analysis checks may exist in code regions not provided here.
Runtime Behaviors
Entry path resolves imports, loads resources, decodes configuration and payloads, spawns a set of worker threads, enumerates hosts/IPs, and schedules per-target file tasks. A multithreaded executor processes tasks (likely file modifications) across a target list, with a separate process launcher (decrypt_embedded_command_blocks_and_execute_sequentially) that decodes and runs command blocks via CreateProcess in a hidden window.
Network Communication
The binary enumerates IP addresses and host names via resolved helpers (likely iphlpapi/netapi32-style interfaces). It uses InetNtopW to stringize IPs and maintains a global list of targets, then processes them via 32 worker threads. This pattern suggests network scanning, propagation attempts, or remote service interaction against discovered targets.
Data Handling
Files are enumerated recursively. The directory walker writes a per-directory HOW_TO_DECRYPT.txt and enqueues per-file processing tasks. It supports blacklist/whitelist modes and uses a token list (data_40ce88, data_409940) to filter targeted files. The behavior indicates intent to modify many user data files in place (likely encryption).
Cryptography
The code uses a repeating 128-bit XOR key (data_4099d0) to decrypt embedded payloads and strings, combined with a single-byte XOR (0x99) on trailing bytes via sub_401000. This obfuscation is used for hidden strings/payloads rather than strong cryptography for victims. No cryptographic primitives for file content encryption are visible in the provided paths, though a later stage (e.g., worker tasks) is likely encryption-based.
Credential Access
No direct credential dumping (LSASS, keychain) is evident in the provided functions. The network enumeration could enable credential-exploitation or lateral movement when paired with additional payloads, but explicit credential theft capabilities are not shown here.
Destructive Actions
The presence of per-directory ransom-note creation (HOW_TO_DECRYPT.txt), a marker extension (.CONTI), and the scheduling of per-file processing tasks imply encryption or modification of user data as the primary destructive action. The exact encryption method is not visible in the supplied code, but the pattern matches ransomware behavior.
Build Quality
Modular and well-structured, with clear separation of concerns (resolver, decoder, enumerator, worker pool). The use of data-driven resources, dynamic API resolution, and a reusable XOR deobfuscation routine indicate deliberate engineering. Error handling appears present, and the multi-threaded worker design points to performance-minded implementation.
Platform Specific Notes
Windows-targeted, using Win32 APIs (CreateProcess, thread creation, directory enumeration wrappers, InetNtopW), wide-character processing, and resource loading. It leverages dynamic API resolution to conceal imports, consistent with Windows malware tooling. It uses RCDATA resources for in-binary configuration/payloads.
Indicators
String
HOW_TO_DECRYPT.txt
sub_407fe0 (0x407fe0)
Ransom-note filename; canonical ransomware artifact written per-directory.
String
.CONTI
sub_407fe0 (0x407fe0)
Marker extension; likely used as extension appended to encrypted files. Presence strongly suggests ransomware family naming ('conti'-like).
String
Windows
sub_407fe0 (0x407fe0)
Entry in hardcoded exclusion list for directory recursion; indicates intentional avoidance of system folders.
String
Program Files
sub_407fe0 (0x407fe0)
Exclusion to avoid modifying system/app files; common behavior in ransomware to preserve OS and avoid breaking host.
String
$Recycle.Bin
sub_407fe0 (0x407fe0)
Excluded folder; suggests careful selection of targets to avoid obvious recovery artifacts.
Constant
0x29A
sub_408c50 (0x408c50)
Used as a control code when posting tasks to the worker pool; may be a task type.
Constant
0xFFFFFFFF
sub_408ca0 (0x408ca0)
Used as sentinel/status in task structure created for worker pool.
Data Constant
data_4099d0 (128-bit key used for XOR)
sub_401000 (0x401000), sub_402bf0 (0x402bf0)
128-bit key used for repeated XOR block-based deobfuscation.
API pattern
GetModuleHandleA / LoadLibraryA / GetProcAddress
sub_4010e0 (0x4010e0)
Runtime API resolution via decoded strings; hides imports.
Resource IDs
RCDATA resources 0x68 and 0x69
_start (0x402610)
Embedded configuration or payload stored in resources; one is decoded and compared to "null".
| Type | Value | Referenced By | Indication |
|---|---|---|---|
String |
|
| Ransom-note filename; canonical ransomware artifact written per-directory. |
String |
|
| Marker extension; likely used as extension appended to encrypted files. Presence strongly suggests ransomware family naming ('conti'-like). |
String |
|
| Entry in hardcoded exclusion list for directory recursion; indicates intentional avoidance of system folders. |
String |
|
| Exclusion to avoid modifying system/app files; common behavior in ransomware to preserve OS and avoid breaking host. |
String |
|
| Excluded folder; suggests careful selection of targets to avoid obvious recovery artifacts. |
Constant |
|
| Used as a control code when posting tasks to the worker pool; may be a task type. |
Constant |
|
| Used as sentinel/status in task structure created for worker pool. |
Data Constant |
|
| 128-bit key used for repeated XOR block-based deobfuscation. |
API pattern |
|
| Runtime API resolution via decoded strings; hides imports. |
Resource IDs |
|
| Embedded configuration or payload stored in resources; one is decoded and compared to "null". |
Delphos Labs may make errors. Manual verification is recommended.