rule win_cryptbot_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2026-09-17"
        version = "1"
        description = "Detects win.cryptbot."
        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.cryptbot"
        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 = { 85c0 750e b9ca070200 e8???????? 8bc8 }
            // n = 5, score = 600
            //   85c0                 | test                eax, eax
            //   750e                 | jne                 0x10
            //   b9ca070200           | mov                 ecx, 0x207ca
            //   e8????????           |                     
            //   8bc8                 | mov                 ecx, eax

        $sequence_1 = { 895804 e8???????? c74004d0070000 e9???????? }
            // n = 4, score = 600
            //   895804               | mov                 dword ptr [eax + 4], ebx
            //   e8????????           |                     
            //   c74004d0070000       | mov                 dword ptr [eax + 4], 0x7d0
            //   e9????????           |                     

        $sequence_2 = { 33c0 eb0a b917d90000 e8???????? }
            // n = 4, score = 600
            //   33c0                 | xor                 eax, eax
            //   eb0a                 | jmp                 0xc
            //   b917d90000           | mov                 ecx, 0xd917
            //   e8????????           |                     

        $sequence_3 = { 84c0 7514 b800000002 e9???????? }
            // n = 4, score = 600
            //   84c0                 | test                al, al
            //   7514                 | jne                 0x16
            //   b800000002           | mov                 eax, 0x2000000
            //   e9????????           |                     

        $sequence_4 = { 85c0 740a b9491a0100 e9???????? }
            // n = 4, score = 600
            //   85c0                 | test                eax, eax
            //   740a                 | je                  0xc
            //   b9491a0100           | mov                 ecx, 0x11a49
            //   e9????????           |                     

        $sequence_5 = { 85f6 790e b9e2d80000 e8???????? 8907 }
            // n = 5, score = 600
            //   85f6                 | test                esi, esi
            //   790e                 | jns                 0x10
            //   b9e2d80000           | mov                 ecx, 0xd8e2
            //   e8????????           |                     
            //   8907                 | mov                 dword ptr [edi], eax

        $sequence_6 = { 85c0 750f b955960100 e8???????? e9???????? }
            // n = 5, score = 600
            //   85c0                 | test                eax, eax
            //   750f                 | jne                 0x11
            //   b955960100           | mov                 ecx, 0x19655
            //   e8????????           |                     
            //   e9????????           |                     

        $sequence_7 = { 83f8ff 7407 c1e804 2401 8ad8 8ac3 }
            // n = 6, score = 600
            //   83f8ff               | cmp                 eax, -1
            //   7407                 | je                  9
            //   c1e804               | shr                 eax, 4
            //   2401                 | and                 al, 1
            //   8ad8                 | mov                 bl, al
            //   8ac3                 | mov                 al, bl

        $sequence_8 = { 7411 ffb6c4000000 6a00 50 e8???????? 83c40c 8bce }
            // n = 7, score = 400
            //   7411                 | je                  0x13
            //   ffb6c4000000         | push                dword ptr [esi + 0xc4]
            //   6a00                 | push                0
            //   50                   | push                eax
            //   e8????????           |                     
            //   83c40c               | add                 esp, 0xc
            //   8bce                 | mov                 ecx, esi

        $sequence_9 = { 7518 8b542414 83c718 8bcd }
            // n = 4, score = 400
            //   7518                 | jne                 0x1a
            //   8b542414             | mov                 edx, dword ptr [esp + 0x14]
            //   83c718               | add                 edi, 0x18
            //   8bcd                 | mov                 ecx, ebp

        $sequence_10 = { 83caff 8bcf e8???????? 83caff }
            // n = 4, score = 400
            //   83caff               | or                  edx, 0xffffffff
            //   8bcf                 | mov                 ecx, edi
            //   e8????????           |                     
            //   83caff               | or                  edx, 0xffffffff

        $sequence_11 = { 7424 807e4100 7404 33c0 }
            // n = 4, score = 400
            //   7424                 | je                  0x26
            //   807e4100             | cmp                 byte ptr [esi + 0x41], 0
            //   7404                 | je                  6
            //   33c0                 | xor                 eax, eax

        $sequence_12 = { 750f 8a44245c 84c0 7507 }
            // n = 4, score = 400
            //   750f                 | jne                 0x11
            //   8a44245c             | mov                 al, byte ptr [esp + 0x5c]
            //   84c0                 | test                al, al
            //   7507                 | jne                 9

        $sequence_13 = { 7510 83be9c01000000 7507 8bce }
            // n = 4, score = 400
            //   7510                 | jne                 0x12
            //   83be9c01000000       | cmp                 dword ptr [esi + 0x19c], 0
            //   7507                 | jne                 9
            //   8bce                 | mov                 ecx, esi

        $sequence_14 = { 85c0 742c 8bd6 8bcb }
            // n = 4, score = 400
            //   85c0                 | test                eax, eax
            //   742c                 | je                  0x2e
            //   8bd6                 | mov                 edx, esi
            //   8bcb                 | mov                 ecx, ebx

        $sequence_15 = { 741e 8b491c 8b442434 803c0800 7411 33c0 39442438 }
            // n = 7, score = 400
            //   741e                 | je                  0x20
            //   8b491c               | mov                 ecx, dword ptr [ecx + 0x1c]
            //   8b442434             | mov                 eax, dword ptr [esp + 0x34]
            //   803c0800             | cmp                 byte ptr [eax + ecx], 0
            //   7411                 | je                  0x13
            //   33c0                 | xor                 eax, eax
            //   39442438             | cmp                 dword ptr [esp + 0x38], eax

        $sequence_16 = { 750b 8bce e8???????? 8b4c2428 }
            // n = 4, score = 400
            //   750b                 | jne                 0xd
            //   8bce                 | mov                 ecx, esi
            //   e8????????           |                     
            //   8b4c2428             | mov                 ecx, dword ptr [esp + 0x28]

        $sequence_17 = { 744e 0fb74802 83e103 3bcb }
            // n = 4, score = 400
            //   744e                 | je                  0x50
            //   0fb74802             | movzx               ecx, word ptr [eax + 2]
            //   83e103               | and                 ecx, 3
            //   3bcb                 | cmp                 ecx, ebx

        $sequence_18 = { 8b5720 8bce e8???????? 8b5724 }
            // n = 4, score = 200
            //   8b5720               | mov                 edx, dword ptr [edi + 0x20]
            //   8bce                 | mov                 ecx, esi
            //   e8????????           |                     
            //   8b5724               | mov                 edx, dword ptr [edi + 0x24]

        $sequence_19 = { 8b4d18 8901 895104 e9???????? 8b4508 }
            // n = 5, score = 100
            //   8b4d18               | mov                 ecx, dword ptr [ebp + 0x18]
            //   8901                 | mov                 dword ptr [ecx], eax
            //   895104               | mov                 dword ptr [ecx + 4], edx
            //   e9????????           |                     
            //   8b4508               | mov                 eax, dword ptr [ebp + 8]

        $sequence_20 = { 8b4d20 894c2468 8b4d5c 894c2464 }
            // n = 4, score = 100
            //   8b4d20               | mov                 ecx, dword ptr [ebp + 0x20]
            //   894c2468             | mov                 dword ptr [esp + 0x68], ecx
            //   8b4d5c               | mov                 ecx, dword ptr [ebp + 0x5c]
            //   894c2464             | mov                 dword ptr [esp + 0x64], ecx

        $sequence_21 = { 8b95acfeffff 33c0 3802 7406 }
            // n = 4, score = 100
            //   8b95acfeffff         | mov                 edx, dword ptr [ebp - 0x154]
            //   33c0                 | xor                 eax, eax
            //   3802                 | cmp                 byte ptr [edx], al
            //   7406                 | je                  8

        $sequence_22 = { 8b959cfeffff 8bca 85d2 742a }
            // n = 4, score = 100
            //   8b959cfeffff         | mov                 edx, dword ptr [ebp - 0x164]
            //   8bca                 | mov                 ecx, edx
            //   85d2                 | test                edx, edx
            //   742a                 | je                  0x2c

        $sequence_23 = { 8b4d18 8b09 81c1fc030000 8b448808 }
            // n = 4, score = 100
            //   8b4d18               | mov                 ecx, dword ptr [ebp + 0x18]
            //   8b09                 | mov                 ecx, dword ptr [ecx]
            //   81c1fc030000         | add                 ecx, 0x3fc
            //   8b448808             | mov                 eax, dword ptr [eax + ecx*4 + 8]

        $sequence_24 = { 8b95a0feffff 6a00 6a00 8b08 }
            // n = 4, score = 100
            //   8b95a0feffff         | mov                 edx, dword ptr [ebp - 0x160]
            //   6a00                 | push                0
            //   6a00                 | push                0
            //   8b08                 | mov                 ecx, dword ptr [eax]

        $sequence_25 = { 8b959cfeffff 8b85acfeffff 33c9 3808 }
            // n = 4, score = 100
            //   8b959cfeffff         | mov                 edx, dword ptr [ebp - 0x164]
            //   8b85acfeffff         | mov                 eax, dword ptr [ebp - 0x154]
            //   33c9                 | xor                 ecx, ecx
            //   3808                 | cmp                 byte ptr [eax], cl

        $sequence_26 = { 8b4d34 894c245c dd85b8fbffff dd5c2454 }
            // n = 4, score = 100
            //   8b4d34               | mov                 ecx, dword ptr [ebp + 0x34]
            //   894c245c             | mov                 dword ptr [esp + 0x5c], ecx
            //   dd85b8fbffff         | fld                 qword ptr [ebp - 0x448]
            //   dd5c2454             | fstp                qword ptr [esp + 0x54]

        $sequence_27 = { 8b4d18 8b09 83c101 81c1fc030000 }
            // n = 4, score = 100
            //   8b4d18               | mov                 ecx, dword ptr [ebp + 0x18]
            //   8b09                 | mov                 ecx, dword ptr [ecx]
            //   83c101               | add                 ecx, 1
            //   81c1fc030000         | add                 ecx, 0x3fc

        $sequence_28 = { 8b4d24 894c247c dd85b0fbffff dd5c2474 }
            // n = 4, score = 100
            //   8b4d24               | mov                 ecx, dword ptr [ebp + 0x24]
            //   894c247c             | mov                 dword ptr [esp + 0x7c], ecx
            //   dd85b0fbffff         | fld                 qword ptr [ebp - 0x450]
            //   dd5c2474             | fstp                qword ptr [esp + 0x74]

        $sequence_29 = { 8b4d34 894c2470 8b4d64 894c246c }
            // n = 4, score = 100
            //   8b4d34               | mov                 ecx, dword ptr [ebp + 0x34]
            //   894c2470             | mov                 dword ptr [esp + 0x70], ecx
            //   8b4d64               | mov                 ecx, dword ptr [ebp + 0x64]
            //   894c246c             | mov                 dword ptr [esp + 0x6c], ecx

        $sequence_30 = { 8b4d28 898d30ffffff 8b958c000000 89952cffffff }
            // n = 4, score = 100
            //   8b4d28               | mov                 ecx, dword ptr [ebp + 0x28]
            //   898d30ffffff         | mov                 dword ptr [ebp - 0xd0], ecx
            //   8b958c000000         | mov                 edx, dword ptr [ebp + 0x8c]
            //   89952cffffff         | mov                 dword ptr [ebp - 0xd4], edx

        $sequence_31 = { 8b958cfeffff 2bc2 8bb5a0feffff 03f0 8a02 }
            // n = 5, score = 100
            //   8b958cfeffff         | mov                 edx, dword ptr [ebp - 0x174]
            //   2bc2                 | sub                 eax, edx
            //   8bb5a0feffff         | mov                 esi, dword ptr [ebp - 0x160]
            //   03f0                 | add                 esi, eax
            //   8a02                 | mov                 al, byte ptr [edx]

    condition:
        7 of them and filesize < 17138688
}