Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Tourmaline — Notas de engenharia reversa, código-fonte desofuscado, IOCs e regras YARA para o RAT Python Tourmaline ClickFix, abrangendo seu túnel DNS e C2 de dead-drop em blockchain. | Kitploit
Ferramentas/GitHubGitHub/v-pun215/tourmaline
Gerenciamento de Indicadores de Comprometimento (IOC)Engenharia ReversaAnálise de MalwareForensia DigitalCriptografiaComando e ControleInteligência de AmeaçasAprendizado e EducaçãoResposta a IncidentesAnálise de DNS
GitHub
11116há 1 mêsAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
v-pun215/tourmaline

Tourmaline

Notas de engenharia reversa, código-fonte desofuscado, IOCs e regras YARA para o RAT Python Tourmaline ClickFix, abrangendo seu túnel DNS e C2 de dead-drop em blockchain.

Ver Repositório
Compartilhar

Tourmaline

Recentemente, deparei-me com uma peça de malware habilmente concebida que se autodenomina "Tourmaline".

Este README foi escrito muito gentilmente pelo Claude, pois eu estava extremamente ocupado com exames na altura da criação deste repositório.

Explorar e desencriptar este malware consumiu uma enorme parte do meu tempo de preparação para matemática!

Leia o artigo do blog!

APENAS PARA FINS EDUCACIONAIS E DE INVESTIGAÇÃO
Todas as amostras são fornecidas para análise de malware e investigação defensiva. Não execute fora de um ambiente isolado (sandboxed) e sem ligação à rede (air-gapped).


Visão Geral

Tourmaline (Tourmaline.exe) é um infostealer/backdoor sofisticado e multi-etapas para Windows, distribuído através de uma campanha ClickFix - um popup falso do navegador Cloudflare "Verify you are human" que engana os utilizadores para executarem manualmente um comando ou instalador malicioso.

O binário é um instalador Inno Setup 6.7.0 (Revisão 2, offsets de 64 bits) construído à medida, que inclui um runtime completo de Python 3.11 e duas etapas de payload Python ofuscado. Estabelece um backdoor persistente com:

  • C2 por DNS tunneling sobre a porta UDP 53 (disfarçado de consultas a microsoft.com)
  • Dead-drop na blockchain Ethereum para distribuição de IPs de C2 (testnet Sepolia)
  • Canal de execução de tarefas encriptado com ChaCha20
  • Comandos assinados com ECDSA para impedir sinkholing
  • Bloqueio temporal anti-sandbox (contagem decrescente de 100M iterações, contornável em O(1))

Estrutura do Repositório

tourmaline/
├── README.md                  # This file
├── LICENSE                    # Research use license
├── .gitignore
│
├── src/                       # Extracted & deobfuscated source code
│   ├── stage1_loader.py       # Stage 1: Original obfuscated XOR time-lock loader (main.py)
│   ├── stage2_backdoor.py     # Stage 2: Deobfuscated core backdoor (from QGBdu.dxf)
│   └── decrypt_payload.py     # Utility: O(1) payload key recovery & decryption
│
├── iocs/                      # Indicators of Compromise
│   ├── indicators.json        # Structured IOC data (IPs, hashes, domains, registry)
│   ├── indicators.csv         # Flat CSV for SIEM import
│   └── rules.yar              # YARA detection rules
│
└── samples/                   # Malware samples (password-protected)
    ├── README.md              # Sample archive instructions
    ├── Tourmaline_sample.zip  # Password: infected - contains Tourmaline.exe
    └── QGBdu.dxf             # Raw encrypted Stage 2 payload blob

Vetor de Infecção

O malware é distribuído via ClickFix - uma técnica de engenharia social na qual um site comprometido ou controlado pelo atacante sobrepõe uma falsa página de CAPTCHA do Cloudflare ou de verificação do navegador. A sobreposição instrui a vítima a:

  1. Pressionar Win+R
  2. Colar um comando (copiado para a área de transferência pelo JavaScript da página)
  3. Pressionar Enter

O comando colado baixa e executa silenciosamente Tourmaline.exe. O instalador é executado com /VERYSILENT /SUPPRESSMSGBOXES /NORESTART.


Formato do Binário

PropriedadeValor
Nome do arquivoTourmaline.exe
Tamanho11.341.339 bytes (~10,8 MB)
MD5b74ac808dea2de31caf024310694ef0c
SHA256c9b390b3b7148f549df86503858d52e030b2b5e78fed0bc525ded5927f9265d6
FormatoInno Setup 6.7.0 Unicode (Revisão 2, offsets de 64 bits)
Tipo de PEPE de 32 bits, 11 seções
Tamanho do overlay10.447.387 bytes
Offset do magic do Inno0xD9864 (890.148 bytes)
Nome do appTourmaline
Versão do app2.63.519
GUID do app{2C25872D-85FC-44C7-9B16-844E39E50A44}
Caminho de instalação{commonappdata}\Tourmaline
Runtime incluídoPython 3.11 (embed completo)
Arquivos de payload36 arquivos em stream LZMA2 sólido

Nota: O innoextract 1.9 padrão não consegue extrair este binário — ele suporta apenas a Revisão 1. A Revisão 2 usa offsets de 64 bits e requer parsing personalizado (veja src/decrypt_payload.py).


Fluxo de Execução

Tourmaline.exe
│
├─ Inno Setup installer runs silently
│   ├─ Extracts Python 3.11 runtime to %APPDATA%\Tourmaline\
│   ├─ Extracts main.py (Stage 1 loader)
│   ├─ Extracts QGBdu.dxf (encrypted Stage 2 blob)
│   ├─ Kills any existing pythonw.exe instances
│   └─ Registers persistence (Task Scheduler / registry)
│       └─ Name: "TourmalineUpdate" / "Hardware monitoring service"
│
├─ Stage 1: main.py (XOR Time-Lock Loader)
│   ├─ Counts _n from 99,999,999 → 0 (anti-sandbox delay ~hours on slow VMs)
│   ├─ At each _n, constructs 33-byte XOR key: struct.pack('>I', _n) + hardcoded_suffix
│   ├─ Tests key against known plaintext header of QGBdu.dxf
│   └─ On match: decrypts QGBdu.dxf entirely and exec()s the result
│       └─ O(1) bypass: known-plaintext attack on first 4 bytes (see below)
│
└─ Stage 2: QGBdu.dxf → Python backdoor
    ├─ Reads MachineGuid from HKLM\SOFTWARE\Microsoft\Cryptography
    ├─ Derives mutex Global\Tourmaline_<hash>
    ├─ Resolves C2 IP via Ethereum dead-drop (Sepolia testnet)
    ├─ Establishes DNS tunnel to C2
    └─ Poll-execute loop: fetches tasks, exec()s Python, returns output

Estágio 1 — Bloqueio Temporal Anti-Sandbox (Bypass O(1))

O loader (main.py) usa uma contagem regressiva de 99,999,999 para encontrar a chave de descriptografia XOR. Em uma máquina real, isso é concluído em segundos (porque _n começa alto e o valor verdadeiro está próximo de 14,511,188). Em um sandbox com limite de tempo curto, o loop nunca é concluído.

Estrutura da chave:

full_key = struct.pack('>I', _n) + bytes.fromhex('2b0cffe07b06ac25793b3f00cfaa2dd5881c2d6378165247539dbbdaeb')

Como conhecemos os primeiros 16 bytes do texto simples (g1 = lambda l6, ), podemos recuperar _n instantaneamente por meio de um ataque XOR de texto simples conhecido:

key_prefix = bytes(ciphertext[i] ^ known_plaintext[i] for i in range(4))
# Result: key_prefix = 00dd6c54 → _n = 14,511,188

Use src/decrypt_payload.py para reproduzir isto.


Estágio 2 — Arquitetura Central do Backdoor

Configuração (Hardcoded)

ParâmetroValor
IP do C2158.94.211.185
Porta do C253 (UDP)
ProtocoloTúnel DNS-sobre-UDP personalizado
Domínio falsificadomicrosoft.com
Chave ChaCha2036f555c87f71581f57d83576c88193fdc00a0173f741a3e198e2d7abdc9cda59
Contrato blockchain0x2d7a04cca0c34005f58393f30ac725e25f19e5f5 (Sepolia)
Chave pública ECDSAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEt17l3rGHHR9sYdHEvV8S+JRRCUHQQveSadlGk04xM/8WClDf/67Tyritt2+T18SY8n0xv1TKKl0AgnNFuboEEQ==
Nome do serviçoSystemService / TourmalineUpdate
MutexGlobal\Tourmaline_<MachineGuid-hash>

Dead-Drop via Blockchain (Resiliência do C2)

O malware chama um contrato inteligente Ethereum na testnet Sepolia para recuperar o endereço IP ativo do C2. Isso significa que o atacante pode alterar o IP do C2 a qualquer momento atualizando o contrato — a interrupção tradicional do C2 baseada em listas de bloqueio de IP é ineficaz.

Contract : 0x2d7a04cca0c34005f58393f30ac725e25f19e5f5
Selector : 0xeb9fd6fe
Network  : Ethereum Sepolia (chainId 11155111)
RPC      : https://ethereum-sepolia-rpc.publicnode.com
Result   : ChaCha20-encrypted blob containing current C2 IP

Os dados retornados são descriptografados com a chave ChaCha20 embutida no código para revelar o endereço C2 ativo. No momento da análise, este resolvia para 158.94.211.185 (verificado por meio de chamada RPC ativa).

Túnel DNS (Comunicação C2)

Baixar ferramenta