简介CuteVirusCollection 是一份面向恶意软件行为观察与计算机安全入门实验的小型病毒样本合集主题围绕 Windows XP/7/10 环境下的“可爱但致命”脚本与程序标签涉及 JavaScript、C、Java、Shell、批处理及 HTML 等源码形态。压缩包约 47KB上游未提供文件总数与类型明细因此更适合作为按需浏览的轻量样本包而非完整课程资料现有 2045 人学习或下载。内容按灾害等级组织入门级展示弹窗骚扰、鼠标与窗口干扰、强制关机等表现进阶级涉及内存占用、命令提示符与浏览器窗口激增、进程炸弹等资源耗尽现象更高等级则给出递归批处理等示例。读者可借此建立对异常进程、资源占用和系统崩溃表象的直观认识并配合隔离虚拟机理解防护与排查思路。适合已有基础安全概念、希望以短小案例对照观察系统资源异常的学习者。1. 先别急着双击真正的风险不在样本本身第一次在这类合集上翻车不是因为样本多凶是因为忘了拍快照。那台虚拟机上还挂着上一轮的实验记录一个批处理炸弹跑起来任务管理器三秒没响应我直接按了电源键三个小时的观察日志全没了。后来才想明白CuteVirusCollection 这种自称 harmless、funny 的小型合集危险系数不取决于里面写得多狠而取决于你把它放在哪儿跑。这批东西横跨 windows-xp-7-10 三代系统标签从 batch、shell 到 c、java、javascript还有一批 CHTML 时代的老式弹窗玩法。绝大多数确实只是骚扰级恶作剧弹窗、卡死、自动关机、窗口抖动、假蓝屏。可只要混进一个 fork 式的进程炸弹就够没做隔离的人重装一次系统。这篇写给三种人想入门恶意代码分析的新手、要给团队做安全意识演示的人、手上有旧机器想折腾的老手——讲清楚怎么在隔离环境里看懂它们、控制它们、收拾干净。2. 修牢笼把实验环境搭成一台随时可以扔掉的机器2.1 为什么必须是快照而不是我会小心人工小心这件事在恶意样本面前基本不成立。人的第一反应是去点关闭按钮而这批样本里有整整一类的工作方式就是你越关我越开——窗口轰炸、弹窗循环、进程递归全都设计成让手动干预失效。你会在三秒内失去对键盘鼠标的控制权然后剩下的时间只能靠宿主的强制关机来收场。快照的价值不在于能恢复而在于它把恢复成本从几小时压到三十秒。成本降下来之后你才敢做真正有价值的实验让它跑满五分钟看会不会自我终止、连点十次看它是不是幂等、在断网状态下看它有没有重试外联。这些观察才是分析的核心而它们全都建立在我不怕弄坏它这个前提上。判断依据很简单备份是数据层面的快照是整机状态层面的。样本改了注册表、换了壁纸、塞了几个启动项这些都不在文件备份的覆盖范围里。做样本行为分析只有整机快照算数。还有一条容易被忽略虚拟机磁盘文件不要放在任何会自动同步的目录里比如各种云同步盘。样本落盘的一瞬间就会被同步出去等你反应过来被污染的是你所有登录了同一个账号的设备。这是我见过代价最高的一种翻车方式而且全程没有任何报错提示。2.2 环境参数表内存、磁盘、网络、共享目录怎么配环境不用豪华但每一项都有非它不可的理由。下面这套是我踩过几轮之后固定下来的直接照抄能用配置项建议值为什么这么定vCPU / 内存2 核 / 4 GB进程炸弹类需要足够 CPU 才能暴露指数增长的形态但又不至于把宿主拖死磁盘40 GB 精简置备快照会占空间精简置备让每次实验多留两三份快照不至于爆盘网络仅主机Host-Only或直接断开蠕虫类存在自我复制和外联的可能桥接模式等于把实验品放进真实网段共享目录只读单独建一个投递区反向的一次写操作就能把宿主目录污染见第 5 章系统版本XP / 7 / 10 各备一份标题明说覆盖这三代CHTML 和 HTA 类在 XP 上的行为和 10 上差得远剪贴板 / 拖放全部关闭有一类恶作剧就是往剪贴板塞东西、拖放文件劫持快照至少两个baseline-clean、pre-run-样本名基线用于比对运行前快照用于单次回滚为什么三代系统都要备因为样本的破坏力跟系统年代强相关。XP 上没有 UAC没有对 mshta 的额外限制一个 .hta 拿到的是完整的当前用户权限同样的文件在 Windows 10 上可能弹出一次确认就结束了。你要判断一个样本到底能不能造成实际影响必须放在它针对的那一代系统上看而不是在自己日常用的最新系统上说没啥反应啊。老系统只建议在完全断网的虚拟机里开别接桥接、别映射物理盘符。这一条不是保守是因为老系统上能触发的行为太多你没法逐个预判。2.3 开工前的五项自检少一项都别点运行这五项我现在是写进流程里的每次新建环境强制执行一遍十分钟换一个安心。第一快照能回滚。拍完立刻回滚一次确认真的能回去、回去之后状态干净。很多人拍了快照却没验证过等到需要回滚时发现磁盘空间不足、快照链损坏那时候已经没有后悔药了。第二断网真的断了。在客体里 ping 一个不存在的外网地址看是不是立刻超时而不是慢慢等待同时看虚拟网络适配器的状态图标别信我点了断开这个动作本身。第三共享目录是只读。在客体里尝试往共享目录写一个文件应当明确失败。写不进去才是对的能写进去就说明你还开着一条污染通道。第四宿主防护对虚拟机目录做了排除。这一步看起来反直觉但不做会引出大量玄学问题样本刚解压就被宿主的实时防护从虚拟磁盘里挖走表现为双击没反应进程起来一秒就消失你会以为是样本不兼容当前系统实际上是它根本没活到执行那一步。第五关闭剪贴板共享和拖放。有一批老样本的玩法就是疯狂往剪贴板塞文本、劫持拖放目标。你不想在宿主的文档里 CtrlV 出一堆莫名其妙的东西。2.4 让行为留下痕迹三个不装第三方驱动的观察手段样本跑起来之后你只有两种结果要么留下了可分析的痕迹要么白跑一次。为了不白跑环境里至少要有三条记录通道而且都不依赖第三方驱动避免驱动本身干扰样本行为。任务管理器含资源监视器负责看宏观CPU、内存、句柄数、进程树结构。Windows 7 以上默认不显示GDI 对象和用户对象两列要在选择列里手动勾上——这两列恰恰是崩溃类样本最直接的证据。宿主侧的屏幕录制负责看微观弹窗顺序、标题变化、壁纸被改的时间点。为什么不录在客体里因为有一类样本会主动关闭录屏窗口宿主录不到干扰。WMI 事件订阅负责记录进程创建的全过程这一条比任务管理器可靠因为任务管理器在窗口卡死的时候也一起卡死了# 在客体里以管理员身份运行只做记录不拦截任何进程 # 订阅 WMI 的进程创建事件把 时间/PID/父PID/进程名 追加到日志 $log D:\trace\proc.log New-Item -ItemType Directory -Force -Path (Split-Path $log) | Out-Null $query New-Object System.Management.EventQuery $query.QueryString SELECT * FROM Win32_ProcessStartTrace $watcher New-Object System.Management.ManagementEventWatcher $query Register-ObjectEvent -InputObject $watcher -EventName EventArrived -Action { $e $Event.SourceEventArgs.NewEvent $line {0:HH:mm:ss.fff} PID{1} PPID{2} NAME{3} -f (Get-Date), $e.ProcessID, $e.ParentProcessID, $e.ProcessName Add-Content -Path $log -Value $line } | Out-Null $watcher.Start()Win32_ProcessStartTrace是系统内置的进程创建事件源XP 之后都支持开销很低。日志一定要写到非系统盘的分区因为进程炸弹类的第一件事就是把系统盘塞满或者把系统盘上的日志刷掉。注意Register-ObjectEvent是异步注册的脚本执行完事件订阅还在后台跑别把 PowerShell 窗口关了。为什么用时间戳精确到毫秒因为批处理递归的典型特征是同一秒内出现几十条 PID 递增的记录父进程 ID 连成一条链——这条链就是自我调用的铁证比任何描述都直观。3. 拆骨架这批样本靠五类机制活着3.1 批处理炸弹batch bomb两行文本怎么把 CPU 吃满标签里的 batch 指向的那批样本本质是利用批处理解释器的一个特性%0代表脚本自身。只要在脚本里以某种方式再次调用%0就形成了自我递归。每次调用都会拉起一个新的 cmd.exe 实例实例数量按指数增长——1 变 22 变 4几秒钟内就是几百个。最典型的识别特征是任务管理器里 cmd.exe 排成长长一列CPU 直接 100%鼠标还能动但点不动任何东西因为窗口消息队列已经被进程创建事件淹没了。这类样本一个字都不写文件、不碰注册表它只消耗调度器资源所以你查启动项、查文件时间线全都没有收获——这会让新手以为没跑起来然后反复双击。判断它无害的前提是你能在十秒内掐断。超过三十秒虚拟机 CPU 抢占会让宿主也开始卡你连管理界面都点不开。所以这类样本的观察重点不是它能干什么而是在多长时间内会失控这个数据决定了你后面所有实验的安全窗口。顺带一提标签里的 shell 在 Windows 环境下多半落到 .bat / .cmd 上真正的 .sh 在这三代系统上根本跑不起来。看到 shell 别条件反射以为是 Linux 那套先看文件扩展名和文件头。3.2 CHTML 与 HTA弹窗轰炸为什么总从浏览器边上钻出来CHTML 这个标签指向的是一批用 HTML / HTA 页面做载体的老式样本。它们的核心不是漏洞利用而是合法能力的滥用页面里的脚本可以无限window.open新窗口、无限alert、修改窗口标题、劫持关闭按钮的行为。你按 AltF4 关掉一个关闭的瞬间又有一个新的被创建永远关不完。这条路能走通的关键是mshta.exe——Windows 自带的 HTML 应用宿主。它执行 .hta 文件时的权限是完整的当前用户权限不是浏览器沙箱。也就是说一个 .hta 能干的事和一个 exe 差不多读写文件、改注册表、起进程。很多老样本干脆就是一个 .hta 加一行跳转成本极低。观察点应该放在两处一是进程树里 mshta.exe 或 iexplore.exe 的子进程关系二是窗口数量的增长速度。如果每秒新增超过五个窗口靠手动关是不可能的正确做法是直接结束整个进程树或者干脆 CtrlAltDel 走安全桌面注销。对防御方来说这条链的收紧方式很明确这类老宿主在很多企业环境里根本用不上能禁就禁个人实验环境里至少要知道它的存在看到一个陌生 .hta 别当成普通网页双击。3.3 崩溃类crashC 写的小 exe 让桌面失去响应的三种路子标签里的 c 指向编译好的小型可执行文件这一类是合集里最硬的部分因为它们不依赖解释器双击就能跑。让桌面失去响应通常走三条路。第一条是消息洪水疯狂向系统或其它窗口发送窗口消息接收方的消息队列被塞满界面线程再也处理不了输入。表现是窗口还在但点什么都没反应。第二条是 GDI / 用户对象耗尽。每个窗口、每个菜单、每个光标都要占用图形对象系统对每个进程有上限通常一万个左右。不停地创建窗口而不销毁很快就摸到天花板之后整个桌面绘制开始出错出现黑块、残影、按钮画不出来。第三条是句柄耗尽。文件句柄、事件句柄、互斥体句柄只创建不释放进程句柄表涨到系统上限后续所有需要句柄的操作全部失败。三条路的观察点不同但可以一起看。句柄数用一行命令就能采样# 每两秒采样一次打印句柄数最高的三个进程 # 句柄数持续单调上涨且不回落基本可以判定是只创建不释放 while ($true) { Get-Process | Sort-Object HandleCount -Descending | Select-Object -First 3 Name, Id, HandleCount | Format-Table -AutoSize Start-Sleep -Seconds 2 }GDI 对象数 PowerShell 拿不到只能在任务管理器的选择列里打开GDI 对象和用户对象两列肉眼看。如果这两个数字在几十秒内从几百冲到接近一万就别等它跑完了直接回滚。3.4 脚本层骚扰JavaScript 与 shell 是最适合新手读源码的一类标签里的 javascript 在这批合集里通常不是指网页而是指 Windows 脚本宿主WSH跑的 .js 文件。这类样本最大的优点是源码完全可读不用反编译、不用调试器记事本打开就能看懂它想干什么。对刚入门的人来说从这里开始读源码的性价比最高。常见的骚扰手法就那么几种无限alert阻塞用户操作、循环改窗口标题、禁用右键菜单、把桌面图标藏起来、往剪贴板塞内容、自动打开光驱老梗、定时关机。shell 类的 .bat 手法也类似改壁纸、隐藏任务栏、改注册表里的策略键禁用任务管理器。这里有个值得记住的细节脚本类样本的破坏绝大多数落在用户配置区也就是HKCU分支和用户目录下。这意味着它影响的是当前登录用户换个账户登录就干净了同时也意味着系统盘快照回滚一定能清掉它不需要重装。标签里带 java 的那部分实际文件可能真是 .jar也可能只是作者归类时的误标。看到 java 标签别先入为主先看文件头.jar是 zip 结构用解压工具能打开看目录如果是 PE 文件那说明标错了。3.5 蠕虫worms与自复制判断无害到底看哪几个指标合集标题里的 worms 是最需要谨慎对待的一类因为无害和会自我复制这两个属性放在一起在实验环境里照样能造成真实麻烦它会越堆越多直到把磁盘和进程表占满。判断一个自复制样本的边界我一般看四个指标观察项看哪里可接受的形态需要立刻停手的形态自启动启动文件夹、Run 键、计划任务只写自己一次多路径冗余写入、反复重写复制范围当前目录、盘符遍历只在当前目录留副本遍历所有盘符和可移动盘横向移动网络连接、共享枚举无任何网络行为主动尝试连接内网地址外联DNS 查询、HTTP 请求无有固定域名或 IP 重试四个指标里只要出现遍历盘符或主动连内网中的任意一个就不要在还连着任何真实网络的机器上继续了。哪怕它只是复制文件不搞破坏扩散范围也会超出你的控制。另外一个容易被忽略的点自我复制的样本会把共享目录当成一个盘来遍历。如果你的投递区设成了可写它就会顺着这条路爬到宿主上。第 5 章会专门讲这个坑。4. 逐个复现五步流程、观察点与随时掐断的手法4.1 固定五步法每跑一个样本都走一遍跑样本这件事最怕随心所欲一旦流程不固定你就会在某个环节漏掉记录然后为了补数据重跑一遍等于把风险翻倍。我现在固定五步一步不省。第一步拍快照。命名规则用pre-run-样本名别用快照1快照2一周之后你根本分不清哪个是哪个。拍完顺手记一下当前的系统时间后面比对文件时间线要用。第二步投递。从只读共享目录把样本复制到客体的本地工作目录绝不在共享目录里直接双击。共享目录是通道不是工作区。第三步单步执行。一次只跑一个样本。批量跑看起来效率高实际上行为互相干扰日志全是噪音最后还得重来。第四步记录四张表。进程、文件、注册表、网络缺一张后面就说不清楚。记录表模板如下直接抄维度记录内容采集方式进程新增 PID、父 PID、命令行、存活时长WMI 事件日志文件新增/修改文件的完整路径、时间、大小运行前后各扫一次目录注册表变更的键路径、值名、新旧值运行前后各导出一次关键分支网络连接目标、端口、是否重试资源监视器或 netstat 定时采样第五步回滚或清理。优先回滚。只有在需要连续观察同一环境下的多次行为时才走手工清理而且清理完必须再验证一遍第 6 章讲怎么验证。4.2 批处理类先记录 PID 再运行掐断时只杀新增进程批处理炸弹的难点不在跑在停。很多人第一反应是taskkill /f /im cmd.exe这个命令有两个致命问题会把你自己的跟踪窗口一起杀掉如果样本把自己的进程名改成 explorer.exe 之类按名字杀会误伤系统进程直接把桌面搞没。正确做法是按 PID 差集来杀。运行前存一份基线运行后只处理基线里没有的# 运行样本之前先存一份当前所有进程 PID 的基线 Get-Process | Select-Object -ExpandProperty Id | Sort-Object | Set-Content D:\trace\pid-baseline.txt # 样本跑起来之后在另一个窗口执行只杀基线之外的新增进程 $base Get-Content D:\trace\pid-baseline.txt Get-Process | Where-Object { $base -notcontains $_.Id } | ForEach-Object { kill {0} (PID{1}) -f $_.Name, $_.Id Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue }$base -notcontains $_.Id这个判断是核心它保证只动新增的东西。Stop-Process -Force对应任务管理器的结束进程不做优雅退出握手——面对递归进程优雅退出等于给它时间再开十个。一个必须知道的风险杀掉父进程之后子进程会被孤儿化继续存活所以这条命令通常要连跑两到三次每次都重新取一次差集直到新增列表为空。别指望一次净空。另外基线文件本身要放在非系统盘因为这类样本把系统盘写满的概率不低日志和基线一起丢了你连杀了哪些都说不清。4.3 脚本类先静态读再动态跑脚本类样本的正确顺序是反过来的先读后跑。因为源码就在那儿跑起来除了证明它确实会弹窗之外几乎没有新增信息反而要承担清理成本。静态读的第一步不是从头读到尾而是先定位它碰了哪些系统能力。用一段扫描把关键词命中的行都列出来再回头看上下文# 扫描样本目录下的文本型脚本列出命中的敏感关键字和行号 # 命中不等于恶意只是标记出这段代码触碰了系统能力的位置 $patterns ( shell\.Application, WScript\.Shell, mshta, reg add, schtasks, CurrentVersion\\Run, Startup, shutdown, taskkill, DisableTaskMgr ) Get-ChildItem -Path .\samples -Include *.bat,*.cmd,*.js,*.vbs,*.hta -Recurse | ForEach-Object { $leaf $_.Name Select-String -Path $_.FullName -Pattern $patterns -AllMatches | ForEach-Object { {0}:{1}: {2} -f $leaf, $_.LineNumber, $_.Line.Trim() } }shell.Application和WScript.Shell是脚本调用系统能力的两个主要入口看到它们就意味着这个脚本能起进程、能操作文件系统。CurrentVersion\\Run和Startup是持久化的经典落点。DisableTaskMgr一出现基本可以确定它准备让你关不掉任务管理器。读完再决定跑不跑。如果源码里只有alert循环和一两个窗口操作动态跑一次验证行为就够了如果里面有盘符遍历、有网络请求那就别在这个环境里跑了先静态分析清楚再说。顺便说一个读源码时容易被骗的地方字符串拼接。很多脚本不会直接写shutdown而是拆成几段拼起来扫描扫不到。看到大量变量拼接的地方手动把它们还原这一步没有捷径。4.4 崩溃类区分假死和真崩的三个判据崩溃类样本跑起来之后你面对的第一个问题不是分析是判断还能不能救。三个判据按顺序试。判据一CtrlShiftEsc 能不能弹出任务管理器。能弹出来就是假死说明系统还在调度只是前台窗口的消息队列堵了。这时候别急着关进程先看一眼 CPU 和句柄数把数据记下来再动手。判据二CtrlAltDel 有没有反应。这个组合走的是安全桌面独立于用户会话的窗口管理器所以即使普通桌面完全卡死它通常还能出画面。能出就说明只是前台进程的问题注销当前用户即可恢复不用回滚。判据三宿主侧看虚拟机进程的 CPU 曲线。如果客体黑屏或蓝屏同时虚拟机进程的 CPU 归零那就是真崩了直接回滚别在客体里做任何抢救动作。反过来如果 CPU 还是满的但界面没反应说明它还在跑属于假死范畴。这三个判据的意义在于节省时间。新手常见做法是卡死之后疯狂按键盘、反复点鼠标指望它自己恢复五分钟过去什么都没记录到。有判据之后三十秒内就能决定是救还是扔。4.5 蠕虫类用启动项和文件时间线抓现行自复制样本的行为落点很集中启动项加文件副本。所以复现之前先把这两处的基线拍下来跑完再对一遍新增的东西一目了然。# 列出四个常见自启动位置的内容文件位置看写入时间注册表位置看值 $filePaths ( $env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup, $env:ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp ) foreach ($p in $filePaths) { if (Test-Path $p) { Write-Output $p Get-ChildItem $p -ErrorAction SilentlyContinue | Select-Object Name, Length, LastWriteTime | Format-Table -AutoSize } } $regPaths ( HKCU:\Software\Microsoft\Windows\CurrentVersion\Run, HKLM:\Software\Microsoft\Windows\CurrentVersion\Run ) foreach ($r in $regPaths) { if (Test-Path $r) { Write-Output $r Get-ItemProperty $r | Format-List } }文件位置用Get-ChildItem能看到写入时间注册表位置看不到时间只能看值本身——所以注册表这部分必须靠运行前导出一份、运行后再导出一份来对比靠肉眼看是看不出来的。文件时间线还有一个更有用的用法把整个用户目录按LastWriteTime倒序排取前二十条。样本复制出来的副本、改过的配置文件全都会挤在这个列表的顶部。这个技巧比重装一遍杀毒软件还快。5. 踩过的坑五条排查记录每条都能让你少重装一次5.1 样本跑不起来先查宿主这一侧现象双击没反应或者进程起来一秒就消失事件日志里什么都没有看起来像是这个样本跟当前系统不兼容。原因宿主上的实时防护扫描到了虚拟机磁盘文件里的样本特征直接把它隔离或者删除。你以为你在客体里双击了一个文件实际上那个文件在几毫秒前已经被宿主从虚拟磁盘里挖走了。还有一种表现是虚拟机磁盘被独占锁定开机直接报磁盘占用。解决把虚拟机磁盘所在的整个目录加进宿主防护的排除列表。如果宿主策略不允许排除就把样本集中放在带密码的压缩包里需要哪个在客体内部解压哪个落盘范围限制在虚拟机里。排除列表这件事一定要在开实验之前做事中做的话你已经分不清哪些行为异常是样本造成的、哪些是文件被删造成的。5.2 快照回滚了行为却没回到基线现象回滚之后壁纸还是被改过的样子或者启动项里还留着样本写的值桌面图标位置也没变。原因改动落在了快照覆盖范围之外。最常见的是挂了一块独立的数据盘用来放样本和日志那块盘不在快照里其次是样本把副本写进了共享目录而共享目录指向宿主回滚客体对它毫无影响。解决把快照只保护系统盘这件事当成常识记住。凡是挂在快照外的盘要么设成只读要么每次实验前重建。共享目录的写权限按第 2 章那张表来配别为了方便临时改成可写改一次就会忘一次。5.3 共享目录写成可写宿主被污染现象宿主的投递区里莫名其妙多出几个文件文件名跟样本一模一样还有几个是副本的副本。原因投递区设了可写样本自我复制时会遍历所有可访问的位置。共享目录在客体看来就是一个网络盘跟本地盘没什么区别照样遍历。解决投递区一律只读。需要从客体往外带文件比如导出的日志、截图单独挂一个可写盘用完立刻删除并重建。这个洞的可怕之处在于它是双向的客体里的东西能出去意味着宿主上的东西也能进来样本可以顺着这条路摸到你的真实文件。5.4 鼠标被锁在虚拟机里出不来现象全屏模式下键盘鼠标完全被客体接管按宿主的释放快捷键没反应宿主桌面就在那儿但点不到。原因样本疯狂抢焦点、不停创建窗口宿主的输入释放指令被淹没在消息流里没生效。全屏模式会加剧这个问题因为鼠标被强制捕获。解决不要在实验时用全屏用窗口模式鼠标的逃逸路径始终存在。如果已经被锁住先在宿主任务管理器里找到虚拟机进程直接结束别在客体里挣扎。这一条顺带引出一个习惯做实验的时候宿主上不要开着没保存的文档强制结束虚拟机进程是常规操作不是意外。5.5 弹窗关不掉任务管理器也被禁用现象AltF4 无效关一个开两个CtrlShiftEsc 弹出来一行提示说任务管理器已被管理员禁用。原因脚本类恶作剧的经典手法改HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System下的DisableTaskMgr值为 1。改的是当前用户策略不需要管理员权限。解决CtrlAltDel 走安全桌面能出注销界面就用注销注销会结束当前用户会话把这个键的影响一并带掉。出不来就在宿主的虚拟机管理界面强制关机然后回滚。我不建议在客体里跟它死磕比如手动去改注册表——窗口一直在抢焦点你连注册表编辑器都点不开。6. 收场怎么证明这台机器已经干净了回滚完成不等于收工。我现在的习惯是每次实验结束跑一遍三项验证花五分钟能挡住绝大多数以为干净了其实没有的情况。验证项具体做法通过标准启动项对比基线快照里的启动文件夹和 Run 键内容逐字一致无新增项网络连接断网状态下看是否有进程在重试连接无持续重试的连接请求文件时间线用户目录按最后写入时间倒序取前二十条无实验期间新增的陌生文件三项里最容易漏的是第三项。启动项和网络很多人会查但样本把副本藏在%TEMP%或者某个用户目录的深处靠肉眼翻是翻不到的只能靠时间线排序。倒序取前二十条这个动作比全盘扫描快得多命中率还高。还有一个常被忽略的收尾动作把本次实验的记录归档。进程日志、注册表前后对比、截图按样本名建目录存一份。理由是这批合集的样本量大、种类杂你隔两周再回来看只记得跑过绝对想不起跑出什么。归档成本很低价值在后面。回过头看我在这批可爱病毒上学到的最有用的一条不是某个样本的技术细节而是一个流程习惯任何可疑文件在双击之前先问自己三件事——快照拍了吗、网断了吗、我知道怎么在十秒内掐断它吗。三个问题里有一个答不上来就先别点。这条规则后来被我搬到了几乎所有带风险的操作上包括跑来源不明的构建脚本、执行别人发来的安装包。这份合集本身的价值也在这儿它够温和温和到你可以反复犯错的成本很低又够杂从 batch、shell 到 c、javascript、CHTML 各类载体都有是一份很合适的入门级恶意代码行为分析靶场。我把它按系统代际分好目录存了一份需要的可以直接拿去用记得先按第 2 章把牢笼修好再动手。希望帮到你。本文还有配套的精品资源点击获取