Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Tourmaline — 针对 Tourmaline ClickFix Python RAT 的逆向工程笔记、去混淆源代码、IOC 和 YARA 规则,涵盖其 DNS 隧道和区块链死投 C2。 | Kitploit
工具/GitHubGitHub/v-pun215/tourmaline
危害指标 (IOC) 管理逆向工程恶意软件分析数字取证密码学命令与控制威胁情报学习与教育事件响应DNS 分析
GitHubv-pun215/tourmaline

Tourmaline

针对 Tourmaline ClickFix Python RAT 的逆向工程笔记、去混淆源代码、IOC 和 YARA 规则,涵盖其 DNS 隧道和区块链死投 C2。

4101天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

Tourmaline

我最近偶然发现了一款设计精巧的恶意软件,它自称“Torumaline”。

这份 README 是由 Claude 非常友好地撰写的,因为在本仓库创建时我正忙于考试。

利用和解密这款恶意软件占用了我大量原本用于数学备考的时间!

阅读博客文章!

仅供教育和研究目的使用
所有样本均用于恶意软件分析和防御性研究。请勿在沙箱、气隙环境之外执行。


概述

Tourmaline(Tourmaline.exe)是一款复杂、多阶段的 Windows 信息窃取/后门程序,通过 ClickFix 活动分发——一个伪造的 Cloudflare“验证您是真人”浏览器弹窗,诱骗用户手动运行恶意命令或安装程序。

该二进制文件是一个自定义构建的 Inno Setup 6.7.0(修订版 2,64 位偏移) 安装程序,捆绑了完整的 Python 3.11 运行时和两个阶段的混淆 Python 载荷。它建立了一个持久后门,具备:

  • 通过 UDP 53 端口的 DNS 隧道 C2(伪装成 microsoft.com 查询)
  • 用于 C2 IP 分发的 以太坊区块链死信箱(Sepolia 测试网)
  • ChaCha20 加密的任务执行通道
  • ECDSA 签名命令以防止沉洞接管
  • 反沙箱时间锁(1 亿次迭代倒计时,可在 O(1) 内绕过)

仓库结构

root@kitploit:~
tourmaline/
├── README.md                  # 本文件
├── LICENSE                    # 研究使用许可
├── .gitignore
│
├── src/                       # 提取并反混淆的源代码
│   ├── stage1_loader.py       # 阶段 1:原始混淆的 XOR 时间锁加载器(main.py)
│   ├── stage2_backdoor.py     # 阶段 2:反混淆的核心后门(来自 QGBdu.dxf)
│   └── decrypt_payload.py     # 工具:O(1) 载荷密钥恢复与解密
│
├── iocs/                      # 入侵指标
│   ├── indicators.json        # 结构化 IOC 数据(IP、哈希、域名、注册表)
│   ├── indicators.csv         # 用于 SIEM 导入的扁平 CSV
│   └── rules.yar              # YARA 检测规则
│
└── samples/                   # 恶意软件样本(密码保护)
    ├── README.md              # 样本归档说明
    ├── Tourmaline_sample.zip  # 密码:infected - 包含 Tourmaline.exe
    └── QGBdu.dxf             # 原始加密的阶段 2 载荷数据块

感染途径

该恶意软件通过 ClickFix 分发——一种社会工程学技术,攻击者控制的或被入侵的网站会覆盖一个伪造的 Cloudflare CAPTCHA 或浏览器验证页面。该覆盖层指示受害者:

  1. 按下 Win+R
  2. 粘贴一条命令(由页面 JavaScript 复制到剪贴板)
  3. 按下回车

粘贴的命令会下载并静默执行 Tourmaline.exe。安装程序以 /VERYSILENT /SUPPRESSMSGBOXES /NORESTART 参数运行。


二进制格式

注意: 原版 innoextract 1.9 无法提取此二进制文件——它仅支持修订版 1。修订版 2 使用 64 位偏移,需要自定义解析(参见 src/decrypt_payload.py)。


执行流程

root@kitploit:~
Tourmaline.exe
│
├─ Inno Setup 安装程序静默运行
│   ├─ 将 Python 3.11 运行时解压到 %APPDATA%\Tourmaline\
│   ├─ 解压 main.py(阶段 1 加载器)
│   ├─ 解压 QGBdu.dxf(加密的阶段 2 数据块)
│   ├─ 终止任何现有的 pythonw.exe 实例
│   └─ 注册持久化(任务计划程序 / 注册表)
│       └─ 名称:"TourmalineUpdate" / "Hardware monitoring service"
│
├─ 阶段 1:main.py(XOR 时间锁加载器)
│   ├─ 从 99,999,999 → 0 计数 _n(在慢速 VM 上反沙箱延迟约数小时)
│   ├─ 对每个 _n,构造 33 字节 XOR 密钥:struct.pack('>I', _n) + hardcoded_suffix
│   ├─ 用该密钥测试 QGBdu.dxf 的已知明文头部
│   └─ 匹配时:完全解密 QGBdu.dxf 并 exec() 结果
│       └─ O(1) 绕过:对前 4 字节进行已知明文攻击(见下文)
│
└─ 阶段 2:QGBdu.dxf → Python 后门
    ├─ 从 HKLM\SOFTWARE\Microsoft\Cryptography 读取 MachineGuid
    ├─ 派生互斥体 Global\Tourmaline_<hash>
    ├─ 通过以太坊死信箱(Sepolia 测试网)解析 C2 IP
    ├─ 建立到 C2 的 DNS 隧道
    └─ 轮询执行循环:获取任务,exec() Python,返回输出

阶段 1 — 反沙箱时间锁(O(1) 绕过)

加载器(main.py)使用从 99,999,999 开始的倒计时来查找 XOR 解密密钥。在真实机器上这会在几秒内完成(因为 _n 从高位开始,真实值接近 14,511,188)。在时间限制较短的沙箱中,循环永远不会完成。

密钥结构:

root@kitploit:~
full_key = struct.pack('>I', _n) + bytes.fromhex('2b0cffe07b06ac25793b3f00cfaa2dd5881c2d6378165247539dbbdaeb')

由于我们知道明文的前 16 个字节(g1 = lambda l6, ),我们可以通过已知明文 XOR 攻击立即恢复 _n:

root@kitploit:~
key_prefix = bytes(ciphertext[i] ^ known_plaintext[i] for i in range(4))
# 结果:key_prefix = 00dd6c54 → _n = 14,511,188

使用 src/decrypt_payload.py 复现此过程。


阶段 2 — 核心后门架构

配置(硬编码)

区块链死信箱(C2 弹性)

该恶意软件调用 Sepolia 测试网上的以太坊智能合约来获取活跃的 C2 IP 地址。这意味着攻击者可以随时通过更新合约来更改 C2 IP——传统的基于 IP 黑名单的 C2 阻断手段将失效。

root@kitploit:~
合约     : 0x2d7a04cca0c34005f58393f30ac725e25f19e5f5
选择器   : 0xeb9fd6fe
网络     : Ethereum Sepolia (chainId 11155111)
RPC      : https://ethereum-sepolia-rpc.publicnode.com
结果     : 包含当前 C2 IP 的 ChaCha20 加密数据块

返回的数据使用硬编码的 ChaCha20 密钥解密,以揭示实时 C2 地址。在分析时,解析结果为 158.94.211.185(通过实时 RPC 调用验证)。

DNS 隧道(C2 通信)

所有 C2 流量都作为原始 UDP DNS 查询直接发送到 C2 IP 的 53 端口。查询结构为 <encoded_data>.microsoft.com,绕过基于 DNS 的过滤,并看起来像合法的 Windows 遥测数据。

  • 自定义实现:不使用 Python 的 socket.getaddrinfo 或任何 DNS 库
  • 操作码混淆:每个数据包对 DNS 操作码字段应用随机 XOR 字节
  • 编码:任务数据以 base 编码为 DNS 标签格式

任务执行引擎

后门实现了一个任意 Python exec() 引擎。任务流程:

  1. 通过 DNS 隧道从 C2 获取
  2. ChaCha20 解密
  3. ECDSA 签名验证(防止沉洞注入)
  4. 在持久命名空间中 exec() 并捕获输出
  5. 结果返回给 C2

支持的任务类型: Python exec、文件上传/下载、shell 命令、自更新。


入侵指标(IOC)

网络

文件哈希

文件SHA256
Tourmaline.exec9b390b3b7148f549df86503858d52e030b2b5e78fed0bc525ded5927f9265d6
Tourmaline.exe(MD5)b74ac808dea2de31caf024310694ef0c

注册表 / 持久化


YARA 规则

参见 iocs/rules.yar 获取检测规则,涵盖:

  • 阶段 1 加载器常量(XOR 密钥后缀、已知明文字节)
  • 阶段 2 硬编码字符串(C2 IP、合约地址、ChaCha20 密钥)

修复 / 清理

如果此恶意软件已在某台机器上执行:

  1. 立即隔离——断开网络连接
  2. 终止进程:taskkill /F /IM pythonw.exe
  3. 删除安装目录:%APPDATA%\Tourmaline\ 或 %COMMONAPPDATA%\Tourmaline\
  4. 移除持久化:
    • 任务计划程序:删除 TourmalineUpdate
    • 检查 HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 中是否有 Tourmaline 或 SystemService
  5. 防火墙阻断:158.94.211.185:53/UDP;阻断所有意外的出站 UDP/53
  6. 在代理处阻断以太坊 RPC:ethereum-sepolia-rpc.publicnode.com
  7. 重装系统——由于具备任意 Python exec 能力,强烈建议完全重装系统

复现分析

前置条件

root@kitploit:~
pip install pyOpenSSL cryptography

解密阶段 2 载荷

root@kitploit:~
# 从仓库根目录:
python3 src/decrypt_payload.py samples/QGBdu.dxf decrypted_stage2.py

提取恶意软件样本

root@kitploit:~
7z x -pinfected samples/Tourmaline_sample.zip

披露


许可证

参见 LICENSE。本仓库仅供教育和防御性研究目的使用。

下载工具
属性值
文件名Tourmaline.exe
大小11,341,339 字节(约 10.8 MB)
MD5b74ac808dea2de31caf024310694ef0c
SHA256c9b390b3b7148f549df86503858d52e030b2b5e78fed0bc525ded5927f9265d6
格式Inno Setup 6.7.0 Unicode(修订版 2,64 位偏移)
PE 类型32 位 PE,11 个节区
覆盖层大小10,447,387 字节
Inno 魔数偏移0xD9864(890,148 字节)
应用名称Tourmaline
应用版本2.63.519
应用 GUID{2C25872D-85FC-44C7-9B16-844E39E50A44}
安装路径{commonappdata}\Tourmaline
捆绑运行时Python 3.11(完整嵌入)
载荷文件36 个文件,位于 solid LZMA2 流中
参数值
C2 IP158.94.211.185
C2 端口53(UDP)
协议自定义 DNS-over-UDP 隧道
伪装域名microsoft.com
ChaCha20 密钥36f555c87f71581f57d83576c88193fdc00a0173f741a3e198e2d7abdc9cda59
区块链合约0x2d7a04cca0c34005f58393f30ac725e25f19e5f5(Sepolia)
ECDSA 公钥MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEt17l3rGHHR9sYdHEvV8S+JRRCUHQQveSadlGk04xM/8WClDf/67Tyritt2+T18SY8n0xv1TKKl0AgnNFuboEEQ==
服务名称SystemService / TourmalineUpdate
互斥体Global\Tourmaline_<MachineGuid-hash>
类型值
C2 IP158.94.211.185
C2 端口53/UDP
伪装域名*.microsoft.com(自定义 UDP,非真实 DNS)
以太坊 RPChttps://ethereum-sepolia-rpc.publicnode.com
智能合约0x2d7a04cca0c34005f58393f30ac725e25f19e5f5
键值
HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid读取用于受害者指纹识别
%APPDATA%\Tourmaline\安装目录
任务计划程序TourmalineUpdate
服务显示名称Hardware monitoring service
互斥体Global\Tourmaline_<hash>
字段值
发现日期2026 年 9 月
研究员Vihaan Pundir (v-pun215)
分发途径ClickFix 伪造 Cloudflare CAPTCHA
分类后门 / DNS 隧道 C2 / 区块链死信箱
平台Windows(64 位)