rule win_hlux_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2026-09-17"
        version = "1"
        description = "Detects win.hlux."
        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.hlux"
        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 = { 7506 89b500ffffff 81f98a0b3e87 7461 83f917 745c }
            // n = 6, score = 100
            //   7506                 | jne                 8
            //   89b500ffffff         | mov                 dword ptr [ebp - 0x100], esi
            //   81f98a0b3e87         | cmp                 ecx, 0x873e0b8a
            //   7461                 | je                  0x63
            //   83f917               | cmp                 ecx, 0x17
            //   745c                 | je                  0x5e

        $sequence_1 = { 897df8 8b45dc bef938c3fe bf33dbf7c2 8975cc 81ff8b12bf46 752c }
            // n = 7, score = 100
            //   897df8               | mov                 dword ptr [ebp - 8], edi
            //   8b45dc               | mov                 eax, dword ptr [ebp - 0x24]
            //   bef938c3fe           | mov                 esi, 0xfec338f9
            //   bf33dbf7c2           | mov                 edi, 0xc2f7db33
            //   8975cc               | mov                 dword ptr [ebp - 0x34], esi
            //   81ff8b12bf46         | cmp                 edi, 0x46bf128b
            //   752c                 | jne                 0x2e

        $sequence_2 = { 0009 1b4e01 e405 9d }
            // n = 4, score = 100
            //   0009                 | add                 byte ptr [ecx], cl
            //   1b4e01               | sbb                 ecx, dword ptr [esi + 1]
            //   e405                 | in                  al, 5
            //   9d                   | popfd               

        $sequence_3 = { 0088aa4b0023 d18a0688078a 46 018847018a46 }
            // n = 4, score = 100
            //   0088aa4b0023         | add                 byte ptr [eax + 0x23004baa], cl
            //   d18a0688078a         | ror                 dword ptr [edx - 0x75f877fa], 1
            //   46                   | inc                 esi
            //   018847018a46         | add                 dword ptr [eax + 0x468a0147], ecx

        $sequence_4 = { 0130 8b13 8b08 85d2 }
            // n = 4, score = 100
            //   0130                 | add                 dword ptr [eax], esi
            //   8b13                 | mov                 edx, dword ptr [ebx]
            //   8b08                 | mov                 ecx, dword ptr [eax]
            //   85d2                 | test                edx, edx

        $sequence_5 = { 8995c0feffff 8d08 21db 7506 899d30ffffff }
            // n = 5, score = 100
            //   8995c0feffff         | mov                 dword ptr [ebp - 0x140], edx
            //   8d08                 | lea                 ecx, [eax]
            //   21db                 | and                 ebx, ebx
            //   7506                 | jne                 8
            //   899d30ffffff         | mov                 dword ptr [ebp - 0xd0], ebx

        $sequence_6 = { 0101 c9 c3 6a10 }
            // n = 4, score = 100
            //   0101                 | add                 dword ptr [ecx], eax
            //   c9                   | leave               
            //   c3                   | ret                 
            //   6a10                 | push                0x10

        $sequence_7 = { 898decfeffff 897d88 33c0 83f8c6 750b }
            // n = 5, score = 100
            //   898decfeffff         | mov                 dword ptr [ebp - 0x114], ecx
            //   897d88               | mov                 dword ptr [ebp - 0x78], edi
            //   33c0                 | xor                 eax, eax
            //   83f8c6               | cmp                 eax, -0x3a
            //   750b                 | jne                 0xd

        $sequence_8 = { 010f 840f 0000 008365f0fe8b }
            // n = 4, score = 100
            //   010f                 | add                 dword ptr [edi], ecx
            //   840f                 | test                byte ptr [edi], cl
            //   0000                 | add                 byte ptr [eax], al
            //   008365f0fe8b         | add                 byte ptr [ebx - 0x74010f9b], al

        $sequence_9 = { 895dd8 02c4 8b15???????? 8b4de8 8955d4 }
            // n = 5, score = 100
            //   895dd8               | mov                 dword ptr [ebp - 0x28], ebx
            //   02c4                 | add                 al, ah
            //   8b15????????         |                     
            //   8b4de8               | mov                 ecx, dword ptr [ebp - 0x18]
            //   8955d4               | mov                 dword ptr [ebp - 0x2c], edx

        $sequence_10 = { 0104bb 8d1447 89542418 e9???????? }
            // n = 4, score = 100
            //   0104bb               | add                 dword ptr [ebx + edi*4], eax
            //   8d1447               | lea                 edx, [edi + eax*2]
            //   89542418             | mov                 dword ptr [esp + 0x18], edx
            //   e9????????           |                     

        $sequence_11 = { 89bd28ffffff 898decfeffff 8b85d8feffff 83f8c8 }
            // n = 4, score = 100
            //   89bd28ffffff         | mov                 dword ptr [ebp - 0xd8], edi
            //   898decfeffff         | mov                 dword ptr [ebp - 0x114], ecx
            //   8b85d8feffff         | mov                 eax, dword ptr [ebp - 0x128]
            //   83f8c8               | cmp                 eax, -0x38

        $sequence_12 = { 0000 008365f0fe8b 4d 0883c108e918 }
            // n = 4, score = 100
            //   0000                 | add                 byte ptr [eax], al
            //   008365f0fe8b         | add                 byte ptr [ebx - 0x74010f9b], al
            //   4d                   | dec                 ebp
            //   0883c108e918         | or                  byte ptr [ebx + 0x18e908c1], al

        $sequence_13 = { 894d88 8b4df0 8d9fb7a8429f 83fff7 7403 897dd4 898df0feffff }
            // n = 7, score = 100
            //   894d88               | mov                 dword ptr [ebp - 0x78], ecx
            //   8b4df0               | mov                 ecx, dword ptr [ebp - 0x10]
            //   8d9fb7a8429f         | lea                 ebx, [edi - 0x60bd5749]
            //   83fff7               | cmp                 edi, -9
            //   7403                 | je                  5
            //   897dd4               | mov                 dword ptr [ebp - 0x2c], edi
            //   898df0feffff         | mov                 dword ptr [ebp - 0x110], ecx

        $sequence_14 = { 0104b9 33c9 83c408 85c0 }
            // n = 4, score = 100
            //   0104b9               | add                 dword ptr [ecx + edi*4], eax
            //   33c9                 | xor                 ecx, ecx
            //   83c408               | add                 esp, 8
            //   85c0                 | test                eax, eax

        $sequence_15 = { 7430 8b8d1cffffff 898dbcfeffff 85db 7420 81fb5d31ffa3 }
            // n = 6, score = 100
            //   7430                 | je                  0x32
            //   8b8d1cffffff         | mov                 ecx, dword ptr [ebp - 0xe4]
            //   898dbcfeffff         | mov                 dword ptr [ebp - 0x144], ecx
            //   85db                 | test                ebx, ebx
            //   7420                 | je                  0x22
            //   81fb5d31ffa3         | cmp                 ebx, 0xa3ff315d

    condition:
        7 of them and filesize < 3147776
}