☰
勒索病毒:从原理到防御,WannaCry 的完整拆解
2026/9/29 20:09:57 网站建设 项目流程

引言

如果说挖矿病毒是“温水煮青蛙”式的消耗,那勒索病毒就是“一刀毙命”式的摧毁。

它不偷偷摸摸地占用你的 CPU,而是大张旗鼓地加密你的所有文件,然后弹出一个窗口,告诉你:想拿回数据?先交赎金。没有讨价还价,没有技术协商,只有倒计时和比特币地址。

2017年5月12日,WannaCry 勒索病毒在短短几天内席卷全球150多个国家,感染超过30万台电脑。英国的医院取消了手术,西班牙的电信公司瘫痪,中国的加油站无法刷卡,大学的毕业论文被锁死。它利用的是美国国家安全局(NSA)泄露的“永恒之蓝”漏洞,传播速度之快,影响范围之广,在恶意软件史上都是罕见的。

但 WannaCry 不只是一个“破坏工具”。它是一个工程化程度极高的恶意软件系统,有着清晰的分层架构、完整的加密引擎、精细的文件处理逻辑,以及对分析者层层设防的反调试机制。

这篇文章会从勒索病毒的技术原理讲起,带你完整走一遍 WannaCry 的释放、持久化、载荷解密、DLL 加载、文件加密流程,然后给出具体的排查和防御方案。最后,我会从逆向分析的角度,拆解它的每一个核心模块。


第一部分:勒索病毒是什么?

1.1 勒索病毒的技术原理

勒索病毒的核心逻辑只有三步:

  1. 加密:用加密算法把受害者机器上的文件全部加密,使文件无法正常打开。

  2. 勒索:弹出提示窗口,告知受害者“你的文件已被加密”,要求支付赎金(通常是比特币)才能获得解密密钥。

  3. 威胁:设定倒计时,过期不候,或者威胁公开受害者的数据。

和挖矿病毒不同,勒索病毒不依赖长期驻留,它追求的是在最短时间内完成加密,然后迅速消失。加密速度越快,被发现的概率越低,攻击者的收益越高。

1.2 勒索病毒 vs 挖矿病毒

维度挖矿病毒勒索病毒
目标长期占用 CPU/GPU 算力短时间内加密所有文件
驻留时间数周至数月数小时至数天
对用户的影响电脑变慢、电费上涨文件无法打开、业务中断
攻击者收益持续挖矿收益一次性赎金
典型家族XMRig、CoinMinerWannaCry、LockBit、Mallox
检测难度中(行为明显)高(加密后才发现)

挖矿是“偷电”,勒索是“绑架”。

1.3 勒索病毒的常见类型

  • 加密勒索:加密文件,要求支付赎金才能解密。WannaCry、LockBit 属于这一类。

  • 数据窃取+勒索:先窃取数据,再加密文件,威胁不交赎金就公开数据(双重勒索)。这是近年来的主流模式。

  • 屏幕锁定:不加密文件,只锁定屏幕,要求支付“罚款”。多见于早期勒索软件。

  • MBR 勒索:修改主引导记录,导致系统无法启动。Petya 属于这一类。


第二部分:WannaCry 是怎么感染你的机器?

2.1 传播途径

WannaCry 的传播主要依靠“永恒之蓝”(EternalBlue)漏洞,这是 NSA 开发的 SMB 协议漏洞利用工具,针对 Windows 系统的 445 端口。

传播流程:

  1. 扫描局域网和互联网上开放 445 端口的 Windows 机器

  2. 利用永恒之蓝漏洞在目标机器上执行代码

  3. 植入 WannaCry 释放器,启动加密流程

  4. 被感染的机器继续扫描其他机器,形成蠕虫式传播

不需要用户点击任何东西,只要你的机器开放了 445 端口且没有打补丁,就可能被感染。

2.2 感染后的完整行为链

以我们分析的样本为例,WannaCry 从运行到加密会经历以下阶段:

第一阶段:释放与移动
程序运行后,首先用计算机名作为种子生成一个随机目录名(如C:\ProgramData\abcdefgh123\),然后将自身复制到该目录,并命名为tasksche.exe。

第二阶段:持久化
在注册表HKLM\Software\WanaCrypt0r和HKCU\Software\WanaCrypt0r下写入值名wd,记录工作目录路径,确保重启后能找到自己。

第三阶段:释放加密载荷
从自身资源节释放加密文件,包括t.wnry(加密的 DLL 载荷)、c.wnry(配置文件)等。

第四阶段:解密载荷
读取t.wnry,验证"WANACRY!"魔数,用 RSA 私钥解密 AES 密钥,再用 AES 解密出 DLL。

第五阶段:加载 DLL,启动加密
手动加载解密后的 DLL,调用导出函数TaskStart,启动多线程并发加密。

第六阶段:加密文件
遍历磁盘,加密所有目标文件,修改壁纸,弹出勒索提示。


第三部分:怎么判断自己中了勒索病毒?

3.1 常见症状

  • 文件后缀被修改(WannaCry 会添加.WNCRY、.WCRY等后缀)

  • 桌面壁纸被替换成勒索提示

  • 弹出窗口显示赎金金额、比特币地址和倒计时

  • 文件无法正常打开,提示“文件已损坏”或“格式不支持”

  • 磁盘上出现@Please_Read_Me@.txt、@WanaDecryptor@.exe等文件

3.2 排查工具

  • 文件后缀检查:看文件是否被批量重命名

  • 勒索提示文件:搜索README、DECRYPT、RECOVER等关键词

  • 进程检查:任务管理器中是否有陌生进程占用 CPU

  • 网络连接:TCPView 看是否有到陌生 IP 的连接

3.3 关键特征

  • 文件被批量加密,扩展名被修改

  • 桌面壁纸被替换

  • 弹出勒索窗口

  • 出现比特币地址和倒计时

  • 注册表中出现WanaCrypt0r相关键值


第四部分:怎么防御和清除勒索病毒?

4.1 防御措施(最重要的部分)

勒索病毒的防御比清除更重要,因为一旦文件被加密,恢复的难度极大。

1. 打补丁
WannaCry 利用的是永恒之蓝漏洞(MS17-010)。微软在 2017 年 3 月就发布了补丁,但很多机器没有更新。及时打补丁是最有效的防御手段。

2. 关闭不必要的端口
445 端口是 SMB 协议端口,WannaCry 通过它传播。如果不是必须,关闭 445 端口或限制访问。

3. 备份,备份,备份
这是唯一 100% 有效的恢复手段。定期备份重要文件到离线存储或云端。备份要离线,否则勒索病毒会加密备份文件。

4. 不点陌生链接和附件
虽然 WannaCry 主要靠漏洞传播,但其他勒索软件(如 LockBit)常通过钓鱼邮件传播。

5. 安装靠谱的杀软,开启实时防护
火绒、360、Windows Defender 都能拦截已知勒索软件。

6. 限制管理员权限
勒索病毒通常需要管理员权限才能加密系统文件。日常使用普通用户账户,降低风险。

4.2 清除步骤(如果已感染)

第一步:立即断网
拔掉网线或关闭 WiFi,防止勒索病毒继续加密网络共享文件。

第二步:不要重启
WannaCry 在加密完成后可能会删除自身,重启可能导致内存中的密钥丢失。

第三步:结束恶意进程
在任务管理器中找到tasksche.exe或@WanaDecryptor@.exe,结束任务。

第四步:删除恶意文件
删除C:\ProgramData\<随机名>\、C:\Intel\<随机名>\等目录下的tasksche.exe。

第五步:清理持久化
删除注册表HKLM\Software\WanaCrypt0r和HKCU\Software\WanaCrypt0r。

第六步:全盘杀毒
用火绒或 Windows Defender 全盘扫描。

第七步:评估恢复方案

  • 如果有备份,直接恢复

  • 如果没有备份,可以尝试 NoMoreRansom 等平台提供的解密工具(WannaCry 的部分密钥已被执法机构公开)

  • 如果都不行,重装系统是最后的方案

4.3 关于解密

WannaCry 的解密密钥由攻击者服务器保管。虽然 FBI 后来通过追踪比特币交易找到了攻击者的主私钥,但普通受害者很难通过技术手段自行解密。

不要支付赎金。支付赎金不仅助长犯罪,而且不一定能拿到解密密钥。


第五部分:从分析者视角看 WannaCry

前面讲的是“普通人怎么处理”,这一部分讲“分析者怎么看”。以我们分析的样本为例,完整拆解它的行为链。

5.1 样本基本信息

  • 文件类型:32位 PE 可执行文件(释放器)+ 解密后的 DLL(加密引擎)

  • 关键字符串:WANACRY!、WNcry@2ol7、tasksche.exe、t.wnry、TaskStart

  • 比特币钱包:13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94、12t9YDPgwueZ9NyMgw519p7AA8isjr6SMw、115p7UMMngoj1pMvkpHijcRdfJNXj6LrLn

  • 释放目录:C:\ProgramData\<随机名>\、C:\Intel\<随机名>\、%TEMP%\<随机名>\

  • 持久化:HKLM\Software\WanaCrypt0r+HKCU\Software\WanaCrypt0r,值名wd

5.2 释放器分析

随机目录名生成(sub_401225)
用计算机名作为种子,生成一个随机目录名。每个受害者的目录名不同,但同一台机器每次生成的目录名固定。

移动到隐蔽目录(sub_401B5F)
将自身复制到C:\ProgramData\<随机名>\或C:\Intel\<随机名>\,并命名为tasksche.exe。选这两个目录是因为它们所有用户可写,权限宽松。

持久化(sub_4010FD)
在HKLM\Software\WanaCrypt0r和HKCU\Software\WanaCrypt0r下写入值名wd,记录当前工作目录。双写是为了在权限不足时用 HKCU 作为备份。

资源释放(sub_401DAB)
从自身资源节"XIA"/0x80A释放加密文件,包括t.wnry、c.wnry等。

比特币钱包(sub_401E9E)
内置三个比特币钱包地址,随机选择一个。

命令执行(sub_401064)
调用CreateProcessA执行系统命令:

  • attrib +h .:隐藏当前目录

  • icacls . /grant Everyone:F /T /C /Q:赋予 Everyone 组完全控制权限,扫清加密文件的权限障碍

5.3 载荷解密分析

t.wnry 文件结构

text

t.wnry ├── "WANACRY!" (8字节魔数) ├── RSA 加密的 AES 密钥 (256字节) └── AES-CBC 加密的 DLL 数据

解密流程(sub_4014A6)

  1. 打开文件,验证"WANACRY!"魔数

  2. 读取 256 字节 RSA 加密的 AES 密钥

  3. 用 RSA 私钥解密 AES 密钥

  4. 用 AES 密钥初始化 AES 上下文

  5. 读取 AES-CBC 加密的 DLL 数据

  6. 用 AES 解密 DLL

  7. 返回解密后的 DLL

手动 DLL 加载(sub_402924)
解密后的 DLL 不通过LoadLibrary加载,而是手动解析 PE 导出表,找到TaskStart函数地址,直接调用。

为什么手动加载?

  • 绕过 Windows DLL 加载机制

  • 不触发LoadLibrary监控

  • 不暴露 DLL 的导入表

5.4 加密引擎分析

TaskStart 调度(sub_10005AE0)
解密后的 DLL 导出TaskStart,它是加密的总调度器。它创建五个线程并发执行:

  • 线程1:加密文件

  • 线程2:遍历磁盘

  • 线程3:修改壁纸

  • 线程4:加密网络共享

  • 线程5:清理

AES 密钥扩展(sub_10005DC0)
校验密钥长度,存储密钥和 IV,生成轮密钥。WannaCry 使用 AES-128,10 轮。

AES 轮函数(sub_10006280)
使用 T 盒优化,每轮只需查表 + 异或,速度比逐字节操作快很多。

ZIP 文件解析(sub_4061E0)
WannaCry 专门处理 ZIP 文件——解析 ZIP 内部结构,逐个加密里面的文件,再重新打包。确保 ZIP 内部数据完全不可恢复。

MS-DOS 日期时间解析(sub_406191)
读取 ZIP 条目的原始时间戳,加密后重新写回,让文件看起来“没被动过”。

zlib 解压缩(sub_4043B6)
释放器和加密 DLL 都内嵌了 zlib inflate 实现,用于解压资源节和 ZIP 条目。

5.5 密钥生成机制

WannaCry 采用双层非对称加密:

text

攻击者服务器 ├── 生成一对主密钥(RSA-2048) │ ├── 主私钥(攻击者保留) │ └── 主公钥(嵌入样本) │ └── 每个受害者 ├── 生成一对临时密钥(RSA-2048) │ ├── 临时私钥(用主公钥加密后存在 .eky 文件里) │ └── 临时公钥(存在 .pky 文件里) │ └── 生成随机 AES 密钥 ├── AES 密钥(用临时公钥加密后存在 .eky 文件里) └── 用 AES 密钥加密文件

为什么无法通用解密?

  • 主私钥不在样本里,只在攻击者服务器上

  • 临时私钥被主公钥加密,只有攻击者能解密

  • AES 密钥被临时公钥加密,只有攻击者能解密

每个受害者的密钥都是独立的。

5.6 家族判断

综合以上特征,判断该样本属于WannaCry / WanaCrypt0r家族,具体特征:

  • 使用永恒之蓝漏洞传播

  • 释放tasksche.exe、t.wnry、c.wnry

  • 比特币钱包地址固定

  • 注册表键WanaCrypt0r持久化

  • 加密文件后缀.WNCRY、.WCRY

  • 桌面壁纸替换为勒索提示

5.7 检测建议

YARA 规则示例:

yara

rule Ransomware_WannaCry_Release { meta: description = "Detects WannaCry ransomware dropper" author = "your_id" date = "2026-09" strings: $s1 = "WANACRY!" ascii $s2 = "WNcry@2ol7" ascii $s3 = "tasksche.exe" ascii $s4 = "t.wnry" ascii $s5 = "TaskStart" ascii $s6 = "WanaCrypt0r" wide ascii $s7 = "13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94" ascii $s8 = "12t9YDPgwueZ9NyMgw519p7AA8isjr6SMw" ascii $s9 = "115p7UMMngoj1pMvkpHijcRdfJNXj6LrLn" ascii condition: uint16(0) == 0x5A4D and 4 of them }

IOC 列表:

类型内容
文件路径C:\ProgramData\<随机名>\tasksche.exe
文件路径C:\Intel\<随机名>\tasksche.exe
注册表键HKLM\Software\WanaCrypt0r\wd
注册表键HKCU\Software\WanaCrypt0r\wd
比特币地址13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94
比特币地址12t9YDPgwueZ9NyMgw519p7AA8isjr6SMw
比特币地址115p7UMMngoj1pMvkpHijcRdfJNXj6LrLn
文件名t.wnry、c.wnry、.eky、.pky、.res
命令attrib +h .、icacls . /grant Everyone:F /T /C /Q

行为特征:

  • 创建ProgramData或Intel下的随机目录

  • 写Software\WanaCrypt0r注册表键

  • 从资源节"XIA"/0x80A释放文件

  • 创建多个线程并发加密

  • 修改文件时间戳保留原始时间

  • 解析 ZIP 文件逐个加密内部文件

  • 修改桌面壁纸

  • 弹出勒索提示窗口


第六部分:WannaCry 的工程化设计

WannaCry 之所以能在短时间内造成全球性影响,不仅因为永恒之蓝漏洞的威力,更因为它的工程化设计。

1. 分层架构
释放器负责落地和调度,加密逻辑封装在加密的 DLL 中。静态分析释放器看不到加密逻辑,必须动态解密才能分析。

2. 双层加密
RSA-2048 + AES-128,每个受害者独立密钥。即使抓到一个受害者的密钥,也无法解密其他受害者的文件。

3. 手动 DLL 加载
绕过 Windows 加载机制,不触发LoadLibrary监控。

4. 动态 API 解析
通过GetProcAddress动态获取文件操作 API,不暴露在导入表中。

5. 多线程并发
同时加密磁盘、网络共享、修改壁纸,最大化加密速度。

6. ZIP 文件深度处理
逐个加密 ZIP 内部文件,确保数据完全不可恢复。

7. 时间戳保留
加密后恢复文件原始时间戳,隐藏加密痕迹。

8. 多组件释放
释放t.wnry、c.wnry、taskdl.exe、taskse.exe等多个组件,各司其职。


结语

WannaCry 是勒索病毒的经典案例,也是恶意软件工程化的代表作。

它的技术原理不复杂:加密文件、索要赎金。但它的实现极其精细:分层架构、双层加密、手动 DLL 加载、多线程并发、ZIP 深度处理。

对于普通人,防御 WannaCry 的核心是打补丁、关端口、备份数据。一旦感染,恢复的难度极大,不要支付赎金。

对于安全从业者,理解 WannaCry 的行为链和加密机制,能帮助你写出更精准的检测规则,在企业环境中更快地发现和响应。WannaCry 虽然已经过去多年,但它的设计思路被后来的勒索软件广泛借鉴。理解 WannaCry,是理解勒索软件生态的起点。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询