SYMBOLCOMMON_NAMEaka. SYNONYMS
win.purplewave (Back to overview)

PurpleWave

VTCollection    

ZScaler reported on a new Infostealer called PurpleWave, which is written in C++ and silently installs itself onto a user’s system. It connects to a command and control (C&C) server to send system information and installs new malware onto the infected system.

The author of this malware is advertising and selling PurpleWave stealer on Russian cybercrime forums for 5,000 RUB (US$68) with lifetime updates and 4,000 RUB (US$54) with only two updates.

References
2020-08-14 ⋅ Zscaler ⋅ Mohd Sadique
PurpleWave - A New Infostealer from Russia
PurpleWave
Yara Rules
[TLP:WHITE] win_purplewave_auto (20260917 | Detects win.purplewave.)
rule win_purplewave_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2026-09-17"
        version = "1"
        description = "Detects win.purplewave."
        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.purplewave"
        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 = { 8bf1 8b7d08 8bc7 2b06 99 6a28 59 }
            // n = 7, score = 400
            //   8bf1                 | mov                 esi, ecx
            //   8b7d08               | mov                 edi, dword ptr [ebp + 8]
            //   8bc7                 | mov                 eax, edi
            //   2b06                 | sub                 eax, dword ptr [esi]
            //   99                   | cdq                 
            //   6a28                 | push                0x28
            //   59                   | pop                 ecx

        $sequence_1 = { 8b45a0 50 8b08 ff5108 ff15???????? 68???????? }
            // n = 6, score = 400
            //   8b45a0               | mov                 eax, dword ptr [ebp - 0x60]
            //   50                   | push                eax
            //   8b08                 | mov                 ecx, dword ptr [eax]
            //   ff5108               | call                dword ptr [ecx + 8]
            //   ff15????????         |                     
            //   68????????           |                     

        $sequence_2 = { e8???????? ff7508 8d4dd0 c645fc01 e8???????? }
            // n = 5, score = 400
            //   e8????????           |                     
            //   ff7508               | push                dword ptr [ebp + 8]
            //   8d4dd0               | lea                 ecx, [ebp - 0x30]
            //   c645fc01             | mov                 byte ptr [ebp - 4], 1
            //   e8????????           |                     

        $sequence_3 = { e8???????? c20800 55 8bec 81ec18020000 a1???????? 33c5 }
            // n = 7, score = 400
            //   e8????????           |                     
            //   c20800               | ret                 8
            //   55                   | push                ebp
            //   8bec                 | mov                 ebp, esp
            //   81ec18020000         | sub                 esp, 0x218
            //   a1????????           |                     
            //   33c5                 | xor                 eax, ebp

        $sequence_4 = { e8???????? 895e3c 8bc6 895e40 895e44 895e48 895e4c }
            // n = 7, score = 400
            //   e8????????           |                     
            //   895e3c               | mov                 dword ptr [esi + 0x3c], ebx
            //   8bc6                 | mov                 eax, esi
            //   895e40               | mov                 dword ptr [esi + 0x40], ebx
            //   895e44               | mov                 dword ptr [esi + 0x44], ebx
            //   895e48               | mov                 dword ptr [esi + 0x48], ebx
            //   895e4c               | mov                 dword ptr [esi + 0x4c], ebx

        $sequence_5 = { ff5108 8b4d94 85c9 0f8506feffff 8d45a4 8bcf 50 }
            // n = 7, score = 400
            //   ff5108               | call                dword ptr [ecx + 8]
            //   8b4d94               | mov                 ecx, dword ptr [ebp - 0x6c]
            //   85c9                 | test                ecx, ecx
            //   0f8506feffff         | jne                 0xfffffe0c
            //   8d45a4               | lea                 eax, [ebp - 0x5c]
            //   8bcf                 | mov                 ecx, edi
            //   50                   | push                eax

        $sequence_6 = { 8bc1 eb03 83c8ff 8b4dfc 5f 5e 33cd }
            // n = 7, score = 400
            //   8bc1                 | mov                 eax, ecx
            //   eb03                 | jmp                 5
            //   83c8ff               | or                  eax, 0xffffffff
            //   8b4dfc               | mov                 ecx, dword ptr [ebp - 4]
            //   5f                   | pop                 edi
            //   5e                   | pop                 esi
            //   33cd                 | xor                 ecx, ebp

        $sequence_7 = { 85c0 7528 8bce e8???????? 8b5640 8b7644 8b4df4 }
            // n = 7, score = 400
            //   85c0                 | test                eax, eax
            //   7528                 | jne                 0x2a
            //   8bce                 | mov                 ecx, esi
            //   e8????????           |                     
            //   8b5640               | mov                 edx, dword ptr [esi + 0x40]
            //   8b7644               | mov                 esi, dword ptr [esi + 0x44]
            //   8b4df4               | mov                 ecx, dword ptr [ebp - 0xc]

        $sequence_8 = { 59 c645fc44 0bdf 83781410 899d3cffffff 7202 8b00 }
            // n = 7, score = 400
            //   59                   | pop                 ecx
            //   c645fc44             | mov                 byte ptr [ebp - 4], 0x44
            //   0bdf                 | or                  ebx, edi
            //   83781410             | cmp                 dword ptr [eax + 0x14], 0x10
            //   899d3cffffff         | mov                 dword ptr [ebp - 0xc4], ebx
            //   7202                 | jb                  4
            //   8b00                 | mov                 eax, dword ptr [eax]

        $sequence_9 = { 8bf7 6a06 59 8bfa f3a5 83601000 8bfa }
            // n = 7, score = 400
            //   8bf7                 | mov                 esi, edi
            //   6a06                 | push                6
            //   59                   | pop                 ecx
            //   8bfa                 | mov                 edi, edx
            //   f3a5                 | rep movsd           dword ptr es:[edi], dword ptr [esi]
            //   83601000             | and                 dword ptr [eax + 0x10], 0
            //   8bfa                 | mov                 edi, edx

    condition:
        7 of them and filesize < 1400832
}
Download all Yara Rules