SYMBOLCOMMON_NAMEaka. SYNONYMS
win.xdspy (Back to overview)

XDSpy

VTCollection    

According to ESET Research, XDDown is a primary malware component and is strictly a downloader. It persists on the system using the traditional Run key. It downloads additional plugins from the hardcoded C&C server using the HTTP protocol. The HTTP replies contain PE binaries encrypted with a hardcoded two-byte XOR key. Plugins include a module for reconnaissance on the affected system, crawling drives, file exfiltration, SSID gathering, and grabbing saved passwords.

References
2025-06-16 ⋅ HarfangLab ⋅ HarfangLab CTR
SadFuture: Mapping XDSpy latest evolution
XDSpy
2021-04-29 ⋅ ESET Research ⋅ Andy Garth, Daniel Chromek, Matthieu Faou, Robert Lipovsky, Tony Anscombe
ESET Industry Report on Government: Targeted but not alone
Exaramel Crutch Exaramel HyperBro HyperSSL InvisiMole XDSpy
2020-10-02 ⋅ ESET Research ⋅ Matthieu Faou
XDSpy: Stealing government secrets since 2011
XDSpy XDSpy
2020-10-01 ⋅ Github (eset) ⋅ Matthieu Faou
XDSpy Indicators of Compromise
XDSpy XDSpy
2020-09-30 ⋅ Virus Bulletin ⋅ Francis Labelle, Matthieu Faou
XDSPY: STEALING GOVERNMENT SECRETS SINCE 2011
XDSpy XDSpy
Yara Rules
[TLP:WHITE] win_xdspy_auto (20260917 | Detects win.xdspy.)
rule win_xdspy_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2026-09-17"
        version = "1"
        description = "Detects win.xdspy."
        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.xdspy"
        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 = { 53 56 57 8bbda0260000 be???????? 8d4584 }
            // n = 6, score = 200
            //   53                   | push                ebx
            //   56                   | push                esi
            //   57                   | push                edi
            //   8bbda0260000         | mov                 edi, dword ptr [ebp + 0x26a0]
            //   be????????           |                     
            //   8d4584               | lea                 eax, [ebp - 0x7c]

        $sequence_1 = { 74e8 8a13 0fb6ca 0fbe8968054100 85c9 }
            // n = 5, score = 200
            //   74e8                 | je                  0xffffffea
            //   8a13                 | mov                 dl, byte ptr [ebx]
            //   0fb6ca               | movzx               ecx, dl
            //   0fbe8968054100       | movsx               ecx, byte ptr [ecx + 0x410568]
            //   85c9                 | test                ecx, ecx

        $sequence_2 = { ff35???????? e8???????? 83c418 84c0 7513 32db ffb56cd8ffff }
            // n = 7, score = 200
            //   ff35????????         |                     
            //   e8????????           |                     
            //   83c418               | add                 esp, 0x18
            //   84c0                 | test                al, al
            //   7513                 | jne                 0x15
            //   32db                 | xor                 bl, bl
            //   ffb56cd8ffff         | push                dword ptr [ebp - 0x2794]

        $sequence_3 = { ff750c ff7508 85c0 7416 ff35???????? 68???????? 56 }
            // n = 7, score = 200
            //   ff750c               | push                dword ptr [ebp + 0xc]
            //   ff7508               | push                dword ptr [ebp + 8]
            //   85c0                 | test                eax, eax
            //   7416                 | je                  0x18
            //   ff35????????         |                     
            //   68????????           |                     
            //   56                   | push                esi

        $sequence_4 = { 6a02 e8???????? a3???????? 83f8ff 74e7 }
            // n = 5, score = 200
            //   6a02                 | push                2
            //   e8????????           |                     
            //   a3????????           |                     
            //   83f8ff               | cmp                 eax, -1
            //   74e7                 | je                  0xffffffe9

        $sequence_5 = { e8???????? 8bd8 83c41c 3bdf 7e56 }
            // n = 5, score = 200
            //   e8????????           |                     
            //   8bd8                 | mov                 ebx, eax
            //   83c41c               | add                 esp, 0x1c
            //   3bdf                 | cmp                 ebx, edi
            //   7e56                 | jle                 0x58

        $sequence_6 = { bb???????? 53 8975a0 e8???????? 83c40c 8d45a0 50 }
            // n = 7, score = 200
            //   bb????????           |                     
            //   53                   | push                ebx
            //   8975a0               | mov                 dword ptr [ebp - 0x60], esi
            //   e8????????           |                     
            //   83c40c               | add                 esp, 0xc
            //   8d45a0               | lea                 eax, [ebp - 0x60]
            //   50                   | push                eax

        $sequence_7 = { ff759c e8???????? 83c40c 85c0 744f 68???????? }
            // n = 6, score = 200
            //   ff759c               | push                dword ptr [ebp - 0x64]
            //   e8????????           |                     
            //   83c40c               | add                 esp, 0xc
            //   85c0                 | test                eax, eax
            //   744f                 | je                  0x51
            //   68????????           |                     

        $sequence_8 = { 440fb706 488bcf 488b15???????? 4883c8ff 48ffc0 }
            // n = 5, score = 100
            //   440fb706             | test                ecx, eax
            //   488bcf               | je                  6
            //   488b15????????       |                     
            //   4883c8ff             | inc                 edx
            //   48ffc0               | rol                 eax, 1

        $sequence_9 = { 488d95e01c0000 488bc8 ff15???????? 498bd4 498bcd ffd0 }
            // n = 6, score = 100
            //   488d95e01c0000       | or                  eax, 0xffffffff
            //   488bc8               | dec                 eax
            //   ff15????????         |                     
            //   498bd4               | inc                 eax
            //   498bcd               | sub                 al, 0x2c
            //   ffd0                 | inc                 edx

        $sequence_10 = { 85c1 7402 ffc2 d1c0 85c1 7402 }
            // n = 6, score = 100
            //   85c1                 | nop                 dword ptr [eax + eax]
            //   7402                 | dec                 byte ptr [eax]
            //   ffc2                 | dec                 eax
            //   d1c0                 | lea                 eax, [eax + 1]
            //   85c1                 | inc                 esp
            //   7402                 | cmp                 byte ptr [eax], bh

        $sequence_11 = { 2c2c 42888429b8aa1700 48ffc1 4883f90c 7ce4 488bcb 90 }
            // n = 7, score = 100
            //   2c2c                 | test                ecx, eax
            //   42888429b8aa1700     | je                  0xe
            //   48ffc1               | inc                 esp
            //   4883f90c             | movzx               eax, word ptr [esi]
            //   7ce4                 | dec                 eax
            //   488bcb               | mov                 ecx, edi
            //   90                   | dec                 eax

        $sequence_12 = { eb1d 488d05774a0100 ffcb 488d0c9b }
            // n = 4, score = 100
            //   eb1d                 | jmp                 0x1f
            //   488d05774a0100       | dec                 eax
            //   ffcb                 | lea                 eax, [0x14a77]
            //   488d0c9b             | dec                 ebx

        $sequence_13 = { 0f1f440000 fe08 488d4001 443838 }
            // n = 4, score = 100
            //   0f1f440000           | dec                 eax
            //   fe08                 | lea                 eax, [ebp + 0x6c0]
            //   488d4001             | cmp                 byte ptr [ebp + 0x6c0], bl
            //   443838               | je                  0x13

        $sequence_14 = { c705????????68002000 c705????????32000d00 c705????????7470646c 66c705????????6675 }
            // n = 4, score = 100
            //   c705????????68002000     |     
            //   c705????????32000d00     |     
            //   c705????????7470646c     |     
            //   66c705????????6675     |     

        $sequence_15 = { 488d4001 3818 75f6 488d85c0060000 389dc0060000 7411 }
            // n = 6, score = 100
            //   488d4001             | dec                 eax
            //   3818                 | lea                 ecx, [ebx + ebx*4]
            //   75f6                 | dec                 eax
            //   488d85c0060000       | lea                 eax, [eax + 1]
            //   389dc0060000         | cmp                 byte ptr [eax], bl
            //   7411                 | jne                 0xfffffff8

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