rule win_smokeloader_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2026-09-17"
        version = "1"
        description = "Detects win.smokeloader."
        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.smokeloader"
        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 = { ff15???????? 8d45f0 50 8d45e8 50 8d45e0 50 }
            // n = 7, score = 1200
            //   ff15????????         |                     
            //   8d45f0               | lea                 eax, [ebp - 0x10]
            //   50                   | push                eax
            //   8d45e8               | lea                 eax, [ebp - 0x18]
            //   50                   | push                eax
            //   8d45e0               | lea                 eax, [ebp - 0x20]
            //   50                   | push                eax

        $sequence_1 = { 57 ff15???????? 6a00 6800000002 6a03 }
            // n = 5, score = 1000
            //   57                   | push                edi
            //   ff15????????         |                     
            //   6a00                 | push                0
            //   6800000002           | push                0x2000000
            //   6a03                 | push                3

        $sequence_2 = { 50 8d45e0 50 56 ff15???????? 56 ff15???????? }
            // n = 7, score = 1000
            //   50                   | push                eax
            //   8d45e0               | lea                 eax, [ebp - 0x20]
            //   50                   | push                eax
            //   56                   | push                esi
            //   ff15????????         |                     
            //   56                   | push                esi
            //   ff15????????         |                     

        $sequence_3 = { ff15???????? 8bf0 8d45dc 50 6a00 }
            // n = 5, score = 1000
            //   ff15????????         |                     
            //   8bf0                 | mov                 esi, eax
            //   8d45dc               | lea                 eax, [ebp - 0x24]
            //   50                   | push                eax
            //   6a00                 | push                0

        $sequence_4 = { 50 6a00 53 ff15???????? 8d45f0 }
            // n = 5, score = 1000
            //   50                   | push                eax
            //   6a00                 | push                0
            //   53                   | push                ebx
            //   ff15????????         |                     
            //   8d45f0               | lea                 eax, [ebp - 0x10]

        $sequence_5 = { 50 56 681f000f00 57 }
            // n = 4, score = 900
            //   50                   | lea                 eax, [ebp - 0x14]
            //   56                   | push                eax
            //   681f000f00           | mov                 esi, eax
            //   57                   | lea                 eax, [ebp - 4]

        $sequence_6 = { 50 53 53 6803800000 ff75f4 }
            // n = 5, score = 900
            //   50                   | push                3
            //   53                   | mov                 esi, eax
            //   53                   | lea                 eax, [ebp - 0x10]
            //   6803800000           | push                eax
            //   ff75f4               | lea                 eax, [ebp - 0x18]

        $sequence_7 = { 0fb64405dc 50 8d45ec 50 }
            // n = 4, score = 900
            //   0fb64405dc           | movzx               eax, byte ptr [ebp + eax - 0x24]
            //   50                   | push                eax
            //   8d45ec               | lea                 eax, [ebp - 0x14]
            //   50                   | push                eax

        $sequence_8 = { 56 8d45fc 50 57 57 6a19 ff75f8 }
            // n = 7, score = 900
            //   56                   | push                eax
            //   8d45fc               | push                ebx
            //   50                   | push                ebx
            //   57                   | push                0x8003
            //   57                   | push                dword ptr [ebp - 0xc]
            //   6a19                 | movzx               eax, byte ptr [ebp + eax - 0x24]
            //   ff75f8               | push                eax

        $sequence_9 = { ff15???????? bf90010000 8bcf e8???????? }
            // n = 4, score = 900
            //   ff15????????         |                     
            //   bf90010000           | mov                 edi, 0x190
            //   8bcf                 | mov                 ecx, edi
            //   e8????????           |                     

        $sequence_10 = { e8???????? 8bf0 8d45fc 50 ff75fc 56 }
            // n = 6, score = 900
            //   e8????????           |                     
            //   8bf0                 | mov                 esi, eax
            //   8d45fc               | lea                 eax, [ebp - 4]
            //   50                   | push                eax
            //   ff75fc               | push                dword ptr [ebp - 4]
            //   56                   | push                esi

        $sequence_11 = { 740a 83c104 83f920 72f0 }
            // n = 4, score = 900
            //   740a                 | push                esi
            //   83c104               | push                0x19
            //   83f920               | push                esi
            //   72f0                 | lea                 eax, [ebp - 4]

        $sequence_12 = { 668ce8 6685c0 7406 fe05???????? }
            // n = 4, score = 800
            //   668ce8               | push                edi
            //   6685c0               | push                0
            //   7406                 | push                0x2000000
            //   fe05????????         |                     

        $sequence_13 = { 33c0 e9???????? e8???????? b904010000 }
            // n = 4, score = 800
            //   33c0                 | xor                 eax, eax
            //   e9????????           |                     
            //   e8????????           |                     
            //   b904010000           | mov                 ecx, 0x104

        $sequence_14 = { 8b07 03c3 50 ff15???????? }
            // n = 4, score = 700
            //   8b07                 | push                3
            //   03c3                 | push                0
            //   50                   | push                3
            //   ff15????????         |                     

        $sequence_15 = { 56 ff15???????? 50 56 6a00 ff15???????? }
            // n = 6, score = 700
            //   56                   | push                eax
            //   ff15????????         |                     
            //   50                   | lea                 eax, [ebp - 0x20]
            //   56                   | push                eax
            //   6a00                 | push                esi
            //   ff15????????         |                     

        $sequence_16 = { 81e1ff000000 8a440c18 30042b 43 3b9c241c010000 72c0 5f }
            // n = 7, score = 700
            //   81e1ff000000         | push                eax
            //   8a440c18             | push                ebx
            //   30042b               | push                ebx
            //   43                   | push                0x8003
            //   3b9c241c010000       | push                dword ptr [ebp - 0xc]
            //   72c0                 | push                ebx
            //   5f                   | push                ebx

        $sequence_17 = { 88543418 0fb64c3c18 0fb6c2 03c8 81e1ff000000 8a440c18 }
            // n = 6, score = 700
            //   88543418             | push                0x8003
            //   0fb64c3c18           | push                dword ptr [ebp - 0xc]
            //   0fb6c2               | push                esi
            //   03c8                 | lea                 eax, [ebp - 4]
            //   81e1ff000000         | push                eax
            //   8a440c18             | push                edi

        $sequence_18 = { 50 53 e8???????? 8d8decfdffff 8d95f0fdffff c70200000000 }
            // n = 6, score = 500
            //   50                   | push                eax
            //   53                   | push                ebx
            //   e8????????           |                     
            //   8d8decfdffff         | lea                 ecx, [ebp - 0x214]
            //   8d95f0fdffff         | lea                 edx, [ebp - 0x210]
            //   c70200000000         | mov                 dword ptr [edx], 0

        $sequence_19 = { e8???????? 2500300038 005800 2500300038 }
            // n = 4, score = 500
            //   e8????????           |                     
            //   2500300038           | and                 eax, 0x38003000
            //   005800               | add                 byte ptr [eax], bl
            //   2500300038           | and                 eax, 0x38003000

        $sequence_20 = { 50 50 50 51 50 50 56 }
            // n = 7, score = 500
            //   50                   | push                eax
            //   50                   | push                eax
            //   50                   | push                eax
            //   51                   | push                ecx
            //   50                   | push                eax
            //   50                   | push                eax
            //   56                   | push                esi

        $sequence_21 = { 31c0 66894603 8d8de8fdffff 50 50 50 }
            // n = 6, score = 500
            //   31c0                 | xor                 eax, eax
            //   66894603             | mov                 word ptr [esi + 3], ax
            //   8d8de8fdffff         | lea                 ecx, [ebp - 0x218]
            //   50                   | push                eax
            //   50                   | push                eax
            //   50                   | push                eax

        $sequence_22 = { 8d95f0fdffff c70200000000 6800800000 52 51 6aff }
            // n = 6, score = 500
            //   8d95f0fdffff         | lea                 edx, [ebp - 0x210]
            //   c70200000000         | mov                 dword ptr [edx], 0
            //   6800800000           | push                0x8000
            //   52                   | push                edx
            //   51                   | push                ecx
            //   6aff                 | push                -1

        $sequence_23 = { 8b4514 898608020000 56 6aff }
            // n = 4, score = 500
            //   8b4514               | mov                 eax, dword ptr [ebp + 0x14]
            //   898608020000         | mov                 dword ptr [esi + 0x208], eax
            //   56                   | push                esi
            //   6aff                 | push                -1

        $sequence_24 = { 8db5f8fdffff c60653 56 6a00 }
            // n = 4, score = 500
            //   8db5f8fdffff         | lea                 esi, [ebp - 0x208]
            //   c60653               | mov                 byte ptr [esi], 0x53
            //   56                   | push                esi
            //   6a00                 | push                0

        $sequence_25 = { 8b750c 8b7d10 50 57 }
            // n = 4, score = 500
            //   8b750c               | mov                 esi, dword ptr [ebp + 0xc]
            //   8b7d10               | mov                 edi, dword ptr [ebp + 0x10]
            //   50                   | push                eax
            //   57                   | push                edi

        $sequence_26 = { 55 89e5 81ec5c060000 53 56 }
            // n = 5, score = 400
            //   55                   | mov                 ecx, dword ptr [ebp - 8]
            //   89e5                 | imul                ecx, dword ptr [ebp - 8]
            //   81ec5c060000         | mov                 eax, dword ptr [ebp + 0x10]
            //   53                   | mov                 dword ptr [ecx + 4], edx
            //   56                   | push                0x9d35f923

        $sequence_27 = { 60 89c6 89cf fc }
            // n = 4, score = 400
            //   60                   | mov                 esi, eax
            //   89c6                 | mov                 edi, ecx
            //   89cf                 | cld                 
            //   fc                   | mov                 dl, 0x80

        $sequence_28 = { 89cf fc b280 31db a4 }
            // n = 5, score = 400
            //   89cf                 | jne                 9
            //   fc                   | xor                 eax, eax
            //   b280                 | mov                 ecx, 0x104
            //   31db                 | dec                 ebp
            //   a4                   | mov                 eax, ebp

        $sequence_29 = { fc 5f 5e 5b }
            // n = 4, score = 400
            //   fc                   | fsub                qword ptr [edx]
            //   5f                   | and                 al, 0x5d
            //   5e                   | pop                 ebp
            //   5b                   | sub                 dword ptr [ebp + 0x38], ebx

        $sequence_30 = { 30d0 aa e2f3 7505 }
            // n = 4, score = 400
            //   30d0                 | add                 ecx, 1
            //   aa                   | mov                 dword ptr [ebp - 0x74], ecx
            //   e2f3                 | mov                 edx, dword ptr [ebp - 4]
            //   7505                 | push                ebp

        $sequence_31 = { 488b0d???????? 488d5603 4803d3 ff15???????? }
            // n = 4, score = 300
            //   488b0d????????       |                     
            //   488d5603             | dec                 eax
            //   4803d3               | lea                 edx, [esi + 3]
            //   ff15????????         |                     

        $sequence_32 = { 8d3c8c 8b37 4c 01c6 }
            // n = 4, score = 300
            //   8d3c8c               | push                esi
            //   8b37                 | push                ebp
            //   4c                   | mov                 ebp, esp
            //   01c6                 | sub                 esp, 0x65c

        $sequence_33 = { ffc9 49 8d3c8c 8b37 }
            // n = 4, score = 300
            //   ffc9                 | lea                 edi, [esp + ecx*4]
            //   49                   | inc                 ecx
            //   8d3c8c               | mov                 edi, dword ptr [ebx + 0x24]
            //   8b37                 | dec                 esp

        $sequence_34 = { 01c7 668b0c4f 41 8b7b1c 4c 01c7 8b048f }
            // n = 7, score = 300
            //   01c7                 | mov                 ebp, esp
            //   668b0c4f             | sub                 esp, 0x65c
            //   41                   | push                ebx
            //   8b7b1c               | push                esi
            //   4c                   | mov                 ebp, esp
            //   01c7                 | sub                 esp, 0x65c
            //   8b048f               | push                ebx

        $sequence_35 = { 8b6320 4d 01c4 ffc9 49 }
            // n = 5, score = 300
            //   8b6320               | mov                 eax, dword ptr [edi + ecx*4]
            //   4d                   | lea                 edi, [esp + ecx*4]
            //   01c4                 | mov                 esi, dword ptr [edi]
            //   ffc9                 | dec                 esp
            //   49                   | add                 esi, eax

        $sequence_36 = { 55 89e5 81ec54040000 53 }
            // n = 4, score = 300
            //   55                   | mov                 edi, dword ptr [ebp + 0x10]
            //   89e5                 | push                eax
            //   81ec54040000         | push                edi
            //   53                   | mov                 esi, eax

        $sequence_37 = { 488bd8 4584ff 7411 41b101 4d8bc5 }
            // n = 5, score = 300
            //   488bd8               | mov                 edx, 0x2712
            //   4584ff               | dec                 eax
            //   7411                 | mov                 dword ptr [esp + 0x28], eax
            //   41b101               | dec                 eax
            //   4d8bc5               | and                 dword ptr [esp + 0x20], 0

        $sequence_38 = { 89d0 c1e205 01c2 31c0 ac }
            // n = 5, score = 300
            //   89d0                 | push                ebx
            //   c1e205               | xor                 al, dl
            //   01c2                 | stosb               byte ptr es:[edi], al
            //   31c0                 | loop                0xfffffff5
            //   ac                   | jne                 9

        $sequence_39 = { ba12270000 4889442428 488364242000 498bcf }
            // n = 4, score = 300
            //   ba12270000           | dec                 eax
            //   4889442428           | mov                 edx, edi
            //   488364242000         | dec                 eax
            //   498bcf               | mov                 ecx, ebx

        $sequence_40 = { c745e438582530 c745e838580000 ff15???????? 488bd7 488bcb e8???????? }
            // n = 6, score = 300
            //   c745e438582530       | dec                 eax
            //   c745e838580000       | add                 edx, ebx
            //   ff15????????         |                     
            //   488bd7               | mov                 dword ptr [ebp - 0x1c], 0x30255838
            //   488bcb               | mov                 dword ptr [ebp - 0x18], 0x5838
            //   e8????????           |                     

        $sequence_41 = { 41 8b4b18 45 8b6320 4d }
            // n = 5, score = 300
            //   41                   | dec                 ecx
            //   8b4b18               | inc                 ecx
            //   45                   | mov                 edi, dword ptr [ebx + 0x24]
            //   8b6320               | dec                 esp
            //   4d                   | add                 edi, eax

        $sequence_42 = { 4c8d442448 4883c9ff 8d5708 897c2440 }
            // n = 4, score = 300
            //   4c8d442448           | dec                 ecx
            //   4883c9ff             | mov                 ecx, edi
            //   8d5708               | dec                 eax
            //   897c2440             | mov                 ebx, eax

        $sequence_43 = { 8bec 81ec90000000 e8???????? 8945a0 e8???????? 8945e4 68706586b1 }
            // n = 7, score = 200
            //   8bec                 | push                0x906a06b0
            //   81ec90000000         | mov                 eax, dword ptr [ebp - 0x1c]
            //   e8????????           |                     
            //   8945a0               | push                eax
            //   e8????????           |                     
            //   8945e4               | mov                 dword ptr [ebp - 0x50], eax
            //   68706586b1           | mov                 ecx, dword ptr [ebp - 0x60]

        $sequence_44 = { 895104 6823f9359d 8b8578ffffff 50 e8???????? }
            // n = 5, score = 200
            //   895104               | mov                 ebp, esp
            //   6823f9359d           | sub                 esp, 0x90
            //   8b8578ffffff         | mov                 dword ptr [ebp - 0x60], eax
            //   50                   | mov                 dword ptr [ebp - 0x1c], eax
            //   e8????????           |                     

        $sequence_45 = { 33d2 f7f1 8945f8 8b4df8 0faf4df8 8b4510 }
            // n = 6, score = 200
            //   33d2                 | mov                 ecx, dword ptr [ebp - 0x88]
            //   f7f1                 | sub                 eax, 0x34bf10
            //   8945f8               | mov                 ecx, dword ptr [ebp + 8]
            //   8b4df8               | shl                 ecx, 3
            //   0faf4df8             | xor                 edx, edx
            //   8b4510               | div                 ecx

        $sequence_46 = { 89481c 8b9578ffffff 8b45b4 894220 eb10 8b8d78ffffff }
            // n = 6, score = 200
            //   89481c               | push                0
            //   8b9578ffffff         | push                ebx
            //   8b45b4               | lea                 eax, [ebp - 0x10]
            //   894220               | push                eax
            //   eb10                 | mov                 edi, 0x190
            //   8b8d78ffffff         | mov                 ecx, edi

        $sequence_47 = { 2d10bf3400 8b4d08 c1e103 33d2 f7f1 }
            // n = 5, score = 200
            //   2d10bf3400           | push                ebx
            //   8b4d08               | push                ebx
            //   c1e103               | push                0x8003
            //   33d2                 | push                dword ptr [ebp - 0xc]
            //   f7f1                 | mov                 dword ptr [ecx + 0x30], edx

        $sequence_48 = { 6800100000 8b4d9c 51 e8???????? ebd3 }
            // n = 5, score = 200
            //   6800100000           | push                0xb1866570
            //   8b4d9c               | jne                 0x15
            //   51                   | mov                 edx, dword ptr [ebp + 0x10]
            //   e8????????           |                     
            //   ebd3                 | imul                edx, edx, 3

        $sequence_49 = { 5b c9 c20800 55 89e5 83ec04 }
            // n = 6, score = 200
            //   5b                   | push                ebp
            //   c9                   | mov                 ebp, esp
            //   c20800               | sub                 esp, 0x454
            //   55                   | xor                 al, dl
            //   89e5                 | stosb               byte ptr es:[edi], al
            //   83ec04               | loop                0xfffffff5

        $sequence_50 = { 75ec 58 29c6 d1ee 037724 }
            // n = 5, score = 200
            //   75ec                 | add                 eax, ebp
            //   58                   | pop                 esi
            //   29c6                 | ret                 
            //   d1ee                 | pushal              
            //   037724               | mov                 esi, dword ptr [edi + 0x20]

        $sequence_51 = { 8b7720 01ee 56 ad 01e8 }
            // n = 5, score = 200
            //   8b7720               | xor                 ebx, ebx
            //   01ee                 | movsb               byte ptr es:[edi], byte ptr [esi]
            //   56                   | mov                 bl, 2
            //   ad                   | mov                 edi, ecx
            //   01e8                 | cld                 

        $sequence_52 = { 895130 68b0066a90 8b45e4 50 e8???????? 8945b0 8b4da0 }
            // n = 7, score = 200
            //   895130               | push                eax
            //   68b0066a90           | push                0
            //   8b45e4               | push                ebx
            //   50                   | lea                 eax, [ebp - 0x10]
            //   e8????????           |                     
            //   8945b0               | lea                 eax, [ebp - 0x24]
            //   8b4da0               | push                eax

        $sequence_53 = { 8bec 83c4d0 1e 53 }
            // n = 4, score = 200
            //   8bec                 | movsb               byte ptr es:[edi], byte ptr [esi]
            //   83c4d0               | shl                 eax, 2
            //   1e                   | add                 eax, dword ptr [edi + 0x1c]
            //   53                   | mov                 eax, dword ptr [eax + ebp]

        $sequence_54 = { aa e2f3 7506 7404 }
            // n = 4, score = 200
            //   aa                   | sub                 esp, 0x454
            //   e2f3                 | push                ebx
            //   7506                 | ret                 0x10
            //   7404                 | push                ebp

        $sequence_55 = { 56 57 007508 bbb84340c1 4a }
            // n = 5, score = 200
            //   56                   | mov                 dl, 0x80
            //   57                   | xor                 ebx, ebx
            //   007508               | movsb               byte ptr es:[edi], byte ptr [esi]
            //   bbb84340c1           | mov                 bl, 2
            //   4a                   | mov                 esi, eax

        $sequence_56 = { 7513 8b5510 6bd203 0355e4 8b45fc }
            // n = 5, score = 200
            //   7513                 | mov                 dword ptr [eax + 0x1c], ecx
            //   8b5510               | mov                 edx, dword ptr [ebp - 0x88]
            //   6bd203               | mov                 eax, dword ptr [ebp - 0x4c]
            //   0355e4               | mov                 dword ptr [edx + 0x20], eax
            //   8b45fc               | jmp                 0x18

        $sequence_57 = { d1ee 037724 0fb7442efe c1e002 03471c 8b0428 }
            // n = 6, score = 200
            //   d1ee                 | add                 esi, ebp
            //   037724               | push                esi
            //   0fb7442efe           | lodsd               eax, dword ptr [esi]
            //   c1e002               | add                 eax, ebp
            //   03471c               | push                esi
            //   8b0428               | push                edi

        $sequence_58 = { c1e002 03471c 8b0428 01e8 5e c3 60 }
            // n = 7, score = 200
            //   c1e002               | mov                 edi, ecx
            //   03471c               | cld                 
            //   8b0428               | mov                 dl, 0x80
            //   01e8                 | xor                 ebx, ebx
            //   5e                   | mov                 edi, ecx
            //   c3                   | cld                 
            //   60                   | mov                 dl, 0x80

        $sequence_59 = { 245d 2e5d 295d38 5d 305d01 }
            // n = 5, score = 100
            //   245d                 | push                ebp
            //   2e5d                 | mov                 ebp, esp
            //   295d38               | sub                 esp, 4
            //   5d                   | mov                 dh, 0x57
            //   305d01               | adc                 esp, ebx

        $sequence_60 = { b657 11dc b354 47 5d 5d }
            // n = 6, score = 100
            //   b657                 | jne                 0xa
            //   11dc                 | stosb               byte ptr es:[edi], al
            //   b354                 | loop                0xfffffff6
            //   47                   | jne                 8
            //   5d                   | je                  8
            //   5d                   | xor                 al, dl

        $sequence_61 = { 5d 5d de9959f7b6b3 b508 5d 5d }
            // n = 6, score = 100
            //   5d                   | mov                 bl, 0x54
            //   5d                   | inc                 edi
            //   de9959f7b6b3         | pop                 ebp
            //   b508                 | pop                 ebp
            //   5d                   | js                  0xffffffa4
            //   5d                   | sub                 byte ptr [ebp + 0x1a610ea2], ch

        $sequence_62 = { a2???????? 78a2 28ada20e611a b6c5 a2???????? }
            // n = 5, score = 100
            //   a2????????           |                     
            //   78a2                 | stosb               byte ptr es:[edi], al
            //   28ada20e611a         | loop                0xfffffff5
            //   b6c5                 | jne                 0xa
            //   a2????????           |                     

        $sequence_63 = { a2???????? d89d52d9f05d 5d 5d dc22 }
            // n = 5, score = 100
            //   a2????????           |                     
            //   d89d52d9f05d         | je                  0xa
            //   5d                   | pop                 ebx
            //   5d                   | leave               
            //   dc22                 | ret                 8

    condition:
        7 of them and filesize < 245760
}