VShell is an OST framework written in Go, enabling availability of implants for multiple platforms (Windows, Linux, macOS).
rule win_vshell_auto { meta: author = "Felix Bilstein - yara-signator at cocacoding dot com" date = "2026-09-17" version = "1" description = "Detects win.vshell." info = "autogenerated rule brought to you by yara-signator" tool = "yara-signator v0.6.0" signator_config = "callsandjumps;datarefs;binvalue" malpedia_reference = "https://malpedia.caad.fkie.fraunhofer.de/details/win.vshell" malpedia_rule_date = "20260916" malpedia_hash = "53a643781c18e08f4a50949af60172d837a0b6f6" malpedia_version = "20260917" malpedia_license = "CC BY-SA 4.0" malpedia_sharing = "TLP:WHITE" /* DISCLAIMER * The strings used in this rule have been automatically selected from the * disassembly of memory dumps and unpacked files, using YARA-Signator. * The code and documentation is published here: * https://github.com/fxb-cocacoding/yara-signator * As Malpedia is used as data source, please note that for a given * number of families, only single samples are documented. * This likely impacts the degree of generalization these rules will offer. * Take the described generation method also into consideration when you * apply the rules in your use cases and assign them confidence levels. */ strings: $sequence_0 = { e8???????? c700b4230000 e8???????? 4889c1 4889df 488d059f3b4f00 488b5c2430 } // n = 7, score = 100 // e8???????? | // c700b4230000 | lea ecx, [0x983f5f] // e8???????? | // 4889c1 | dec eax // 4889df | mov eax, dword ptr [esp + 0x60] // 488d059f3b4f00 | dec eax // 488b5c2430 | mov dword ptr [eax + 0x2b0], ecx $sequence_1 = { e9???????? 488b842498000000 0fb65c2436 e8???????? 0fb6442435 488b4c2440 e9???????? } // n = 7, score = 100 // e9???????? | // 488b842498000000 | dec eax // 0fb65c2436 | lea eax, [0x3f40ec] // e8???????? | // 0fb6442435 | dec eax // 488b4c2440 | mov dword ptr [esp + 0x28], eax // e9???????? | $sequence_2 = { e9???????? 4983f803 755b 4c8d4303 4c39c6 733d 4c898424e0000000 } // n = 7, score = 100 // e9???????? | // 4983f803 | nop // 755b | call ecx // 4c8d4303 | dec eax // 4c39c6 | mov ecx, dword ptr [eax] // 733d | dec eax // 4c898424e0000000 | mov edx, eax $sequence_3 = { e8???????? 4889c1 4889df 488d05c1aa4f00 488b5c2430 e8???????? c700d9220000 } // n = 7, score = 100 // e8???????? | // 4889c1 | mov byte ptr [eax + 0x35], dl // 4889df | movzx edx, byte ptr [esp + 0xad] // 488d05c1aa4f00 | inc esp // 488b5c2430 | movzx eax, byte ptr [esp + 0xc6] // e8???????? | // c700d9220000 | inc esp $sequence_4 = { e8???????? 66480f7ec0 0f1f440000 e8???????? 4889c3 488d05b1463500 eb29 } // n = 7, score = 100 // e8???????? | // 66480f7ec0 | dec eax // 0f1f440000 | cmp edx, 0xf // e8???????? | // 4889c3 | jae 0x89c // 488d05b1463500 | inc esp // eb29 | movzx eax, byte ptr [esp + edx + 0x19] $sequence_5 = { eb17 440fb64c3c19 4131f1 44884c1419 4488443c19 4883c002 483d90000000 } // n = 7, score = 100 // eb17 | lea eax, [ebx + 3] // 440fb64c3c19 | dec esp // 4131f1 | cmp esi, eax // 44884c1419 | mov ecx, 9 // 4488443c19 | nop // 4883c002 | dec esp // 483d90000000 | lea eax, [ebx + 3] $sequence_6 = { c644242f5a 48bad793ed84f6cb493c 488954241e c64424263d 31c0 6690 eb14 } // n = 7, score = 100 // c644242f5a | xor edx, eax // 48bad793ed84f6cb493c | mov byte ptr [eax + 7], dl // 488954241e | movzx edx, byte ptr [esp + 0x50] // c64424263d | inc esp // 31c0 | movzx eax, byte ptr [esp + 0x4b] // 6690 | mov byte ptr [eax + 6], dl // eb14 | movzx edx, byte ptr [esp + 0x5e] $sequence_7 = { e9???????? 4983f804 7545 4c8d4301 4c39c6 7331 488d0565834400 } // n = 7, score = 100 // e9???????? | // 4983f804 | dec eax // 7545 | mov edx, eax // 4c8d4301 | mov eax, 0xffffffe7 // 4c39c6 | call ecx // 7331 | dec eax // 488d0565834400 | mov ecx, dword ptr [esp + 0x28] $sequence_8 = { e8???????? 90 89442408 48895c2410 0f1f440000 e8???????? 8b442408 } // n = 7, score = 100 // e8???????? | // 90 | nop // 89442408 | dec eax // 48895c2410 | mov ecx, dword ptr [esp + 0x148] // 0f1f440000 | xor eax, eax // e8???????? | // 8b442408 | jmp 0x1704 $sequence_9 = { e8???????? 84c0 0f84b7000000 e8???????? 48898424d8000000 48899c2488000000 488d0550f69800 } // n = 7, score = 100 // e8???????? | // 84c0 | je 0x3e2 // 0f84b7000000 | nop // e8???????? | // 48898424d8000000 | movzx ecx, byte ptr [esp + 0x71] // 48899c2488000000 | movzx ecx, cl // 488d0550f69800 | mov byte ptr [esp + 0x2e], cl condition: 7 of them and filesize < 39452672 }
If your designated proposal does not fit in any other category, feel free to write a free-text in the comment field below. Changes regarding references should be proposed on the Malpedia library page.
Your suggestion will be reviewed before being published. Thank you for contributing!
YYYY-MM-DD
YYYY-MM
YYYY