「史上最强」vs「现代最弱」——一次广告位投毒引发的挖矿木马
「史上最强」vs「现代最弱」——一次广告位投毒引发的挖矿木马
接day02的预告,站内也有许多前辈讲过原理和概念,排骨技术力不够就简单分享一下纯小白首战挖矿病毒的过程和经验。(由于是第一次真的没经验,许多地方都忘记取证了,本篇部分内容为手工复现,并非现场。)
一头是成熟的攻击手法,一头是几乎为零的防守配置。 这也算是标题的由来了
关于本稿的证据边界(请先看一眼):
本篇有两类材料。唯一有原始文件时间戳支撑的硬证据是 6.1 节的 43 秒时间线(.lnk文件自带时间戳);其余细节多为凭回忆整理,个别段落(如 4.3 节的 hosts 截图)是事后手工补的,会单独标注。凡是标了"手工复现"的地方,都不是现场记录。
特别声明:本文所有操作均在自己受害的机器和隔离环境内完成,目的是取证与清除。文中涉及的恶意文件样本不会提供下载,相关分析手法仅供网络安全学习研究使用。严禁在未获得书面授权的情况下对任何非自有系统实施扫描、测试、攻击等行为。
一、起因及发现
事情的起因是:排骨在和朋友玩泰拉瑞亚,但是一直在慢动作,走两步卡一下,像开了 0.5 倍速,因为加装了灾厄、众神之怒等等大型模组,所以第一反应就是去调画面、帧率、跳帧、光影等等,并且关停了部分不重要的模组,甚至显卡驱动都去重装了,直到这时排骨还以为是 “bug之怒”的问题,折腾了半个多小时,一次都没好。
然后排骨突然想到——泰拉瑞亚吃CPU的性能。
Ctrl + Shift + Esc 打开任务管理器。CPU 挂在 90% 以上。
再看「详细信息」里的进程列表,一个名字很奇怪的东西排在最上面:
- 进程名是一串没有意义的随机字母数字,看不出是哪个软件
- CPU 占用长期 90% 上下
- 描述、发布者两栏都是空的
- 「打开文件所在的位置」——目录也是一串随机字母
排骨当时第一反应是模组内部的程序出问题了。但是!Mod 从来不会常驻一个占 90% CPU 的进程。
二、杀掉进程,它又回来了
右键点开「打开文件所在的位置」,看了一眼那个目录——一串乱码字母,一看就不是什么正经软件该待的地方。然后以管理员身份把它结束掉,游戏立刻恢复正常,一点不卡了。
当时以为完事了。
没过多久,它又跑起来了。
而且——进程名跟刚才一模一样,一个字都没变。
到这排骨才发现不对劲:
随机进程名 + 结束之后自动重启 = 有持久化机制的恶意程序。
正常软件不会有这种特征。杀掉之后还能自己回来,只有两种可能:一是它把自己加进了开机启动项;二是还有别的进程在守着它,发现它死了就重新拉起来。
(名字不变:说明重新起来的还是同一份文件、被同一套机制拉起来的,不是每次现生成一个新名字。所以删掉眼前这个进程没有意义。)
两种情况都不是手工删一删能解决的。从这里开始,这就不是「清理软件」,而是「应急响应」了。
先断网再删文件是首要的(因为我的电脑上并没有什么太贵重的资料,所以也没急着断)。
判断依据:一个长期占满 CPU 的不明程序,最常见的用途是挖矿;而它带了完整的网络模块,那还有另一种可能——在往外传东西。
| 情况 | 不断网的后果 |
|---|---|
| 挖矿木马 | 继续偷电费和显卡寿命 |
| 窃密木马 | 继续把浏览器密码、Cookie、聊天记录往外发 |
| 远控木马 | 攻击者可能已经在机器上敲命令了 |
所以当时的选择是:拔网线 / 关掉 Wi-Fi,结束可疑进程让机器先安静下来,然后不删任何文件、不重启——因为文件本身是证据。
第三条特别重要:「删掉就万事大吉」的想法,是应急响应里最贵的念头。 文件删了,你就永远不知道它从哪来、干了什么、有没有同伴、你的密码是不是已经出去了。
想留证据又想让它闭嘴,正确做法是挂起进程而不是结束进程:
# 挂起进程(保留内存现场,程序不再执行) Suspend-Process -Id <PID>结束进程会清掉它占用的内存,挂起不会。内存里往往藏着解密后的配置、C2 地址这些静态文件里看不到的东西。排骨当时不知道这个,直接结束了,等于亲手丢掉了现场和证据。
所以上面那句"结束可疑进程"是排骨当时的实际选择,也是本篇要写出来的错误示范:当时的做法是结束,正确的做法是挂起。 这两件事得分开看。
三、想装杀软救命
确认中毒后排骨立马去找杀毒软件。
然后就感觉到了深深的绝望。
360 的官网打不开,一开始以为是断网了,可其他网站都正常——只有安全软件的站进不去。排骨又去试了火绒,火绒的站能打开,安装包也下下来了,但是装完,运行不起来。
不是报错,就是安安静静地没反应。点了图标,进程起来一下,然后就没了。
此刻我意识到,是病毒干的。病毒干的事不止是藏起来,它还做另外两件事:堵住你求援的路,拆掉你能用的工具。
四、更改hosts
4.1 hosts 是什么
简单讲就是:「本地域名对照表」。
平时我们访问网站,流程是这样的:
浏览器输入 baidu.com
↓
问 DNS 服务器:baidu.com 的 IP 是多少?
↓
DNS 回答:1.2.3.4
↓
浏览器去访问 1.2.3.4
但如果 hosts 文件里写了这么一行:
0.0.0.0 baidu.com
流程就变成:
浏览器输入 baidu.com
↓
先查 hosts:本地写着 baidu.com 对应 0.0.0.0
↓
不问 DNS 了,直接访问 0.0.0.0
↓
0.0.0.0 是「无效地址」,连不上 → 网站打不开
关键在「优先」两个字:hosts 的优先级高于 DNS。 只要 hosts 里写了一行,你的电脑就再也不去问 DNS 了,DNS 说什么都没用。
文件位置:
C:\Windows\System32\drivers\etc\hosts
(etc 目录下还有个 hosts.ics,那是网络共享用的,不用管。)
4.2 恶意软件改 hosts 干嘛
这类木马改 hosts 的套路非常固定:塞进几十上百行,把 360、火绒这些国内杀软官网的域名全部指向 0.0.0.0 或者 127.0.0.1。 效果就是:
- 下载不了杀软(官网打不开)
- 在线查杀用不了(云查杀接口的域名也被拦了)
- 系统更新打不上(微软的域名也拦了,补丁和安全情报都进不来)
- 有些还会把安全论坛、分析平台的域名一起拦掉——让你连「去搜一下这是什么东西」都做不到
它这么阴的原因:它不攻击你的系统,它攻击你的信息获取能力。 你在网上一搜「电脑突然卡顿、进程随机名」,标准答案第一句一定是「先装个杀软全盘扫描」。可它偏偏让你装不上。
这就形成一个死循环:你得先杀掉病毒才能下载杀软,可你得先有杀软才能杀掉病毒。
4.3 打开一看
用记事本打开 hosts。
正常一份干净的 hosts,除掉文件头上那一大段以 # 开头的注释(那是系统自带的说明,不用管),真正生效的内容只有一两行,长这样:
# 127.0.0.1 localhost
# ::1 localhost
而排骨打开的时候,那一片杀软和微软的域名,齐刷刷全在里面,全被指向了无效地址。
![手工复现的 hosts 结构示意]

(具体拦了哪些域名排骨当时没截图,上图是手工打的类似结构,域名做了替换。这就是为什么前面反复说要先截图——当时嫌麻烦没留,复盘时就得靠回忆。 所以上面列的那些拦截目标,是按这个手法的通用行为写的,不是当时那份 hosts 的逐条还原。)
4.4 清掉
我也没逐行判断,直接把恶意行清掉、留下系统默认的那两行注释。hosts 的合法自定义内容本来就极少,中了毒的情况下,一行一行清太麻烦,最后也不知道还漏没漏,所以直接一个"量大管饱"。
清完立刻见效,杀软官网能打开了。
⚠️ 有三个小问题:
第一,文件要先备份或者先截图。 hosts 里的内容本身就是重要证据——它拦了哪些域名,就等于告诉了你它怕什么,分析的时候很有用。
第二,改完先别放松。 恶意软件可以重新写回去。排骨这次是清完 hosts 立刻下杀软,没给它机会。
第三,如果文件存不进去或者一会儿又变回来,说明还有活着的进程在盯着它——那就先回去把进程挂起。
💡 补一条绕路方案: 如果你发现 hosts 改不动、或者改了又变回来,还有一条能绕开的路——用另一台干净的设备(手机、同学的电脑都行)从官网把安装包下好,再拿 U 盘或者数据线拷过来装。
它能拦你的域名解析,拦不了 U 盘。 土办法,但是管用。
五、装上火绒,拿下样本
hosts 清了之后,重新下载安装火绒。这次能正常跑起来了。
装完第一件事:先确认实时防护开着,然后全盘扫描。
这类白签名 + DLL 侧加载的木马,纯手工清理极易残留,因为:
- 它用了有效的数字签名,静态特征看着「合法」
- 有多个目录、多条启动项互为备份,删一个还有别的
- 文件名每次都不一样,按文件名做规则根本拦不住
所以顺序上排骨的建议是:先让杀软全盘扫一遍把能抓的都抓走(同时它会自动隔离留证据),再用 Autoruns 这类工具手工复核漏网的,而不是反过来。
扫描结果和后续的清理复查这里先不展开(下篇会拿它当分析素材),先给一句结论:扫完之后还有残留,而且残留不止一处。
5.1 隔离区就是样本库
火绒扫完,被判定为恶意的文件会进隔离区,文件名就是样本的 SHA1——文件名本身就带着身份标识,导出来直接对应得上。
很多人的做法是「扫完了,点一下清理,收工」。但那样一来,样本就永久消失了,你也就永远没法回答「它到底是什么」这个问题。更麻烦的是,样本一旦没了,连「杀软到底有没有杀干净」都没法验证。
所以排骨做的是:从隔离区把样本还原出来,另外存到一个专门的目录里,留着做分析。(因为手快,部分样本已经没了……)
⚠️ 提取样本也有纪律:
- 提取样本时断网,别去双击它
- 存到专门的隔离目录,用压缩包加密码(惯例密码
infected)封起来,很多杀软会直接拦下未加密的恶意文件- 有条件就扔进虚拟机做,别在装着自己各种账号的物理机上分析
- 分析过程里绝对不执行样本
六、善后,以及那个 zip 到底从哪来
清到一半排骨意识到一个比「删干净」更重要的问题:它到底是怎么进来的?
不知道根源在哪,清干净了也没用——因为你不知道下一次该怎么防。
6.1 用 .lnk 反查时间线
入手点是 Windows 一个目录:
%APPDATA%\Microsoft\Windows\Recent\
这就是「快速访问」里那些最近文件记录的来源。Windows 会给每一个被打开过的文件在这里留一个 .lnk 快捷方式,而 .lnk 里面嵌着完整的原始路径。
这意味着:哪怕文件本体已经被删了,这里还能还原出「你当时打开的是哪个文件、在哪个目录」。
排骨就是用这个方法找到了源头:
| 项 | 值 |
|---|---|
| 投毒文件 | C:\Users\Ray\Downloads\install.g.0.10.zip |
| 打开时间 | 2026-09-11 17:32:41 |
| 首批落地 | 2026-09-11 17:33:24(间隔 43 秒) |
| 文件现状 | zip 本体已被删除,全盘搜索无结果 |
43 秒。 从双击那个压缩包,到第一个恶意文件落地,中间只隔了 43 秒。而那 43 秒里排骨在干嘛?大概率是在解压、在找安装程序、在犹豫要不要点——而它已经在装了。
时间线对得这么死,入口就没有第二种解释了。
6.2 那个 zip 是哪来的
这是整件事里排骨最想讲清楚的一段。
排骨那天在搜索 DeepSeek harness。搜出来的结果里,排在最前面的是一条广告,点进去的站点看着跟官网一模一样。真正的官网,被挤在广告下面。
于是排骨点了上面那个,下了它的「官方安装包」。
那个文件叫 install.g.0.10.zip,命名仿照的就是官方安装包的格式,看不出任何问题。下完当时感觉不对,只把安装包删了,没做进一步检查——但删掉文件并不等于删掉痕迹,真正把这条线索续上的是 6.1 节的 .lnk 方法:文件本体确实找不回来了,找回来的是它的原始路径和打开时间。 这也是本篇排骨觉得最有价值的一次补救。
跟游戏没有半点关系。 当时确实在玩泰拉瑞亚,但那只是让排骨最早发现异常的场景,感染和游戏无关。真正的原因是:
广告位投毒 + 仿冒官网。攻击者不攻击你的电脑,攻击你对搜索结果的信任。
这件事真正吓人的地方在于:它不是「下载破解软件」「逛资源站」这种有明显风险的行为。 搜一个正经工具、点第一条结果,是所有人每天都在做的事。排骨当时唯一的「错」,就是没往下翻一屏去核对真正的官网域名。
所以这节的实用建议只有一条:
| 做法 | 说明 |
|---|---|
| 看到「广告」标记就往下翻 | 搜索引擎会把广告位排在最前,而且标记有时候很不显眼 |
| 核对域名,不要核对页面长相 | 抄页面是最容易的事,域名抄不了 |
| 重要工具直接从收藏夹或手动输域名 | 绕过搜索引擎这一环 |
| 下完先看安装包大小和签名 | 官方安装包通常有数字签名 |
6.3 清理和收尾
杀软扫完、手工复查完,事情其实还只做了一半。排骨当时列的清单:
| 事项 | 做了什么 |
|---|---|
| 清除残留 | 杀软扫不到的边角:空目录、伪装文件、标记文件 |
| 删除恶意启动项 | ⚠️ 注意别删到系统真项,见下 |
| 检查有没有被留后门 | 计划任务、系统服务、WMI 永久事件订阅 |
| 全改密码 + 开两步验证 | 见下 |
| 评估要不要重装 | 见下 |
先说启动项那个坑,这是排骨差点犯的致命错误:
恶意软件的注册表项名会伪装成安全软件组件,比如带上 Tencent、Alibaba、SecurityHealth 这种字眼。而 Windows 自己确实有一个真的启动项叫 SecurityHealth(指向 C:\WINDOWS\system32\SecurityHealthSystray.exe)。
看见带 SecurityHealth 就删,会把系统自己的安全中心启动项删掉。 判断标准只有一个:指向哪个路径。
手动查:
# 看当前用户和全局的 Run 启动项
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run"
- 指向
C:\WINDOWS\system32\→ 系统组件,正常 - 指向
C:\Program Files\下一串乱码字母的目录 → 高度可疑 - 指向
C:\Users\Public\或C:\ProgramData\下的随机目录 → 基本就是恶意
然后说改密码,这条优先级最高。
为什么:这类木马带了完整的网络通信模块(WS2_32.dll、WININET.dll、urlmon.dll 都在它的加载列表里),而它在机器里待了整整三天。所以必须按已经泄露来假设,而且有个关键要求——改密码要用另一台干净的设备,别用中毒的机器:你在中毒机器上敲的每一个新密码,它都能顺手抄走。
改的优先级:邮箱(它是所有账号的找回入口,丢了等于全丢)→ 网银 / 支付 → 微信 / QQ → Steam(有库存和交易)→ GitHub 等开发账号 → 学校教务系统。
改完立刻开两步验证(2FA)。 密码泄露了还有救,因为攻击者不一定解得开 2FA;密码泄露 + 没开 2FA,那就是直接送。
最后是「要不要重装」。 排骨当时的判断是建议重装,理由三条:
- 木马带有效的代码签名,说明对方不是随便玩玩的水平
- 落地目录不止一个,组件冗余,手工清理无法保证彻底
- 杀软被禁用过,无法确认在它控制期间还干了什么
重装前注意顺序:先备份重要资料到移动硬盘 → 用干净机器扫一遍备份 → 再恢复。 顺序反了,等于把病毒一起搬进新系统。
七、复盘
关于这到底是个什么东西。 排骨当时只有两条证据:CPU 常年在 90% 以上,以及它加载了完整的网络模块。这两条能推出「高度疑似挖矿」,但推不出更多。后来把样本哈希送去多引擎平台,才拿到更可靠的方向。


结果是 8 / 28 引擎报毒,其中微软的命名 Trojan:Win64/CoinMiner、安天的 Trojan[Miner] 都直接指向 CoinMiner 类;但没有一家给出统一的家族名——卡巴斯基判的是 not-a-virus:HEUR:RiskTool(风险工具),Avast / AVG 只给了泛化名 MalwareX-gen,GDATA 是 Gen:Variant.Application,而平台自己的家族标签是 AGEN。
⚠️ 这里排骨要纠正自己一个说法:一开始排骨写的是"五家引擎命名一致",这是错的。实际是 8 家报毒、命名各不相同。而且安天那条检出名是
Trojan[Miner]/Linux.CoinMine...——一个 Linux 家族的命名出现在 Windows PE 上,说明引擎在做泛化匹配,不能当成精准定性。多引擎结果只能给方向,给不了定论。
但这个方向来得太晚,对当时的处置没什么帮助。真正救了排骨的是最土的两件事:断网,和翻 hosts。
哪里慢了。 发现环节慢了半天——一直往「画面设置」方向查,直到想起这游戏吃 CPU 才转向。准备环节不及格——没装第三方杀软,而且 Defender 被停用这件事,当晚其实是通过搜索 windowsdefender--enablertp- 发现的,只是发现了也没能把它恢复起来(服务已被停、恶意进程还在守着)。清除环节也不彻底,杀软扫完还有残留,还有一个落地目录是几天后复查才发现的。唯一算合格的是抑制:断网够快。
哪里做对了。 三件事:断网没犹豫;没急着删文件(虽然还是漏了挂起进程这一手);坚持找入口——如果只满足于「病毒删掉了」,那 43 秒的时间线和那个假官网就永远不会被发现,下次还会中。
如果只记三句话:
第一句:卡顿、风扇狂转、进程随机名——先看 CPU 占用前几名,别一上来就调画面。
第二句:出事的第一个动作是断网,不是删文件。
第三句:杀软装不上、官网打不开,先去翻
C:\Windows\System32\drivers\etc\hosts。
最后加一句排骨自己的体会。 这次真正让排骨后怕的不是病毒多厉害,而是入口有多普通——搜一个正经工具、点第一条结果,这是排骨平时闭着眼睛就在做的事。攻击者把力气花在「让你自己走进去」,而不是攻破什么系统。
感谢您能看完我这一篇没什么太大用处的牢骚话,当时因为急着清毒,许多东西都忘了取证,现在就连样本都是残缺的,后面我会尽可能想办法还原出来,单独出一份正式的应急响应报告。


浙公网安备 33010602011771号