Remote Access Trojan · Worm · Dropper
VioletWorm - game.exe
- Author
- Moise Medici
- Updated
- 07 Sept 2026 · Completed
- Difficulty
- Easy
- Platform
- Capabilities
- Tags
Basic Analysis
FLOSS was first run with -n 12 and then without any length filtering. Checking the filtered list first gives a quicker view of the output before moving on to a more detailed review.
Around line 100 of the FLOSS output there are indications that the file might be a compiled Python file:
Error on file.Py_DecodeLocalePy_IsInitializedPy_PreInitializePyInitConfig_CreatePyInitConfig_FreePyInitConfig_SetIntPyInitConfig_SetStrAnd around line 270 it hints at pyInstaller:
_pyinstaller_pyzPYZ archive entry not found in the TOC!At this point, it is worth checking whether the executable can be decompiled back into source code. This is done in two stages: unpacking the executable into compiled Python files and then decompiling the .pyc files into Python source code.
The extraction can be done using pyinstxtractor 1:
$ uv run -p 3.14 extractor.py e450b7efc8b429b618d2d22a074a3dd55c07b451eef315e0e20be7d9054ef18c.exe[+] Processing e450b7efc8b429b618d2d22a074a3dd55c07b451eef315e0e20be7d9054ef18c.exe[+] Pyinstaller version: 2.1+[+] Python version: 3.14[+] Length of package: 12344292 bytes[+] Found 38 files in CArchive[+] Beginning extraction...please standby[+] Possible entry point: pyiboot01_bootstrap.pyc[+] Possible entry point: pyi_rth_cryptography_openssl.pyc[+] Possible entry point: pyi_rth_inspect.pyc[+] Possible entry point: loader.pyc[+] Found 164 files in PYZ archive[+] Successfully extracted pyinstaller archive: e450b7efc8b429b618d2d22a074a3dd55c07b451eef315e0e20be7d9054ef18c.exe
You can now use a python decompiler on the pyc files within the extracted directoryremnux@remnux:~/malware/mallearn/python/exe$The extraction had to be run twice: first with the default Python interpreter, which is 3.11 on this REMnux system, and then again with Python 3.14, as the script suggested, to avoid errors in the next step.
The first two levels of the unpacked directory structure are:
base_library.zip
- _bz2.pyd
- _cffi_backend.cp314-win_amd64.pyd
cryptography
- hazmat
cryptography-46.0.3.dist-info
- INSTALLER
- licenses
- METADATA
- RECORD
- REQUESTED
- WHEEL
- _ctypes.pyd
- _decimal.pyd
- _hashlib.pyd
- libcrypto-3.dll
- libffi-8.dll
- libssl-3.dll
- loader.pyc
- _lzma.pyd
- pyiboot01_bootstrap.pyc
- pyimod01_archive.pyc
- pyimod02_importers.pyc
- pyimod03_ctypes.pyc
- pyimod04_pywin32.pyc
- pyi_rth_cryptography_openssl.pyc
- pyi_rth_inspect.pyc
- python314.dll
- python3.dll
- PYZ.pyz
PYZ.pyz_extracted
- annotationlib.pyc
- argparse.pyc
- ast.pyc
- _ast_unparse.pyc
- base64.pyc
- bisect.pyc
- bz2.pyc
- calendar.pyc
- codeop.pyc
- _colorize.pyc
- _compat_pickle.pyc
- compression
- contextlib.pyc
- contextvars.pyc
- copy.pyc
- cryptography
- csv.pyc
- ctypes
- dataclasses.pyc
- datetime.pyc
- decimal.pyc
- difflib.pyc
- dis.pyc
- fnmatch.pyc
- fractions.pyc
- ftplib.pyc
- future.pyc
- getopt.pyc
- gettext.pyc
- glob.pyc
- gzip.pyc
- hashlib.pyc
- http
- importlib
- inspect.pyc
- ipaddress.pyc
- json
- logging
- lzma.pyc
- mimetypes.pyc
- netrc.pyc
- numbers.pyc
- _opcode_metadata.pyc
- opcode.pyc
- pathlib
- pickle.pyc
- pprint.pyc
- _py_abc.pyc
- py_compile.pyc
- _pydatetime.pyc
- _pydecimal.pyc
- _py_warnings.pyc
- quopri.pyc
- random.pyc
- selectors.pyc
- shutil.pyc
- signal.pyc
- socket.pyc
- ssl.pyc
- statistics.pyc
- string
- stringprep.pyc
- _strptime.pyc
- subprocess.pyc
- tarfile.pyc
- tempfile.pyc
- textwrap.pyc
- _threading_local.pyc
- threading.pyc
- tokenize.pyc
- token.pyc
- tracemalloc.pyc
- typing.pyc
- urllib
- zipfile
- select.pyd
- _socket.pyd
- _ssl.pyd
- struct.pyc
- unicodedata.pyd
- VCRUNTIME140.dll
- _zstd.pyd
The most suspicious file is probably loader.pyc, although any of the files could be malicious.
Decompilation can be done with many tools; the most common is uncompyle6 2, but it does not support Python 3.14 at the moment, so depyo 3 was used instead (note that using it on REMnux may require upgrading the node version):
$ npx depyo e450b7efc8b429b618d2d22a074a3dd55c07b451eef315e0e20be7d9054ef18c.exe_extracted/loader.pycProcessing /home/remnux/malware/mallearn/python/exe/e450b7efc8b429b618d2d22a074a3dd55c07b451eef315e0e20be7d9054ef18c.exe_extracted/decompiled/loader.py...Processed 1 files in 0.082s. In: 864278 bytes (10506252.59 B/s). Out: 854535 bytes (10387815.68 B/s).Before moving forward with the code analysis, pestudio shows that the sample has an overlay section. This section contains arbitrary data appended to the end of a PE file that is not mapped into memory when the program runs. pestudio automatically detects and analyzes this data because it is a common location for hiding malicious code or additional resources.
The overlay accounts for 98% of the overall file size, or around 11 MB. This is PyInstaller behavior rather than an additional payload, since the extractor specifies that 12,344,292 bytes of data were found in 38 CArchives.
Lastly, capa can be run to see what it detects. The most interesting findings here are data obfuscation and evasion.
| ATT&CK Tactic | ATT&CK Technique |
|---|---|
| DEFENSE EVASION | Obfuscated Files or Information [T1027] |
| Virtualization/Sandbox Evasion::System Checks [T1497.001] | |
| DISCOVERY | File and Directory Discovery [T1083] |
| Process Discovery [T1057] | |
| System Information Discovery [T1082] | |
| EXECUTION | Command and Scripting Interpreter [T1059] |
| Shared Modules [T1129] |
| MBC Objective | MBC Behavior |
|---|---|
| ANTI-BEHAVIORAL ANALYSIS | Debugger Detection::Timing/Delay Check QueryPerformanceCounter [B0001.033] |
| Virtual Machine Detection [B0009] | |
| DATA | Checksum::Adler [C0032.005] |
| Compress Data [C0024] | |
| Compression Library [C0060] | |
| Encode Data::XOR [C0026.002] | |
| DEFENSE EVASION | Obfuscated Files or Information::Encoding-Standard Algorithm [E1027.m02] |
| DISCOVERY | Analysis Tool Discovery::Process detection [B0013.001] |
| File and Directory Discovery [E1083] | |
| System Information Discovery [E1082] | |
| EXECUTION | Command and Scripting Interpreter [E1059] |
| FILE SYSTEM | Create Directory [C0046] |
| Delete Directory [C0048] | |
| Delete File [C0047] | |
| Read File [C0051] | |
| Writes File [C0052] | |
| OPERATING SYSTEM | Environment Variable::Set Variable [C0034.001] |
| PROCESS | Create Process [C0017] |
| Create Process::Create Suspended Process [C0017.003] | |
| Terminate Process [C0018] |