SYMBOLCOMMON_NAMEaka. SYNONYMS
win.purplefox (Back to overview)

PurpleFox

VTCollection    

Purple Fox uses msi.dll function, 'MsiInstallProductA', to download and execute its payload. The payload is a .msi file that contains encrypted shellcode including 32-bit and 64-bit versions. once executed the system will be restarted and uses the 'PendingFileRenameOperations' registry to rename it's components.

Upon restart the rootkit capability of Purple Fox is invoked. It creates a suspended svchost process and injects a DLL that will create a driver with the rootkit capability.

The latest version of Purple Fox abuses open-source code to enable it's rootkit components, which includes hiding and protecting its files and registry entries. It also abuses a file utility software to hide its DLL component, which deters reverse engineering.

References
2024-02-01 ⋅ Bleeping Computer ⋅ Bill Toulas
PurpleFox malware infects thousands of computers in Ukraine
PurpleFox
2023-09-20 ⋅ Proofpoint ⋅ Proofpoint Threat Research Team
Chinese Malware Appears in Earnest Across Cybercrime Threat Landscape
FatalRat PurpleFox ValleyRAT
2022-03-28 ⋅ The Hacker News ⋅ Ravie Lakshmanan
'Purple Fox' Hackers Spotted Using New Variant of FatalRAT in Recent Malware Attacks
DirtyMoe FatalRat PurpleFox
2022-03-25 ⋅ Trend Micro ⋅ Abdelrhman Sharshar, Jay Yaneza, Sherif Magdy
Purple Fox Uses New Arrival Vector and Improves Malware Arsenal
FatalRat PurpleFox
2022-03-25 ⋅ Trend Micro ⋅ Abdelrhman Sharshar, Jay Yaneza, Sherif Magdy
Purple Fox Uses New Arrival Vector and Improves Malware Arsenal
PurpleFox
2022-03-25 ⋅ Trend Micro ⋅ Abdelrhman Sharshar, Jay Yaneza, Sherif Magdy
Purple Fox Uses New Arrival Vector and Improves Malware Arsenal (Technical Brief)
PurpleFox
2022-03-25 ⋅ Trend Micro ⋅ Abdelrhman Sharshar, Jay Yaneza, Sherif Magdy
Purple Fox Uses New Arrival Vector and Improves Malware Arsenal (IOCs)
PurpleFox
2022-01-20 ⋅ Blackberry ⋅ The BlackBerry Research & Intelligence Team
Threat Thursday: Purple Fox Rootkit
PurpleFox
2022-01-04 ⋅ The Cyber Security Times ⋅ John Greenwood
Purple Fox malware is actively distributed via Telegram Installers
PurpleFox
2022-01-03 ⋅ MinervaLabs ⋅ Natalie Zargarov
Malicious Telegram Installer Drops Purple Fox Rootkit
PurpleFox
2021-12-13 ⋅ Trend Micro ⋅ Abdelrhman Sharshar, Jay Yaneza, Sherif Magdy
A Look Into Purple Fox’s Server Infrastructure
PurpleFox
2021-10-19 ⋅ Trend Micro ⋅ Abdelrhman Sharshar, Jay Yaneza, Sherif Magdy
PurpleFox Adds New Backdoor That Uses WebSockets
FoxSocket PurpleFox
2021-07-07 ⋅ Twitter (@C0rk1_H) ⋅ hyabcd
Tweet on purplefox exploiting PrintNightmare (CVE-2021-34527) vulnerability in cryptocurrency mining campaign
PurpleFox
2021-07-01 ⋅ Trend Micro ⋅ William Gamazo Sanchez
PurpleFox Using WPAD to Target Indonesian Users
PurpleFox
2021-06-11 ⋅ ⋅ Tencent ⋅ The Tencent Security Threat Intelligence Center
Tencent Security Report: Purple Fox virus maliciously attacks SQL server and spreads like a worm
PurpleFox
2021-04-15 ⋅ nao_sec blog ⋅ nao_sec
Exploit Kit still sharpens a sword
PurpleFox
2021-04-14 ⋅ HP ⋅ Patrick Schläpfer
From PoC to Exploit Kit: Purple Fox now exploits CVE-2021-26411
PurpleFox
2021-03-25 ⋅ Malwarebytes ⋅ Malwarebytes Labs
Perkiler malware turns to SMB brute force to spread
PurpleFox
2021-03-24 ⋅ Guardicore ⋅ Amit Serper
Purple Fox Rootkit Now Propagates as a Worm
PurpleFox
2020-10-19 ⋅ SentinelOne ⋅ Gal Kristal
Purple Fox EK | New CVEs, Steganography, and Virtualization Added to Attack Flow
PurpleFox
2019-09-09 ⋅ Trend Micro ⋅ Earle Earnshaw, Johnlery Triunfante
‘Purple Fox’ Fileless Malware with Rookit Component Delivered by Rig Exploit Kit Now Abuses PowerShell
PurpleFox
2017-07-05 ⋅ Trend Micro ⋅ Kevin Y. Huang
Security 101: The Impact of Cryptocurrency-Mining Malware
PurpleFox
Yara Rules
[TLP:WHITE] win_purplefox_auto (20260917 | Detects win.purplefox.)
rule win_purplefox_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2026-09-17"
        version = "1"
        description = "Detects win.purplefox."
        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.purplefox"
        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 = { 488d0dd5b10000 e8???????? 4533db 6644895c2450 33d2 41b806020000 }
            // n = 6, score = 100
            //   488d0dd5b10000       | stc                 
            //   e8????????           |                     
            //   4533db               | test                ebp, esi
            //   6644895c2450         | bt                  edi, edi
            //   33d2                 | pushfd              
            //   41b806020000         | bt                  ebp, 8

        $sequence_1 = { e8???????? 488bfb 4803ff 4c8d2dd58a0000 49837cfd0000 7404 8bc6 }
            // n = 7, score = 100
            //   e8????????           |                     
            //   488bfb               | dec                 eax
            //   4803ff               | lea                 edx, [esp + 0x20]
            //   4c8d2dd58a0000       | mov                 edx, edi
            //   49837cfd0000         | inc                 esp
            //   7404                 | mov                 eax, eax
            //   8bc6                 | mov                 eax, edi

        $sequence_2 = { 8b55d8 52 ffd6 33c0 5f 5e }
            // n = 6, score = 100
            //   8b55d8               | mov                 edx, dword ptr [ebp - 0x28]
            //   52                   | push                edx
            //   ffd6                 | call                esi
            //   33c0                 | xor                 eax, eax
            //   5f                   | pop                 edi
            //   5e                   | pop                 esi

        $sequence_3 = { c7458030000000 48897588 4889742420 c7459840020000 }
            // n = 4, score = 100
            //   c7458030000000       | xor                 edx, edx
            //   48897588             | dec                 eax
            //   4889742420           | sub                 esp, 0x4d0
            //   c7459840020000       | xor                 esi, esi

        $sequence_4 = { 8bf0 8b4dfc ff15???????? 56 68???????? ffd3 83c408 }
            // n = 7, score = 100
            //   8bf0                 | mov                 esi, eax
            //   8b4dfc               | mov                 ecx, dword ptr [ebp - 4]
            //   ff15????????         |                     
            //   56                   | push                esi
            //   68????????           |                     
            //   ffd3                 | call                ebx
            //   83c408               | add                 esp, 8

        $sequence_5 = { 488b4c2460 ff15???????? 488d0d730f0000 eb07 }
            // n = 4, score = 100
            //   488b4c2460           | mov                 dword ptr [ebp - 0x68], 0x240
            //   ff15????????         |                     
            //   488d0d730f0000       | dec                 eax
            //   eb07                 | add                 esp, 0x260

        $sequence_6 = { 8b5604 83c40c 8d8d7cffffff 51 52 ff15???????? }
            // n = 6, score = 100
            //   8b5604               | mov                 eax, dword ptr [edi]
            //   83c40c               | xor                 ecx, ebp
            //   8d8d7cffffff         | pop                 esi
            //   51                   | cmp                 eax, 0x431
            //   52                   | je                  0x1c
            //   ff15????????         |                     

        $sequence_7 = { ec 2b6359 e40c f6fb fd }
            // n = 5, score = 100
            //   ec                   | add                 ecx, dword ptr [esi*4 + 0x410c00]
            //   2b6359               | jmp                 0x11
            //   e40c                 | mov                 ecx, edx
            //   f6fb                 | je                  8
            //   fd                   | mov                 eax, dword ptr [ebp - 0x228]

        $sequence_8 = { 486305ddd9ffff 488d0d9ad9ffff 4803c1 813850450000 75e3 b90b020000 }
            // n = 6, score = 100
            //   486305ddd9ffff       | sub                 ecx, 0x57e74191
            //   488d0d9ad9ffff       | pushfd              
            //   4803c1               | cmp                 esp, ebp
            //   813850450000         | stc                 
            //   75e3                 | dec                 eax
            //   b90b020000           | mov                 ecx, dword ptr [ebx + 8]

        $sequence_9 = { 4881c460020000 5e 5b 5d }
            // n = 4, score = 100
            //   4881c460020000       | mov                 dword ptr [esp + 0x68], 0x100
            //   5e                   | dec                 eax
            //   5b                   | mov                 edi, ecx
            //   5d                   | dec                 eax

        $sequence_10 = { ff15???????? 85c0 0f84ef000000 488d15a0b20000 }
            // n = 4, score = 100
            //   ff15????????         |                     
            //   85c0                 | js                  0x2b
            //   0f84ef000000         | mov                 edi, dword ptr [ebx + 0x10]
            //   488d15a0b20000       | dec                 eax

        $sequence_11 = { 33c0 6808020000 50 89442420 89442424 8944242c 89442430 }
            // n = 7, score = 100
            //   33c0                 | xor                 eax, eax
            //   6808020000           | push                0x208
            //   50                   | push                eax
            //   89442420             | mov                 dword ptr [esp + 0x20], eax
            //   89442424             | mov                 dword ptr [esp + 0x24], eax
            //   8944242c             | mov                 dword ptr [esp + 0x2c], eax
            //   89442430             | mov                 dword ptr [esp + 0x30], eax

        $sequence_12 = { 5d c3 56 a3???????? 8d45f8 50 51 }
            // n = 7, score = 100
            //   5d                   | pop                 ebp
            //   c3                   | ret                 
            //   56                   | push                esi
            //   a3????????           |                     
            //   8d45f8               | lea                 eax, [ebp - 8]
            //   50                   | push                eax
            //   51                   | push                ecx

        $sequence_13 = { a3???????? a1???????? c705????????bb454000 8935???????? a3???????? ff15???????? a3???????? }
            // n = 7, score = 100
            //   a3????????           |                     
            //   a1????????           |                     
            //   c705????????bb454000     |     
            //   8935????????         |                     
            //   a3????????           |                     
            //   ff15????????         |                     
            //   a3????????           |                     

        $sequence_14 = { 4881ecd0040000 33f6 c744246800010000 488bf9 4889742460 }
            // n = 5, score = 100
            //   4881ecd0040000       | push                esi
            //   33f6                 | dec                 eax
            //   c744246800010000     | lea                 ebp, [esp - 0x47]
            //   488bf9               | dec                 eax
            //   4889742460           | sub                 esp, 0xd0

        $sequence_15 = { eb13 488d0d1b0f0000 ff15???????? 8bc7 eb02 }
            // n = 5, score = 100
            //   eb13                 | jmp                 0x15
            //   488d0d1b0f0000       | dec                 eax
            //   ff15????????         |                     
            //   8bc7                 | lea                 ecx, [0xf1b]
            //   eb02                 | mov                 eax, edi

        $sequence_16 = { 8b11 8d45f4 50 8b45f8 6a00 }
            // n = 5, score = 100
            //   8b11                 | mov                 edx, dword ptr [ecx]
            //   8d45f4               | lea                 eax, [ebp - 0xc]
            //   50                   | push                eax
            //   8b45f8               | mov                 eax, dword ptr [ebp - 8]
            //   6a00                 | push                0

        $sequence_17 = { 8b4dfc c70700000000 8b07 33cd 5e }
            // n = 5, score = 100
            //   8b4dfc               | dec                 eax
            //   c70700000000         | mov                 dword ptr [esp + 0x20], eax
            //   8b07                 | mov                 ebx, eax
            //   33cd                 | test                eax, eax
            //   5e                   | jns                 0x27

        $sequence_18 = { 8b07 83c404 8d5002 8d642400 668b08 }
            // n = 5, score = 100
            //   8b07                 | mov                 eax, dword ptr [edi]
            //   83c404               | add                 esp, 4
            //   8d5002               | lea                 edx, [eax + 2]
            //   8d642400             | lea                 esp, [esp]
            //   668b08               | mov                 cx, word ptr [eax]

        $sequence_19 = { 66c1c90a 0fb6c8 f9 85f5 }
            // n = 4, score = 100
            //   66c1c90a             | std                 
            //   0fb6c8               | in                  al, dx
            //   f9                   | xor                 byte ptr [eax], 0x3e
            //   85f5                 | neg                 ch

        $sequence_20 = { 8b3d???????? 03d9 8d4900 8b4304 83e808 d1e8 8d5308 }
            // n = 7, score = 100
            //   8b3d????????         |                     
            //   03d9                 | push                eax
            //   8d4900               | add                 esp, 8
            //   8b4304               | xor                 edi, edi
            //   83e808               | sar                 eax, 5
            //   d1e8                 | mov                 esi, edi
            //   8d5308               | and                 esi, 0x1f

        $sequence_21 = { 3d31040000 7415 50 68???????? e8???????? 83c408 33ff }
            // n = 7, score = 100
            //   3d31040000           | dec                 eax
            //   7415                 | mov                 ecx, dword ptr [ebp + 0x77]
            //   50                   | dec                 eax
            //   68????????           |                     
            //   e8????????           |                     
            //   83c408               | mov                 ecx, dword ptr [esp + 0x60]
            //   33ff                 | dec                 eax

        $sequence_22 = { 488bcb e8???????? 03ff ebcc 85c0 7825 8b7b10 }
            // n = 7, score = 100
            //   488bcb               | popal               
            //   e8????????           |                     
            //   03ff                 | arpl                word ptr [edx + ebp*8 + 0x1c], cx
            //   ebcc                 | mov                 esp, 0xebefed2c
            //   85c0                 | pop                 ecx
            //   7825                 | ror                 cx, 0xa
            //   8b7b10               | movzx               ecx, al

        $sequence_23 = { 68e6ef209f 6687cb 0f98c3 8774243c 53 684608e44c 9c }
            // n = 7, score = 100
            //   68e6ef209f           | mov                 eax, dword ptr [ebx + 4]
            //   6687cb               | sub                 eax, 8
            //   0f98c3               | shr                 eax, 1
            //   8774243c             | lea                 edx, [ebx + 8]
            //   53                   | mov                 esi, eax
            //   684608e44c           | sar                 esi, 5
            //   9c                   | shl                 ecx, 6

        $sequence_24 = { e8???????? 488b4b08 488d542420 ff15???????? 8bd7 448bc0 8bc7 }
            // n = 7, score = 100
            //   e8????????           |                     
            //   488b4b08             | lea                 esp, [esp + 0x20]
            //   488d542420           | ja                  0x15f6
            //   ff15????????         |                     
            //   8bd7                 | sal                 al, cl
            //   448bc0               | sub                 ebx, edi
            //   8bc7                 | push                edi

        $sequence_25 = { 57 f361 634cea1c bc2cedefeb 59 }
            // n = 5, score = 100
            //   57                   | pushfd              
            //   f361                 | in                  al, dx
            //   634cea1c             | sub                 esp, dword ptr [ebx + 0x59]
            //   bc2cedefeb           | in                  al, 0xc
            //   59                   | idiv                bl

        $sequence_26 = { 4889742428 4889442420 ff15???????? 8bd8 85c0 791c 488b4d77 }
            // n = 7, score = 100
            //   4889742428           | mov                 dword ptr [esp + 0x60], esi
            //   4889442420           | mov                 dword ptr [ebp - 0x80], 0x30
            //   ff15????????         |                     
            //   8bd8                 | dec                 eax
            //   85c0                 | mov                 dword ptr [ebp - 0x78], esi
            //   791c                 | dec                 eax
            //   488b4d77             | mov                 dword ptr [esp + 0x20], esi

        $sequence_27 = { 8d642420 0f87ec150000 d2f0 29fb }
            // n = 4, score = 100
            //   8d642420             | sets                bl
            //   0f87ec150000         | xchg                dword ptr [esp + 0x3c], esi
            //   d2f0                 | push                ebx
            //   29fb                 | push                0x4ce40846

        $sequence_28 = { 4c8d0d4dceffff 41f640387f 7528 3bc6 741e }
            // n = 5, score = 100
            //   4c8d0d4dceffff       | dec                 eax
            //   41f640387f           | mov                 ecx, ebx
            //   7528                 | add                 edi, edi
            //   3bc6                 | jmp                 0xffffffce
            //   741e                 | test                eax, eax

        $sequence_29 = { 68???????? 6a00 52 56 }
            // n = 4, score = 100
            //   68????????           |                     
            //   6a00                 | push                0
            //   52                   | push                edx
            //   56                   | push                esi

        $sequence_30 = { 59 59 8b7508 8d34f518fc4000 391e }
            // n = 5, score = 100
            //   59                   | je                  0x2e
            //   59                   | dec                 eax
            //   8b7508               | lea                 ecx, [0xf64]
            //   8d34f518fc4000       | mov                 ecx, dword ptr [ebp - 4]
            //   391e                 | mov                 dword ptr [edi], 0

        $sequence_31 = { c1f805 8bf7 83e61f c1e606 033485000c4100 c745e401000000 33db }
            // n = 7, score = 100
            //   c1f805               | lea                 ecx, [0xf73]
            //   8bf7                 | jmp                 0x10
            //   83e61f               | jl                  0xffffff13
            //   c1e606               | dec                 eax
            //   033485000c4100       | mov                 ecx, dword ptr [esp + 0x60]
            //   c745e401000000       | dec                 eax
            //   33db                 | cmp                 dword ptr [esp + 0x70], eax

        $sequence_32 = { c20400 6800040000 8d95acfbffff 53 52 }
            // n = 5, score = 100
            //   c20400               | ret                 4
            //   6800040000           | push                0x400
            //   8d95acfbffff         | lea                 edx, [ebp - 0x454]
            //   53                   | push                ebx
            //   52                   | push                edx

        $sequence_33 = { 458bc7 488d0d487c0000 488b0cc1 488b442460 }
            // n = 4, score = 100
            //   458bc7               | lea                 ecx, [0xb1d5]
            //   488d0d487c0000       | inc                 ebp
            //   488b0cc1             | xor                 ebx, ebx
            //   488b442460           | inc                 sp

        $sequence_34 = { 92 205232 3d5bf39362 f8 e2b2 bd2d145a68 }
            // n = 6, score = 100
            //   92                   | scasd               eax, dword ptr es:[edi]
            //   205232               | jecxz               0x2b
            //   3d5bf39362           | mov                 ecx, 0x8f072088
            //   f8                   | inc                 esi
            //   e2b2                 | push                0x9f20efe6
            //   bd2d145a68           | xchg                bx, cx

        $sequence_35 = { 53 56 488d6c24b9 4881ecd0000000 33d2 }
            // n = 5, score = 100
            //   53                   | mov                 dword ptr [eax + 0x18], esi
            //   56                   | dec                 esp
            //   488d6c24b9           | mov                 dword ptr [eax + 0x20], esp
            //   4881ecd0000000       | push                ebp
            //   33d2                 | push                ebx

        $sequence_36 = { 488bc4 48897018 4c896020 55 }
            // n = 4, score = 100
            //   488bc4               | jmp                 4
            //   48897018             | dec                 eax
            //   4c896020             | mov                 eax, esp
            //   55                   | dec                 eax

        $sequence_37 = { 9e af e329 b98820078f 46 }
            // n = 5, score = 100
            //   9e                   | lea                 ecx, [ebp - 0x84]
            //   af                   | push                ecx
            //   e329                 | push                edx
            //   b98820078f           | add                 ebx, ecx
            //   46                   | lea                 ecx, [ecx]

        $sequence_38 = { ec 82303e f6dd 53 }
            // n = 4, score = 100
            //   ec                   | inc                 eax
            //   82303e               | cmp                 eax, 4
            //   f6dd                 | ja                  0xff
            //   53                   | sahf                

        $sequence_39 = { 8bf0 c1fe05 c1e106 030cb5000c4100 eb02 8bca }
            // n = 6, score = 100
            //   8bf0                 | shl                 esi, 6
            //   c1fe05               | add                 esi, dword ptr [eax*4 + 0x410c00]
            //   c1e106               | mov                 dword ptr [ebp - 0x1c], 1
            //   030cb5000c4100       | xor                 ebx, ebx
            //   eb02                 | pop                 ecx
            //   8bca                 | pop                 ecx

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