← Reports

Remote Access Trojan · Worm · Dropper

VioletWorm - game.exe

Author
Moise Medici
Updated
07 Sept 2026 · Completed
Difficulty
Easy
Platform
Windows
Languages
PythonC#
MITRE
T1047 (Windows Management Instrumentation) T1059.001 (Command and Scripting Interpreter: PowerShell) T1059.003 (Command and Scripting Interpreter: Windows Command Shell) T1059.006 (Command and Scripting Interpreter: Python) T1053.005 (Scheduled Task/Job: Scheduled Task) T1547.001 (Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder) T1027.009 (Obfuscated Files or Information: Embedded Payloads) T1027.013 (Obfuscated Files or Information: Encrypted/Encoded File) T1036.005 (Masquerading: Match Legitimate Resource Name or Location) T1070.004 (Indicator Removal: File Deletion) T1070.006 (Indicator Removal: Timestomp) T1140 (Deobfuscate/Decode Files or Information) T1480.002 (Execution Guardrails: Mutual Exclusion) T1497.003 (Virtualization/Sandbox Evasion: Time Based Checks) T1564.001 (Hide Artifacts: Hidden Files and Directories) T1564.003 (Hide Artifacts: Hidden Window) T1620 (Reflective Code Loading) T1112 (Modify Registry) T1553.005 (Subvert Trust Controls: Mark-of-the-Web Bypass) T1685 (Disable or Modify Tools) T1033 (System Owner/User Discovery) T1057 (Process Discovery) T1082 (System Information Discovery) T1083 (File and Directory Discovery) T1120 (Peripheral Device Discovery) T1518.001 (Software Discovery: Security Software Discovery) T1005 (Data from Local System) T1113 (Screen Capture) T1095 (Non-Application Layer Protocol) T1105 (Ingress Tool Transfer) T1573.001 (Encrypted Channel: Symmetric Cryptography) T1041 (Exfiltration Over C2 Channel) T1048 (Exfiltration Over Alternative Protocol) T1499.002 (Endpoint Denial of Service: Service Exhaustion Flood)

Code Analysis of game.exe

Opening the file in pestudio shows that it is a .NET binary, so the analysis can move directly to dnSpy. pestudio also shows that the sample is 32-bit, so dnSpy x32 can be used. Once opened, the sample is named VioletClient, and many namespaces named Google<something> are shown, although they all appear to be empty. To find the code, move the sample to REMnux and run:

Terminal window
ilspycmd game.exe > /tmp/1

Opening the resulting file 1 with vim and searching for namespace lets us jump through every “namespace” keyword found, using the key n to move to the next occurrence. It turns out that namespace My and namespace XKTOtiYkqb are the only two that contain any code.

While we are in the text editor, it is useful to give both namespaces a quick glance. My looks more like a setup class where some of the parameters are defined. For example:

My
private static readonly ThreadSafeObjectProvider<My.MyComputer> Lr2GHtiVyoYAjYteePTqGoogle = new ThreadSafeObjectProvider<My.MyComputer>();
private static readonly ThreadSafeObjectProvider<My.MyApplication> lrykVu5OpO2siNCinTFnGoogle = new ThreadSafeObjectProvider<My.MyApplication>();
private static readonly ThreadSafeObjectProvider<User> SUswyNrS6QQYOHYTshlNGoogle = new ThreadSafeObjectProvider<User>();
private static readonly ThreadSafeObjectProvider<MyWebServices> X46kW6S5VKrVK670yClIGoogle = new ThreadSafeObjectProvider<MyWebServices>();
internal static My.MyComputer Nz6xILpFqmXnzgMwgSspGoogle {
get { return Lr2GHtiVyoYAjYteePTqGoogle.GetInstance; }
}
internal static My.MyApplication zH8qaub9gcFWHIvphGb3Google {
get { return lrykVu5OpO2siNCinTFnGoogle.GetInstance; }
}
internal static User uE2Ar1jjH95MdlJG0gWNGoogle {
get { return SUswyNrS6QQYOHYTshlNGoogle.GetInstance; }
}

The My namespace therefore appears to be used by the second namespace, which is full of Base64-like strings. Each class now needs to be analyzed.

In dnSpy, I renamed the namespace XKTOtiYkqb to Core to make it easier to identify when referenced. From this point on, I will use that name.