rule win_winnti_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2026-05-04"
        version = "1"
        description = "Detects win.winnti."
        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.winnti"
        malpedia_rule_date = "20260422"
        malpedia_hash = "a182e35da64e6d71cb55f125c4d4225196523f14"
        malpedia_version = "20260504"
        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 = { 8d7c2410 33db f3ab 8d44240c }
            // n = 4, score = 200
            //   8d7c2410             | lea                 edi, [esp + 0x10]
            //   33db                 | xor                 ebx, ebx
            //   f3ab                 | rep stosd           dword ptr es:[edi], eax
            //   8d44240c             | lea                 eax, [esp + 0xc]

        $sequence_1 = { 8d442418 8d8c2490000000 50 6800020000 }
            // n = 4, score = 200
            //   8d442418             | lea                 eax, [esp + 0x18]
            //   8d8c2490000000       | lea                 ecx, [esp + 0x90]
            //   50                   | push                eax
            //   6800020000           | push                0x200

        $sequence_2 = { 8954242c 663dffff 0f84cf000000 83fa01 7f07 }
            // n = 5, score = 200
            //   8954242c             | mov                 dword ptr [esp + 0x2c], edx
            //   663dffff             | cmp                 ax, 0xffff
            //   0f84cf000000         | je                  0xd5
            //   83fa01               | cmp                 edx, 1
            //   7f07                 | jg                  9

        $sequence_3 = { 5d 8b4744 6a00 53 }
            // n = 4, score = 200
            //   5d                   | pop                 ebp
            //   8b4744               | mov                 eax, dword ptr [edi + 0x44]
            //   6a00                 | push                0
            //   53                   | push                ebx

        $sequence_4 = { 8b8c2470020000 2bdf 83c304 6a00 53 }
            // n = 5, score = 200
            //   8b8c2470020000       | mov                 ecx, dword ptr [esp + 0x270]
            //   2bdf                 | sub                 ebx, edi
            //   83c304               | add                 ebx, 4
            //   6a00                 | push                0
            //   53                   | push                ebx

        $sequence_5 = { 8bf0 b900010000 33c0 8bfe f3ab 83c404 33ff }
            // n = 7, score = 200
            //   8bf0                 | mov                 esi, eax
            //   b900010000           | mov                 ecx, 0x100
            //   33c0                 | xor                 eax, eax
            //   8bfe                 | mov                 edi, esi
            //   f3ab                 | rep stosd           dword ptr es:[edi], eax
            //   83c404               | add                 esp, 4
            //   33ff                 | xor                 edi, edi

        $sequence_6 = { 2bf9 8d5a08 8bc1 8bf7 8bfb 6a00 }
            // n = 6, score = 200
            //   2bf9                 | sub                 edi, ecx
            //   8d5a08               | lea                 ebx, [edx + 8]
            //   8bc1                 | mov                 eax, ecx
            //   8bf7                 | mov                 esi, edi
            //   8bfb                 | mov                 edi, ebx
            //   6a00                 | push                0

        $sequence_7 = { ff15???????? b908000000 33c0 8d7c2414 8d542434 f3ab }
            // n = 6, score = 200
            //   ff15????????         |                     
            //   b908000000           | mov                 ecx, 8
            //   33c0                 | xor                 eax, eax
            //   8d7c2414             | lea                 edi, [esp + 0x14]
            //   8d542434             | lea                 edx, [esp + 0x34]
            //   f3ab                 | rep stosd           dword ptr es:[edi], eax

        $sequence_8 = { 488bcf e8???????? 85c0 7442 488d15726b0000 }
            // n = 5, score = 100
            //   488bcf               | dec                 eax
            //   e8????????           |                     
            //   85c0                 | arpl                cx, bx
            //   7442                 | dec                 eax
            //   488d15726b0000       | lea                 ebp, [0xa507f]

        $sequence_9 = { 7539 410bc0 488d542458 488d0db3210b00 8905???????? 488d05a61e0100 }
            // n = 6, score = 100
            //   7539                 | mov                 eax, dword ptr [ecx + edi*8 + 0xba200]
            //   410bc0               | mov                 cl, byte ptr [eax + esi + 0x3a]
            //   488d542458           | inc                 ecx
            //   488d0db3210b00       | cmp                 cl, al
            //   8905????????         |                     
            //   488d05a61e0100       | jae                 0x6b

        $sequence_10 = { 48ffc5 488d157cf20000 488bcd e8???????? }
            // n = 4, score = 100
            //   48ffc5               | dec                 eax
            //   488d157cf20000       | mov                 edi, ebx
            //   488bcd               | and                 ebx, 0x1f
            //   e8????????           |                     

        $sequence_11 = { 33d2 8bc1 41f7f2 85d2 7402 2bca }
            // n = 6, score = 100
            //   33d2                 | lea                 ecx, [0x116d]
            //   8bc1                 | jmp                 0x14
            //   41f7f2               | dec                 eax
            //   85d2                 | lea                 ecx, [0x117e]
            //   7402                 | xor                 edx, edx
            //   2bca                 | mov                 eax, ecx

        $sequence_12 = { e8???????? 4883c708 4883ff38 7cc2 488b0e }
            // n = 5, score = 100
            //   e8????????           |                     
            //   4883c708             | mov                 dword ptr [esp + 0x30], eax
            //   4883ff38             | dec                 eax
            //   7cc2                 | lea                 eax, [ebp - 0x31]
            //   488b0e               | inc                 ebp

        $sequence_13 = { 4c8d4597 41b930000000 ba04822200 488bce c744242838000000 4889442420 }
            // n = 6, score = 100
            //   4c8d4597             | mov                 dword ptr [esp + 0x28], 0x28
            //   41b930000000         | mov                 dword ptr [ebp - 1], 0x40
            //   ba04822200           | dec                 eax
            //   488bce               | mov                 dword ptr [esp + 0x20], eax
            //   c744242838000000     | mov                 dword ptr [ebp + 3], 0x28
            //   4889442420           | dec                 eax

        $sequence_14 = { 8bc1 48897c2440 4c897c2448 41f7f0 85d2 7405 }
            // n = 6, score = 100
            //   8bc1                 | mov                 dword ptr [ebp + 7], 0x42000042
            //   48897c2440           | dec                 esp
            //   4c897c2448           | lea                 eax, [ebp - 0x69]
            //   41f7f0               | inc                 ecx
            //   85d2                 | mov                 ecx, 0x30
            //   7405                 | mov                 edx, 0x228204

        $sequence_15 = { 7556 833d????????02 734d 8b8db0030000 0fb7532e 488d8560010000 }
            // n = 6, score = 100
            //   7556                 | dec                 eax
            //   833d????????02       |                     
            //   734d                 | mov                 ecx, esi
            //   8b8db0030000         | mov                 dword ptr [esp + 0x28], 0x38
            //   0fb7532e             | dec                 eax
            //   488d8560010000       | mov                 dword ptr [esp + 0x20], eax

        $sequence_16 = { c744242828000000 c745ff40000000 4889442420 c7450328000000 48c7450742000042 }
            // n = 5, score = 100
            //   c744242828000000     | inc                 ecx
            //   c745ff40000000       | div                 edx
            //   4889442420           | test                edx, edx
            //   c7450328000000       | je                  0xb
            //   48c7450742000042     | sub                 ecx, edx

        $sequence_17 = { 3b0d???????? 7369 4863d9 488d2d7f500a00 488bfb 83e31f 48c1ff05 }
            // n = 7, score = 100
            //   3b0d????????         |                     
            //   7369                 | dec                 eax
            //   4863d9               | add                 ebx, 5
            //   488d2d7f500a00       | dec                 eax
            //   488bfb               | add                 eax, esi
            //   83e31f               | mov                 eax, dword ptr [ebp - 0x4d]
            //   48c1ff05             | inc                 ecx

        $sequence_18 = { 2bc8 750f 488d0d6d110000 ff15???????? eb12 488d0d7e110000 ff15???????? }
            // n = 7, score = 100
            //   2bc8                 | inc                 ecx
            //   750f                 | mov                 eax, ebx
            //   488d0d6d110000       | sub                 ecx, eax
            //   ff15????????         |                     
            //   eb12                 | jne                 0x11
            //   488d0d7e110000       | dec                 eax
            //   ff15????????         |                     

        $sequence_19 = { 7e22 48897b18 48897310 408833 4533c0 488d15cb550100 488bcb }
            // n = 7, score = 100
            //   7e22                 | lea                 esp, [eax - 8]
            //   48897b18             | inc                 esp
            //   48897310             | mov                 byte ptr [eax + esi + 0x39], al
            //   408833               | inc                 ecx
            //   4533c0               | cmp                 ch, 1
            //   488d15cb550100       | jne                 0x34
            //   488bcb               | dec                 ebx

        $sequence_20 = { 8b6c3301 4863c5 4883c305 4803c6 }
            // n = 4, score = 100
            //   8b6c3301             | mov                 eax, ecx
            //   4863c5               | dec                 eax
            //   4883c305             | mov                 dword ptr [esp + 0x40], edi
            //   4803c6               | dec                 esp

        $sequence_21 = { 7402 8913 3bd7 410f92c3 418bc3 }
            // n = 5, score = 100
            //   7402                 | je                  4
            //   8913                 | mov                 dword ptr [ebx], edx
            //   3bd7                 | cmp                 edx, edi
            //   410f92c3             | inc                 ecx
            //   418bc3               | setb                bl

        $sequence_22 = { 448be0 85c0 0f844e010000 488b4c2450 488364242000 488d055d970a00 }
            // n = 6, score = 100
            //   448be0               | mov                 ecx, 0x20
            //   85c0                 | mov                 dword ptr [ebp - 0x2d], eax
            //   0f844e010000         | dec                 eax
            //   488b4c2450           | lea                 eax, [ebp + 0x67]
            //   488364242000         | mov                 edx, 0x22824c
            //   488d055d970a00       | dec                 eax

        $sequence_23 = { 458d60f8 4488443039 4180fd01 752e 4b8b84f900a20b00 8a4c303a 413ac8 }
            // n = 7, score = 100
            //   458d60f8             | mov                 ecx, dword ptr [ebp + 0x3b0]
            //   4488443039           | movzx               edx, word ptr [ebx + 0x2e]
            //   4180fd01             | dec                 eax
            //   752e                 | lea                 eax, [ebp + 0x160]
            //   4b8b84f900a20b00     | mov                 ebp, dword ptr [ebx + esi + 1]
            //   8a4c303a             | dec                 eax
            //   413ac8               | arpl                bp, ax

    condition:
        7 of them and filesize < 1581056
}