rule win_skipper_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2026-09-17"
        version = "1"
        description = "Detects win.skipper."
        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.skipper"
        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 = { 6a03 68???????? 68???????? 6a50 }
            // n = 4, score = 600
            //   6a03                 | lea                 ebp, [0xf005]
            //   68????????           |                     
            //   68????????           |                     
            //   6a50                 | inc                 ecx

        $sequence_1 = { ff15???????? 6a00 6a00 6a00 6a00 68???????? 68???????? }
            // n = 7, score = 500
            //   ff15????????         |                     
            //   6a00                 | push                0x104
            //   6a00                 | mov                 eax, dword ptr [ebp - 0x128]
            //   6a00                 | push                eax
            //   6a00                 | cmp                 eax, 0x100
            //   68????????           |                     
            //   68????????           |                     

        $sequence_2 = { e8???????? 6804010000 e8???????? 6804010000 8bf8 6a00 57 }
            // n = 7, score = 500
            //   e8????????           |                     
            //   6804010000           | jge                 0x17
            //   e8????????           |                     
            //   6804010000           | mov                 cl, byte ptr [eax + ebx + 0x11d]
            //   8bf8                 | mov                 byte ptr [eax + 0x23a5b0], cl
            //   6a00                 | inc                 eax
            //   57                   | jmp                 0xfffffff6

        $sequence_3 = { 6a00 6a00 6a00 50 ff15???????? 53 8bf0 }
            // n = 7, score = 400
            //   6a00                 | push                0
            //   6a00                 | push                edi
            //   6a00                 | push                edi
            //   50                   | push                8
            //   ff15????????         |                     
            //   53                   | jns                 0xa
            //   8bf0                 | dec                 ecx

        $sequence_4 = { 83c428 8d4601 90 8a0e }
            // n = 4, score = 400
            //   83c428               | add                 byte ptr [ebx], ah
            //   8d4601               | ror                 dword ptr [edx - 0x75f877fa], 1
            //   90                   | inc                 esi
            //   8a0e                 | add                 byte ptr [ebx + edx*2], al

        $sequence_5 = { b9???????? e8???????? 83c428 53 56 }
            // n = 5, score = 400
            //   b9????????           |                     
            //   e8????????           |                     
            //   83c428               | add                 byte ptr [ebx + edx*2], al
            //   53                   | and                 eax, dword ptr [eax]
            //   56                   | sub                 byte ptr [ebx + 0x23], dl

        $sequence_6 = { 46 8a01 888435fbfeffff 8811 81fe00010000 7cb1 8b750c }
            // n = 7, score = 400
            //   46                   | and                 eax, dword ptr [eax]
            //   8a01                 | sub                 byte ptr [ebx + 0x23], dl
            //   888435fbfeffff       | add                 byte ptr [ebx], ah
            //   8811                 | ror                 dword ptr [edx - 0x75f877fa], 1
            //   81fe00010000         | inc                 esi
            //   7cb1                 | add                 dword ptr [eax + 0x468a0147], ecx
            //   8b750c               | push                eax

        $sequence_7 = { 57 ff15???????? 6804010000 6a00 57 e8???????? 57 }
            // n = 7, score = 400
            //   57                   | mov                 dword ptr [ebp - 0x130], eax
            //   ff15????????         |                     
            //   6804010000           | mov                 dword ptr [ebp - 0x120], 0
            //   6a00                 | mov                 dword ptr [ebp - 0x124], ecx
            //   57                   | lea                 esi, [esi*8 + 0x23a070]
            //   e8????????           |                     
            //   57                   | cmp                 dword ptr [esi], ebx

        $sequence_8 = { 83c404 6a00 6a64 52 }
            // n = 4, score = 300
            //   83c404               | test                eax, eax
            //   6a00                 | je                  0x1c
            //   6a64                 | dec                 eax
            //   52                   | sub                 esp, 0x20

        $sequence_9 = { 8a95e4feffff 88940df0feffff ebd0 c785e8feffff00000000 c785e0feffff00000000 eb0f }
            // n = 6, score = 200
            //   8a95e4feffff         | add                 ecx, dword ptr [ebp - 0x124]
            //   88940df0feffff       | movsx               edx, byte ptr [ecx]
            //   ebd0                 | movzx               eax, byte ptr [ebp - 0x112]
            //   c785e8feffff00000000     | xor    edx, eax
            //   c785e0feffff00000000     | mov    ecx, dword ptr [ebp + 0x18]
            //   eb0f                 | movsx               edx, byte ptr [ecx]

        $sequence_10 = { 888deffeffff 0fb695e8feffff 8b85e0feffff 8a8c15f0feffff }
            // n = 4, score = 200
            //   888deffeffff         | xor                 eax, ebp
            //   0fb695e8feffff       | mov                 dword ptr [ebp - 0xc], eax
            //   8b85e0feffff         | mov                 dword ptr [ebp - 8], 0
            //   8a8c15f0feffff       | mov                 ecx, dword ptr [ebp + 0x10]

        $sequence_11 = { 408832 4181f900010000 7c9a 488bdd 85ed }
            // n = 5, score = 200
            //   408832               | mov                 al, byte ptr [ebp - 0x111]
            //   4181f900010000       | mov                 byte ptr [ebp + edx - 0x110], al
            //   7c9a                 | mov                 dword ptr [ebp - 0x124], 0
            //   488bdd               | jmp                 0x28
            //   85ed                 | mov                 byte ptr [ebp - 0x111], cl

        $sequence_12 = { 0fb695e8feffff 8a85effeffff 888415f0feffff e9???????? c785dcfeffff00000000 eb0f }
            // n = 6, score = 200
            //   0fb695e8feffff       | push                edx
            //   8a85effeffff         | push                eax
            //   888415f0feffff       | push                ebp
            //   e9????????           |                     
            //   c785dcfeffff00000000     | mov    ebp, esp
            //   eb0f                 | sub                 esp, 0x124

        $sequence_13 = { 55 8bec 81ec24010000 a1???????? 33c5 8945f4 c745f800000000 }
            // n = 7, score = 200
            //   55                   | push                0
            //   8bec                 | push                0x64
            //   81ec24010000         | push                edx
            //   a1????????           |                     
            //   33c5                 | push                eax
            //   8945f4               | add                 esp, 4
            //   c745f800000000       | push                0

        $sequence_14 = { 4c03c0 410fb6c2 450fb608 4803d0 0fb602 }
            // n = 5, score = 200
            //   4c03c0               | mov                 byte ptr [ebp + ecx - 0x110], dl
            //   410fb6c2             | jmp                 0xffffffd9
            //   450fb608             | mov                 dword ptr [ebp - 0x118], 0
            //   4803d0               | mov                 dword ptr [ebp - 0x120], 0
            //   0fb602               | jmp                 0x2e

        $sequence_15 = { 81bde0feffff00010000 0f8d84000000 8b8de0feffff 0fb68c0df0feffff }
            // n = 4, score = 200
            //   81bde0feffff00010000     | inc    esi
            //   0f8d84000000         | mov                 al, byte ptr [ecx]
            //   8b8de0feffff         | mov                 byte ptr [ebp + esi - 0x105], al
            //   0fb68c0df0feffff     | mov                 byte ptr [ecx], dl

        $sequence_16 = { 7d0d 41ffca 4181ca00ffffff 41ffc2 0fb6c1 4c8d0424 488d1424 }
            // n = 7, score = 200
            //   7d0d                 | movzx               eax, byte ptr [ebp - 8]
            //   41ffca               | mov                 cl, byte ptr [ebp + eax - 0x110]
            //   4181ca00ffffff       | mov                 byte ptr [ebp - 0x111], cl
            //   41ffc2               | movzx               edx, byte ptr [ebp - 4]
            //   0fb6c1               | movzx               eax, byte ptr [ebp - 8]
            //   4c8d0424             | mov                 cl, byte ptr [ebp + edx - 0x110]
            //   488d1424             | movzx               edx, byte ptr [ebp - 0x118]

        $sequence_17 = { 488d1424 448bd1 8bc1 0f1f840000000000 8802 ffc0 488d5201 }
            // n = 7, score = 200
            //   488d1424             | mov                 byte ptr [edx], dh
            //   448bd1               | inc                 ecx
            //   8bc1                 | cmp                 ecx, 0x100
            //   0f1f840000000000     | jl                  0xffffff9c
            //   8802                 | dec                 eax
            //   ffc0                 | mov                 ebx, ebp
            //   488d5201             | test                ebp, ebp

        $sequence_18 = { 8b4d10 038ddcfeffff 0fbe11 0fb685eefeffff 33d0 8b4d18 }
            // n = 6, score = 200
            //   8b4d10               | push                0x64
            //   038ddcfeffff         | add                 esp, 4
            //   0fbe11               | push                0
            //   0fb685eefeffff       | push                0x64
            //   33d0                 | push                edx
            //   8b4d18               | add                 esp, 4

        $sequence_19 = { 4833c4 4889842400010000 4c8b9c2440010000 33c9 }
            // n = 4, score = 200
            //   4833c4               | movzx               edx, byte ptr [ebp - 0x118]
            //   4889842400010000     | mov                 eax, dword ptr [ebp - 0x120]
            //   4c8b9c2440010000     | mov                 cl, byte ptr [ebp + edx - 0x110]
            //   33c9                 | mov                 dl, byte ptr [ebp - 0x11c]

        $sequence_20 = { 48897c2420 4156 4881ec10010000 488b05???????? 4833c4 }
            // n = 5, score = 200
            //   48897c2420           | dec                 eax
            //   4156                 | xor                 eax, esp
            //   4881ec10010000       | dec                 eax
            //   488b05????????       |                     
            //   4833c4               | mov                 dword ptr [esp + 0x100], eax

        $sequence_21 = { 7908 49 81c900ffffff 41 898de8feffff 8b85e0feffff 8a8c05f0feffff }
            // n = 7, score = 200
            //   7908                 | add                 esp, 0x28
            //   49                   | push                ebx
            //   81c900ffffff         | push                esi
            //   41                   | add                 esp, 0x28
            //   898de8feffff         | lea                 eax, [esi + 1]
            //   8b85e0feffff         | nop                 
            //   8a8c05f0feffff       | mov                 cl, byte ptr [esi]

        $sequence_22 = { 41ffc1 4803d0 48ffc3 0fb602 }
            // n = 4, score = 200
            //   41ffc1               | mov                 byte ptr [ebp + edx - 0x110], al
            //   4803d0               | movzx               ecx, byte ptr [ebp - 8]
            //   48ffc3               | movzx               edx, byte ptr [ebp + ecx - 0x110]
            //   0fb602               | movzx               eax, byte ptr [ebp - 4]

        $sequence_23 = { ffc0 488d5201 3d00010000 7cf1 448bc1 448bc9 488d1c24 }
            // n = 7, score = 200
            //   ffc0                 | movzx               ecx, byte ptr [ebp + eax - 0x110]
            //   488d5201             | jge                 0xf
            //   3d00010000           | inc                 ecx
            //   7cf1                 | dec                 edx
            //   448bc1               | inc                 ecx
            //   448bc9               | or                  edx, 0xffffff00
            //   488d1c24             | inc                 ecx

        $sequence_24 = { 8955fc 0fb645f8 8a8c05f0feffff 888deffeffff 0fb655fc 0fb645f8 8a8c15f0feffff }
            // n = 7, score = 200
            //   8955fc               | push                0
            //   0fb645f8             | push                0x64
            //   8a8c05f0feffff       | push                edx
            //   888deffeffff         | push                eax
            //   0fb655fc             | add                 esp, 4
            //   0fb645f8             | push                0
            //   8a8c15f0feffff       | push                0x64

        $sequence_25 = { 8810 33ff 8d5001 8b048d606d4100 47 4e 807d1300 }
            // n = 7, score = 100
            //   8810                 | push                0x104
            //   33ff                 | push                0x104
            //   8d5001               | mov                 edi, eax
            //   8b048d606d4100       | push                0
            //   47                   | push                edi
            //   4e                   | push                0x104
            //   807d1300             | push                0x104

        $sequence_26 = { ff95dcfeffff 8985ecfeffff 6800800000 6804010000 8b85d8feffff 50 }
            // n = 6, score = 100
            //   ff95dcfeffff         | inc                 ecx
            //   8985ecfeffff         | dec                 eax
            //   6800800000           | add                 edx, eax
            //   6804010000           | dec                 eax
            //   8b85d8feffff         | inc                 ebx
            //   50                   | movzx               eax, byte ptr [edx]

        $sequence_27 = { d85223 000453 2300 285323 0023 d18a0688078a 46 }
            // n = 7, score = 100
            //   d85223               | inc                 eax
            //   000453               | dec                 eax
            //   2300                 | lea                 edx, [edx + 1]
            //   285323               | dec                 eax
            //   0023                 | mov                 dword ptr [esp + 0x20], edi
            //   d18a0688078a         | inc                 ecx
            //   46                   | push                esi

        $sequence_28 = { 33f6 488d1de8a30000 8d7e24 837b0801 7522 4863c6 }
            // n = 6, score = 100
            //   33f6                 | mov                 ecx, edi
            //   488d1de8a30000       | je                  0x2c2
            //   8d7e24               | dec                 eax
            //   837b0801             | lea                 eax, [0xac9b]
            //   7522                 | dec                 edx
            //   4863c6               | mov                 eax, dword ptr [eax + ebp*8]

        $sequence_29 = { 68???????? ff15???????? 8b3d???????? 85c0 0f84e4000000 6a39 }
            // n = 6, score = 100
            //   68????????           |                     
            //   ff15????????         |                     
            //   8b3d????????         |                     
            //   85c0                 | push                0
            //   0f84e4000000         | push                0
            //   6a39                 | push                3

        $sequence_30 = { 8d8ddcfeffff 8d5101 8a01 41 }
            // n = 4, score = 100
            //   8d8ddcfeffff         | mov                 edi, eax
            //   8d5101               | push                0
            //   8a01                 | push                0x104
            //   41                   | push                0x104

        $sequence_31 = { 488d05c3910000 483bc8 7405 e8???????? bf0d000000 8bcf }
            // n = 6, score = 100
            //   488d05c3910000       | mov                 ecx, 3
            //   483bc8               | dec                 eax
            //   7405                 | mov                 eax, ecx
            //   e8????????           |                     
            //   bf0d000000           | dec                 ecx
            //   8bcf                 | sub                 eax, esi

        $sequence_32 = { 0f84bc020000 488d059bac0000 4a8b04e8 41f644040880 0f84a5020000 }
            // n = 5, score = 100
            //   0f84bc020000         | dec                 eax
            //   488d059bac0000       | sar                 eax, 1
            //   4a8b04e8             | dec                 eax
            //   41f644040880         | lea                 eax, [0x91c3]
            //   0f84a5020000         | dec                 eax

        $sequence_33 = { c745e4a06c4100 a1???????? 33db 43 895de0 }
            // n = 5, score = 100
            //   c745e4a06c4100       | mov                 edi, eax
            //   a1????????           |                     
            //   33db                 | movzx               eax, byte ptr [eax + edi]
            //   43                   | movzx               ecx, dl
            //   895de0               | add                 ebx, eax

        $sequence_34 = { 8b45e0 8b0485606d4100 f644180401 7428 57 e8???????? }
            // n = 6, score = 100
            //   8b45e0               | add                 ebx, ecx
            //   8b0485606d4100       | and                 ebx, 0x800000ff
            //   f644180401           | push                0
            //   7428                 | push                3
            //   57                   | push                0x50
            //   e8????????           |                     

        $sequence_35 = { 3d00010000 7d10 8a8c181d010000 8888b0a52300 40 ebe6 ff35???????? }
            // n = 7, score = 100
            //   3d00010000           | inc                 eax
            //   7d10                 | dec                 eax
            //   8a8c181d010000       | lea                 edx, [edx + 1]
            //   8888b0a52300         | cmp                 eax, 0x100
            //   40                   | jl                  0xfffffff8
            //   ebe6                 | inc                 esp
            //   ff35????????         |                     

        $sequence_36 = { 59 8945e4 8b7508 c7465cd8812300 }
            // n = 4, score = 100
            //   59                   | mov                 eax, ecx
            //   8945e4               | inc                 esp
            //   8b7508               | mov                 ecx, ecx
            //   c7465cd8812300       | dec                 eax

        $sequence_37 = { e8???????? 488d053bae0000 488903 488bc3 }
            // n = 4, score = 100
            //   e8????????           |                     
            //   488d053bae0000       | cmp                 ecx, eax
            //   488903               | je                  7
            //   488bc3               | mov                 edi, 0xd

        $sequence_38 = { 488d4dbc 4c8d0509980000 488d0c41 41b903000000 488bc1 492bc6 48d1f8 }
            // n = 7, score = 100
            //   488d4dbc             | dec                 eax
            //   4c8d0509980000       | lea                 ecx, [ebp - 0x44]
            //   488d0c41             | dec                 esp
            //   41b903000000         | lea                 eax, [0x9809]
            //   488bc1               | dec                 eax
            //   492bc6               | lea                 ecx, [ecx + eax*2]
            //   48d1f8               | inc                 ecx

        $sequence_39 = { 50 ff15???????? 8985d0feffff c785e0feffff00000000 8b0d???????? 898ddcfeffff }
            // n = 6, score = 100
            //   50                   | cmp                 eax, 0x100
            //   ff15????????         |                     
            //   8985d0feffff         | jl                  0xfffffff8
            //   c785e0feffff00000000     | inc    ecx
            //   8b0d????????         |                     
            //   898ddcfeffff         | movzx               eax, al

        $sequence_40 = { 0f8463010000 488d2d05f00000 41bf14030000 4c8d0518980000 }
            // n = 4, score = 100
            //   0f8463010000         | inc                 ecx
            //   488d2d05f00000       | test                byte ptr [esp + eax + 8], 0x80
            //   41bf14030000         | je                  0x2b5
            //   4c8d0518980000       | dec                 eax

        $sequence_41 = { 7d10 668b4c4310 66890c4590b22300 40 }
            // n = 4, score = 100
            //   7d10                 | mov                 edx, ecx
            //   668b4c4310           | mov                 eax, ecx
            //   66890c4590b22300     | nop                 dword ptr [eax + eax]
            //   40                   | mov                 byte ptr [edx], al

        $sequence_42 = { 8d34f570a02300 391e 7404 8bc7 eb6e }
            // n = 5, score = 100
            //   8d34f570a02300       | dec                 eax
            //   391e                 | lea                 edx, [esp]
            //   7404                 | inc                 ecx
            //   8bc7                 | inc                 ecx
            //   eb6e                 | dec                 eax

        $sequence_43 = { 8b95e4feffff 52 ff15???????? 8985d8feffff 6a00 6804010000 8d85f0feffff }
            // n = 7, score = 100
            //   8b95e4feffff         | lea                 ebx, [esp]
            //   52                   | dec                 esp
            //   ff15????????         |                     
            //   8985d8feffff         | lea                 eax, [esp]
            //   6a00                 | dec                 eax
            //   6804010000           | lea                 edx, [esp]
            //   8d85f0feffff         | dec                 esp

        $sequence_44 = { 72ed 48833d????????00 741f 488d0d4a140100 e8???????? 85c0 740f }
            // n = 7, score = 100
            //   72ed                 | lea                 eax, [0xae3b]
            //   48833d????????00     |                     
            //   741f                 | dec                 eax
            //   488d0d4a140100       | mov                 dword ptr [ebx], eax
            //   e8????????           |                     
            //   85c0                 | dec                 eax
            //   740f                 | mov                 eax, ebx

        $sequence_45 = { 4883ec20 4883610800 488d05529c0000 c6411000 }
            // n = 4, score = 100
            //   4883ec20             | xor                 esi, esi
            //   4883610800           | dec                 eax
            //   488d05529c0000       | lea                 ebx, [0xa3e8]
            //   c6411000             | lea                 edi, [esi + 0x24]

    condition:
        7 of them and filesize < 262144
}