← Reports

Remote Access Trojan · Worm · Dropper

VioletWorm - game.exe

Author
Moise Medici
Updated
07 Sept 2026 · Completed
Difficulty
Easy
Platform
Windows
Capabilities
Dropping Secondary PayloadsPersistence MechanismsCommand and Control C2 CommunicationCommand Execution via Powershell Cmd BashData-ExfiltrationFile EncryptionKeyloggingScreen CaptureWebcam AccessClipboard ManipulationCredential TheftAMSI and ETW BypassSandbox and VM EvasionReflective Code LoadingUSB SpreadingDenial of Service
Tags
pythonC#

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.