SYMBOLCOMMON_NAMEaka. SYNONYMS
win.snappy_client (Back to overview)

SnappyClient

aka: SilabRAT
VTCollection    

According to Zscaler, SnappyClient was first observed in December 2025. It is a C++-based C2 implant with the ability to steal data and provide remote access. SnappyClient employs multiple evasion techniques to hinder endpoint security detection, including an Antimalware Scan Interface (AMSI) bypass, as well as implementing Heaven’s Gate, direct system calls, and transacted hollowing. SnappyClient receives two configuration files from the C2 server, which contain a list of actions to perform when a specified condition is met, along with another that specifies applications to target for data theft. SnappyClient uses a custom network communication protocol that encrypts all network communication using ChaCha20-Poly1305.

References
2026-08-15 ⋅ neso.re ⋅ neso
Borrowed Machinery: SnappyClient, HijackLoader, and a Shared Codebase?
HijackLoader SnappyClient
2026-07-21 ⋅ ANY.RUN ⋅ ANY.RUN
SnappyClient Analysis
SnappyClient
2026-07-02 ⋅ Mrtiepolo ⋅ Gianluca Tiepolo
Operation Turb00 — Part 3: Unmasking the SnappyClient RAT
HijackLoader SnappyClient
2026-06-10 ⋅ Group-IB ⋅ Sharmine Low, Vladimir Timofeev
SilabRAT, What’s Your Power?
HijackLoader SnappyClient
2026-03-23 ⋅ Netomize ⋅ Mohamad Mokbel
Detect SnappyClient C&C Traffic Using PacketSmith + Yara-X Detection Module
SnappyClient
2026-03-18 ⋅ Zscaler ⋅ Muhammed Irfan V A
Technical analysis of SnappyClient
HijackLoader SnappyClient
Yara Rules
[TLP:WHITE] win_snappy_client_auto (20260917 | Detects win.snappy_client.)
rule win_snappy_client_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2026-09-17"
        version = "1"
        description = "Detects win.snappy_client."
        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.snappy_client"
        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 = { eb11 83e63f 7507 57 e8???????? 59 885c3e28 }
            // n = 7, score = 100
            //   eb11                 | jmp                 0x13
            //   83e63f               | and                 esi, 0x3f
            //   7507                 | jne                 9
            //   57                   | push                edi
            //   e8????????           |                     
            //   59                   | pop                 ecx
            //   885c3e28             | mov                 byte ptr [esi + edi + 0x28], bl

        $sequence_1 = { f20f5ec1 0f57c9 f20f5ac0 f30f1141f0 0f28c3 0fb747fa f20f2ac8 }
            // n = 7, score = 100
            //   f20f5ec1             | divsd               xmm0, xmm1
            //   0f57c9               | xorps               xmm1, xmm1
            //   f20f5ac0             | cvtsd2ss            xmm0, xmm0
            //   f30f1141f0           | movss               dword ptr [ecx - 0x10], xmm0
            //   0f28c3               | movaps              xmm0, xmm3
            //   0fb747fa             | movzx               eax, word ptr [edi - 6]
            //   f20f2ac8             | cvtsi2sd            xmm1, eax

        $sequence_2 = { ff751c 837dd008 ff7518 0f4345bc ff7514 ff7510 50 }
            // n = 7, score = 100
            //   ff751c               | push                dword ptr [ebp + 0x1c]
            //   837dd008             | cmp                 dword ptr [ebp - 0x30], 8
            //   ff7518               | push                dword ptr [ebp + 0x18]
            //   0f4345bc             | cmovae              eax, dword ptr [ebp - 0x44]
            //   ff7514               | push                dword ptr [ebp + 0x14]
            //   ff7510               | push                dword ptr [ebp + 0x10]
            //   50                   | push                eax

        $sequence_3 = { 8bf1 8d8ebc000000 c706???????? e8???????? 8b8eb0000000 85c9 7405 }
            // n = 7, score = 100
            //   8bf1                 | mov                 esi, ecx
            //   8d8ebc000000         | lea                 ecx, [esi + 0xbc]
            //   c706????????         |                     
            //   e8????????           |                     
            //   8b8eb0000000         | mov                 ecx, dword ptr [esi + 0xb0]
            //   85c9                 | test                ecx, ecx
            //   7405                 | je                  7

        $sequence_4 = { eb27 8d45dc 8bcf 50 e8???????? 8365fc00 83fe04 }
            // n = 7, score = 100
            //   eb27                 | jmp                 0x29
            //   8d45dc               | lea                 eax, [ebp - 0x24]
            //   8bcf                 | mov                 ecx, edi
            //   50                   | push                eax
            //   e8????????           |                     
            //   8365fc00             | and                 dword ptr [ebp - 4], 0
            //   83fe04               | cmp                 esi, 4

        $sequence_5 = { eb04 0fb645ec 99 8996ac000000 8986a8000000 c686a000000001 eb06 }
            // n = 7, score = 100
            //   eb04                 | jmp                 6
            //   0fb645ec             | movzx               eax, byte ptr [ebp - 0x14]
            //   99                   | cdq                 
            //   8996ac000000         | mov                 dword ptr [esi + 0xac], edx
            //   8986a8000000         | mov                 dword ptr [esi + 0xa8], eax
            //   c686a000000001       | mov                 byte ptr [esi + 0xa0], 1
            //   eb06                 | jmp                 8

        $sequence_6 = { ff7754 50 e8???????? 8bf0 c645fc05 8d4dd0 6a04 }
            // n = 7, score = 100
            //   ff7754               | push                dword ptr [edi + 0x54]
            //   50                   | push                eax
            //   e8????????           |                     
            //   8bf0                 | mov                 esi, eax
            //   c645fc05             | mov                 byte ptr [ebp - 4], 5
            //   8d4dd0               | lea                 ecx, [ebp - 0x30]
            //   6a04                 | push                4

        $sequence_7 = { ebda 6a09 53 ff15???????? e9???????? 6af0 53 }
            // n = 7, score = 100
            //   ebda                 | jmp                 0xffffffdc
            //   6a09                 | push                9
            //   53                   | push                ebx
            //   ff15????????         |                     
            //   e9????????           |                     
            //   6af0                 | push                -0x10
            //   53                   | push                ebx

        $sequence_8 = { e8???????? 83c40c 85c0 7508 8b5508 8d4208 eb19 }
            // n = 7, score = 100
            //   e8????????           |                     
            //   83c40c               | add                 esp, 0xc
            //   85c0                 | test                eax, eax
            //   7508                 | jne                 0xa
            //   8b5508               | mov                 edx, dword ptr [ebp + 8]
            //   8d4208               | lea                 eax, [edx + 8]
            //   eb19                 | jmp                 0x1b

        $sequence_9 = { ff75e8 a5 a5 a5 a5 ff55ec 8b3d???????? }
            // n = 7, score = 100
            //   ff75e8               | push                dword ptr [ebp - 0x18]
            //   a5                   | movsd               dword ptr es:[edi], dword ptr [esi]
            //   a5                   | movsd               dword ptr es:[edi], dword ptr [esi]
            //   a5                   | movsd               dword ptr es:[edi], dword ptr [esi]
            //   a5                   | movsd               dword ptr es:[edi], dword ptr [esi]
            //   ff55ec               | call                dword ptr [ebp - 0x14]
            //   8b3d????????         |                     

    condition:
        7 of them and filesize < 7315456
}
Download all Yara Rules