SYMBOLCOMMON_NAMEaka. SYNONYMS
win.tropidoor (Back to overview)

Tropidoor

Actor(s): WageMole

VTCollection    

Tropidoor is an advanced HTTP/S Remote Access Trojan (RAT) written as a C project, which exhibits significant code overlap with the PostNapTea RAT. In November 2024, it was deployed in campaigns targeting developers via fake recruiters as part of a social engineering campaign distributing trojanized open-source projects on platforms like Bitbucket. It is a final-stage payload in a multi-stage execution chain, which also deployed an obfuscated BeaverTail malware.

The RAT uses RSA and AES for encryption and decryption of network traffic. Communication with the C2 uses specific HTTP POST parameters, including tropi2p, gumi, s_width, and letter, with the first parameter loosely inspiring its code name. It stores its configuration in a binary format and resolves required Windows APIs during runtime via the Fowler–Noll–Vo (FNV) hash function. Many of its characteristic strings are XOR encrypted.

A key technical feature is its custom implementation of various Windows administrative and reconnaissance commands. By implementing this functionality internally, the RAT avoids executing the legitimate Windows binaries, making its command execution activities harder to detect by behavioral monitoring tools. Custom implemented commands include functionality equivalent to standard utilities like:

arp
dir
ipconfig
kill
net
netsh
netstat
nslookup
ping
reg
rm
sc
schtasks
systeminfo
tracert
wmic logicaldisk
wmic process

References
2025-09-25 ⋅ Virus Bulletin ⋅ Matěj Havránek, Peter Kálnai
DeceptiveDevelopment: From primitive crypto theft to sophisticated AI-based deception
BeaverTail OtterCookie InvisibleFerret PylangGhost AkdoorTea GolangGhost Tropidoor TsunamiKit
2025-09-25 ⋅ ESET Research ⋅ Matěj Havránek, Peter Kálnai
DeceptiveDevelopment: From primitive crypto theft to sophisticated AI-based deception
BeaverTail OtterCookie InvisibleFerret PylangGhost AkdoorTea GolangGhost Tropidoor TsunamiKit
2025-04-02 ⋅ ASEC ⋅ ASEC
BeaverTail and Tropidoor Malware Distributed via Recruitment Emails
BeaverTail Tropidoor
Yara Rules
[TLP:WHITE] win_tropidoor_auto (20260917 | Detects win.tropidoor.)
rule win_tropidoor_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2026-09-17"
        version = "1"
        description = "Detects win.tropidoor."
        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.tropidoor"
        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 = { ff5210 85ff 7930 448bc7 488d151f9d0900 488d8db0010000 ff15???????? }
            // n = 7, score = 100
            //   ff5210               | inc                 ecx
            //   85ff                 | mov                 eax, 0x208
            //   7930                 | mov                 eax, dword ptr [esp + 0x60]
            //   448bc7               | dec                 esp
            //   488d151f9d0900       | lea                 eax, [ebp + 0x3b0]
            //   488d8db0010000       | dec                 eax
            //   ff15????????         |                     

        $sequence_1 = { c3 b001 ebe7 4c8b02 4c8d1dde7af8ff 4c8bd1 4c8bca }
            // n = 7, score = 100
            //   c3                   | nop                 dword ptr [eax + eax]
            //   b001                 | mov                 dword ptr [ebp - 0x5c], 0x3fff
            //   ebe7                 | dec                 esp
            //   4c8b02               | lea                 ecx, [ebp - 0x5c]
            //   4c8d1dde7af8ff       | inc                 cx
            //   4c8bd1               | mov                 dword ptr [edi], ecx
            //   4c8bca               | dec                 ebp

        $sequence_2 = { 41c1ea02 416bca07 443bc9 0f8527010000 b8abaaaaaa 41f7e2 c1ea04 }
            // n = 7, score = 100
            //   41c1ea02             | dec                 eax
            //   416bca07             | lea                 edx, [0x9492c]
            //   443bc9               | dec                 eax
            //   0f8527010000         | mov                 dword ptr [esp + 0x20], eax
            //   b8abaaaaaa           | test                eax, eax
            //   41f7e2               | jne                 0x188a
            //   c1ea04               | mov                 eax, dword ptr [ebp - 0x6c]

        $sequence_3 = { 48c744242010000000 4c8d4d00 ba10000000 488d4db8 e8???????? 488d4510 48837d2810 }
            // n = 7, score = 100
            //   48c744242010000000     | dec    ebp
            //   4c8d4d00             | lea                 edi, [esi + 0x10]
            //   ba10000000           | dec                 ecx
            //   488d4db8             | and                 dword ptr [edi], 0
            //   e8????????           |                     
            //   488d4510             | je                  0x1d95
            //   48837d2810           | inc                 esp

        $sequence_4 = { ff5010 ff15???????? b802000000 e9???????? 4c897558 488b4d50 488b01 }
            // n = 7, score = 100
            //   ff5010               | mov                 ecx, dword ptr [eax + 0x18]
            //   ff15????????         |                     
            //   b802000000           | test                cl, 0x7f
            //   e9????????           |                     
            //   4c897558             | je                  0x149d
            //   488b4d50             | inc                 ecx
            //   488b01               | mov                 eax, 8

        $sequence_5 = { c745141ca61aa6 c7451807a604a6 c7451c52a648a6 c7452005a609a6 c7452410a645a6 c7452809a60fa6 c7452c0da655a6 }
            // n = 7, score = 100
            //   c745141ca61aa6       | inc                 ecx
            //   c7451807a604a6       | mov                 esi, dword ptr [esp + edx*4 + 0xb5420]
            //   c7451c52a648a6       | inc                 ecx
            //   c7452005a609a6       | xor                 esi, dword ptr [esp + ecx*4 + 0xb4820]
            //   c7452410a645a6       | mov                 eax, ebp
            //   c7452809a60fa6       | movzx               edx, cl
            //   c7452c0da655a6       | inc                 ecx

        $sequence_6 = { 668945e4 8bc1 663305???????? 668945e6 8bc1 663305???????? 668945e8 }
            // n = 7, score = 100
            //   668945e4             | dec                 eax
            //   8bc1                 | lea                 eax, [ebp + 0x180]
            //   663305????????       |                     
            //   668945e6             | xor                 edx, edx
            //   8bc1                 | mov                 dword ptr [esp + 0x28], 0x104
            //   663305????????       |                     
            //   668945e8             | dec                 esp

        $sequence_7 = { 83f806 7713 488d1548dafdff 8b8c82c0280200 4803ca ffe1 4183fc01 }
            // n = 7, score = 100
            //   83f806               | mov                 dword ptr [esp + 0x20], edi
            //   7713                 | dec                 esp
            //   488d1548dafdff       | lea                 ecx, [esp + 0x48]
            //   8b8c82c0280200       | dec                 eax
            //   4803ca               | mov                 edx, edi
            //   ffe1                 | dec                 eax
            //   4183fc01             | lea                 ecx, [esp + 0x58]

        $sequence_8 = { 488b4f20 ffd6 85c0 0f844a100000 b90da30000 c74424600da34ca3 c74424646ea36ea3 }
            // n = 7, score = 100
            //   488b4f20             | dec                 eax
            //   ffd6                 | mov                 edi, dword ptr [esp + 0x58]
            //   85c0                 | dec                 eax
            //   0f844a100000         | mov                 ebp, dword ptr [esp + 0x50]
            //   b90da30000           | dec                 eax
            //   c74424600da34ca3     | add                 esp, 0x30
            //   c74424646ea36ea3     | inc                 ecx

        $sequence_9 = { 4d8d4001 6685c9 75ed 4c8d85d0090000 498bd7 4d2bc7 0fb70a }
            // n = 7, score = 100
            //   4d8d4001             | inc                 sp
            //   6685c9               | mov                 dword ptr [esp + 0x62], eax
            //   75ed                 | mov                 edx, eax
            //   4c8d85d0090000       | mov                 dword ptr [ebp + 0x168], eax
            //   498bd7               | mov                 ebx, 2
            //   4d2bc7               | dec                 eax
            //   0fb70a               | lea                 edi, [esp + 0x70]

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