rule win_kimsuky_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2026-09-17"
        version = "1"
        description = "Detects win.kimsuky."
        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.kimsuky"
        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???????? 83c430 8d95f0fcffff b9???????? e8???????? }
            // n = 5, score = 400
            //   e8????????           |                     
            //   83c430               | add                 esp, 0x30
            //   8d95f0fcffff         | lea                 edx, [ebp - 0x310]
            //   b9????????           |                     
            //   e8????????           |                     

        $sequence_1 = { ffd6 8bd8 85db 7510 }
            // n = 4, score = 400
            //   ffd6                 | call                esi
            //   8bd8                 | mov                 ebx, eax
            //   85db                 | test                ebx, ebx
            //   7510                 | jne                 0x12

        $sequence_2 = { 53 e8???????? 83c404 8bf0 6a00 }
            // n = 5, score = 400
            //   53                   | push                ebx
            //   e8????????           |                     
            //   83c404               | add                 esp, 4
            //   8bf0                 | mov                 esi, eax
            //   6a00                 | push                0

        $sequence_3 = { 8d85f8feffff 6a00 50 ff15???????? 8d85ecfbffff 50 }
            // n = 6, score = 400
            //   8d85f8feffff         | lea                 eax, [ebp - 0x108]
            //   6a00                 | push                0
            //   50                   | push                eax
            //   ff15????????         |                     
            //   8d85ecfbffff         | lea                 eax, [ebp - 0x414]
            //   50                   | push                eax

        $sequence_4 = { ff15???????? 85c0 7516 ff15???????? 8bd8 e8???????? }
            // n = 6, score = 400
            //   ff15????????         |                     
            //   85c0                 | test                eax, eax
            //   7516                 | jne                 0x18
            //   ff15????????         |                     
            //   8bd8                 | mov                 ebx, eax
            //   e8????????           |                     

        $sequence_5 = { 8bca 83e103 f3a4 8d8de4fbffff 49 }
            // n = 5, score = 400
            //   8bca                 | mov                 ecx, edx
            //   83e103               | and                 ecx, 3
            //   f3a4                 | rep movsb           byte ptr es:[edi], byte ptr [esi]
            //   8d8de4fbffff         | lea                 ecx, [ebp - 0x41c]
            //   49                   | dec                 ecx

        $sequence_6 = { 8945fc 833d????????00 7413 b801000000 8b4dfc }
            // n = 5, score = 400
            //   8945fc               | mov                 dword ptr [ebp - 4], eax
            //   833d????????00       |                     
            //   7413                 | je                  0x15
            //   b801000000           | mov                 eax, 1
            //   8b4dfc               | mov                 ecx, dword ptr [ebp - 4]

        $sequence_7 = { 7423 6a00 8d85f0feffff 50 68???????? ff15???????? }
            // n = 6, score = 400
            //   7423                 | je                  0x25
            //   6a00                 | push                0
            //   8d85f0feffff         | lea                 eax, [ebp - 0x110]
            //   50                   | push                eax
            //   68????????           |                     
            //   ff15????????         |                     

        $sequence_8 = { 8d8de8fdffff e8???????? 8b4dfc 33cd e8???????? }
            // n = 5, score = 400
            //   8d8de8fdffff         | lea                 ecx, [ebp - 0x218]
            //   e8????????           |                     
            //   8b4dfc               | mov                 ecx, dword ptr [ebp - 4]
            //   33cd                 | xor                 ecx, ebp
            //   e8????????           |                     

        $sequence_9 = { 4d03fa 664403df 4983c004 4983c102 664585db 75af 4c897c2468 }
            // n = 7, score = 300
            //   4d03fa               | inc                 ecx
            //   664403df             | mov                 ecx, dword ptr [edx]
            //   4983c004             | dec                 ecx
            //   4983c102             | add                 ecx, ecx
            //   664585db             | inc                 ebp
            //   75af                 | xor                 eax, eax
            //   4c897c2468           | dec                 eax

        $sequence_10 = { 4883c514 85c0 0f857affffff 4c8b7c2460 4c8b6c2420 4c8b642428 }
            // n = 6, score = 300
            //   4883c514             | mov                 dword ptr [esp + 0x30], edi
            //   85c0                 | dec                 eax
            //   0f857affffff         | mov                 dword ptr [esp + 0x60], ebp
            //   4c8b7c2460           | dec                 eax
            //   4c8b6c2420           | mov                 ecx, dword ptr [eax + 0x18]
            //   4c8b642428           | inc                 ecx

        $sequence_11 = { 48897c2430 48896c2460 488b4818 41bb01000000 4c8b7120 }
            // n = 5, score = 300
            //   48897c2430           | dec                 eax
            //   48896c2460           | mov                 dword ptr [esp + 0x30], edi
            //   488b4818             | dec                 eax
            //   41bb01000000         | mov                 dword ptr [esp + 0x60], ebp
            //   4c8b7120             | dec                 eax

        $sequence_12 = { 0f8569ffffff 418b5f28 4533c0 33d2 4883c9ff 4903de ff542468 }
            // n = 7, score = 300
            //   0f8569ffffff         | test                esi, esi
            //   418b5f28             | jne                 0xfffffe46
            //   4533c0               | dec                 eax
            //   33d2                 | mov                 ebp, dword ptr [esp + 0x60]
            //   4883c9ff             | dec                 esp
            //   4903de               | arpl                word ptr [ebp + 0x3c], di
            //   ff542468             | nop                 word ptr [eax + eax]

        $sequence_13 = { 4c8b642428 488b7c2430 488b742438 488b6c2470 4d8bc6 4d2b4730 4183bfb400000000 }
            // n = 7, score = 300
            //   4c8b642428           | je                  0x1f2
            //   488b7c2430           | jne                 0xffffff6f
            //   488b742438           | inc                 ecx
            //   488b6c2470           | mov                 ebx, dword ptr [edi + 0x28]
            //   4d8bc6               | inc                 ebp
            //   4d2b4730             | xor                 eax, eax
            //   4183bfb400000000     | xor                 edx, edx

        $sequence_14 = { 4d03d9 666666660f1f840000000000 418b0a 4903c9 4533c0 }
            // n = 5, score = 300
            //   4d03d9               | dec                 eax
            //   666666660f1f840000000000     | mov    eax, dword ptr [0x60]
            //   418b0a               | dec                 eax
            //   4903c9               | mov                 dword ptr [esp + 0x30], edi
            //   4533c0               | dec                 eax

        $sequence_15 = { 4d85f6 0f8540feffff 488b6c2460 4c637d3c }
            // n = 4, score = 300
            //   4d85f6               | mov                 dword ptr [esp + 0x60], ebp
            //   0f8540feffff         | dec                 eax
            //   488b6c2460           | mov                 ecx, dword ptr [eax + 0x18]
            //   4c637d3c             | inc                 ecx

        $sequence_16 = { 8b442468 6683f809 7508 83f809 }
            // n = 4, score = 200
            //   8b442468             | dec                 esp
            //   6683f809             | mov                 ebp, dword ptr [esp + 0x20]
            //   7508                 | dec                 esp
            //   83f809               | mov                 esp, dword ptr [esp + 0x28]

        $sequence_17 = { 8bd7 3bd8 0f94c2 85d2 7419 }
            // n = 5, score = 200
            //   8bd7                 | add                 ecx, 2
            //   3bd8                 | inc                 bp
            //   0f94c2               | test                ebx, ebx
            //   85d2                 | jne                 0xffffffbd
            //   7419                 | dec                 esp

        $sequence_18 = { 894d90 8bc1 81fb00000001 0f97c0 }
            // n = 4, score = 200
            //   894d90               | je                  0x1fd
            //   8bc1                 | jne                 0xffffff6f
            //   81fb00000001         | inc                 ecx
            //   0f97c0               | mov                 ebx, dword ptr [edi + 0x28]

        $sequence_19 = { 85c0 0f94c1 85c9 0f8494020000 89bda0000000 897d30 }
            // n = 6, score = 200
            //   85c0                 | dec                 eax
            //   0f94c1               | mov                 ebp, dword ptr [esp + 0x60]
            //   85c9                 | dec                 esp
            //   0f8494020000         | arpl                word ptr [ebp + 0x3c], di
            //   89bda0000000         | nop                 word ptr [eax + eax]
            //   897d30               | inc                 ecx

        $sequence_20 = { 83f809 8d7340 7405 be20000000 c68424a000000000 33d2 }
            // n = 6, score = 200
            //   83f809               | dec                 eax
            //   8d7340               | mov                 dword ptr [esp + 0x60], ebp
            //   7405                 | dec                 eax
            //   be20000000           | mov                 ecx, dword ptr [eax + 0x18]
            //   c68424a000000000     | inc                 ecx
            //   33d2                 | mov                 ebx, 1

        $sequence_21 = { 488d8a38000000 e9???????? 488d8a28010000 e9???????? }
            // n = 4, score = 200
            //   488d8a38000000       | mov                 ebx, eax
            //   e9????????           |                     
            //   488d8a28010000       | imul                ebx, eax
            //   e9????????           |                     

        $sequence_22 = { 8b7590 660f1f440000 837df000 0f841b020000 }
            // n = 4, score = 200
            //   8b7590               | inc                 esi
            //   660f1f440000         | mov                 ebx, dword ptr [edi + ecx + 0x24]
            //   837df000             | dec                 ebp
            //   0f841b020000         | add                 edx, ecx

        $sequence_23 = { 898521010000 66898525010000 888527010000 8b742450 }
            // n = 4, score = 200
            //   898521010000         | dec                 ecx
            //   66898525010000       | add                 ecx, 2
            //   888527010000         | inc                 bp
            //   8b742450             | test                ebx, ebx

        $sequence_24 = { 4c89642430 c744242880000000 c744242002000000 4533c9 4533c0 }
            // n = 5, score = 200
            //   4c89642430           | mov                 dword ptr [ebp + 0xa0], edi
            //   c744242880000000     | mov                 dword ptr [ebp + 0x30], edi
            //   c744242002000000     | test                eax, eax
            //   4533c9               | sete                cl
            //   4533c0               | test                ecx, ecx

        $sequence_25 = { 48c1e105 4c03c1 488d542470 488d4dc0 }
            // n = 4, score = 100
            //   48c1e105             | lea                 esi, [ebx + 0x40]
            //   4c03c1               | je                  7
            //   488d542470           | mov                 eax, dword ptr [esp + 0x68]
            //   488d4dc0             | cmp                 ax, 9

        $sequence_26 = { 48bfffffffffffffff7f 483bf7 0f87ea000000 488bce 4c89742468 }
            // n = 5, score = 100
            //   48bfffffffffffffff7f     | test    ecx, ecx
            //   483bf7               | je                  0x29f
            //   0f87ea000000         | mov                 ecx, edi
            //   488bce               | test                eax, eax
            //   4c89742468           | sete                cl

        $sequence_27 = { 48c1e105 4c03c1 488d542438 488d8dc0000000 }
            // n = 4, score = 100
            //   48c1e105             | mov                 dword ptr [ebp + 0xa0], edi
            //   4c03c1               | mov                 dword ptr [ebp + 0x30], edi
            //   488d542438           | mov                 eax, dword ptr [esp + 0x68]
            //   488d8dc0000000       | cmp                 ax, 9

        $sequence_28 = { 48c1e302 4c8bc3 8d040e 488d8d94080000 898590080000 e8???????? 488d0df984fcff }
            // n = 7, score = 100
            //   48c1e302             | jne                 0x1a
            //   4c8bc3               | mov                 ebx, eax
            //   8d040e               | imul                ebx, eax
            //   488d8d94080000       | jne                 0x18
            //   898590080000         | mov                 ebx, eax
            //   e8????????           |                     
            //   488d0df984fcff       | imul                ebx, eax

        $sequence_29 = { 48c1e302 4c8bc3 8d040e 488d8d24030000 898520030000 e8???????? 488d0d3354fbff }
            // n = 7, score = 100
            //   48c1e302             | je                  0x238
            //   4c8bc3               | mov                 esi, dword ptr [ebp - 0x70]
            //   8d040e               | nop                 word ptr [eax + eax]
            //   488d8d24030000       | mov                 ebx, eax
            //   898520030000         | imul                ebx, eax
            //   e8????????           |                     
            //   488d0d3354fbff       | test                eax, eax

        $sequence_30 = { 48b9ffffffffffffff7f 488bc1 492bc6 4883f814 0f82520d0000 4c8d7d48 }
            // n = 6, score = 100
            //   48b9ffffffffffffff7f     | je    7
            //   488bc1               | mov                 esi, 0x20
            //   492bc6               | mov                 dword ptr [ebp - 0x70], ecx
            //   4883f814             | mov                 eax, ecx
            //   0f82520d0000         | cmp                 ebx, 0x1000000
            //   4c8d7d48             | seta                al

    condition:
        7 of them and filesize < 1021952
}