动态分析基础:三剑客监控恶意行为

说实话,静态分析就像看一个人的简历——能看出不少东西,但真正了解一个人,你得看他怎么做。恶意软件也一样。你反汇编看得再透,也不如让它跑起来,看看它到底干了什么。

今天我要讲的,就是动态分析的入门三板斧:Process MonitorProcess ExplorerRegshot。这三个工具,我用了十年,每次分析样本都离不开它们。

为什么需要动态分析?

静态分析有个硬伤——代码混淆。恶意软件作者不傻,他们加壳、花指令、控制流平坦化,目的就是让你看不懂。我遇到过最夸张的一个样本,静态分析花了两天,结果发现是个误报。浪费感情啊。

动态分析就不一样了。你让样本跑起来,它总要干坏事吧?写注册表、创建进程、连接网络……这些行为是藏不住的。说白了,行为不会说谎

核心原则:动态分析不是替代静态分析,而是互补。先动后静,或者先静后动,看情况。我个人习惯是先用动态工具扫一遍,心里有个底,再回头去抠汇编。

Process Monitor:行为记录仪

Process Monitor,简称 ProcMon,是 Sysinternals 套件里的王牌。它能监控文件系统、注册表、进程/线程活动。说白了,样本碰了什么文件、改了哪个注册表键值、启动了哪个子进程,它全给你记下来

实战配置

打开 ProcMon,第一件事不是直接跑样本,而是设置过滤。不然你会被系统日志淹死——Windows 自己每秒就有上千条操作。

过滤规则示例:
Process Name: malware.exe (或者你样本的名字)
Operation: RegSetValue, CreateFile, CreateProcess
Result: SUCCESS, NAME NOT FOUND

嗯,这里要注意。我刚开始用的时候,直接跑样本,结果日志刷了十几万条,根本找不到重点。后来学乖了,先设好过滤,再启动监控。

还有一个技巧:用「Include」而不是「Exclude」。只监控你关心的进程,其他全部忽略。这样日志干净,分析起来快得多。

关键操作解读

操作类型 含义 恶意行为示例
CreateFile 创建或打开文件 释放恶意DLL到系统目录
RegSetValue 修改注册表值 添加开机启动项
CreateProcess 创建新进程 注入到explorer.exe
WriteFile 写入文件内容 下载勒索病毒本体

我曾经分析过一个远控木马,它在 ProcMon 里留下了大量 RegSetValue 操作,全是往 HKCU\Software\Microsoft\Windows\CurrentVersion\Run 里写。一看就知道——持久化。这种痕迹,静态分析很难一眼看出来,但动态监控一目了然。

小技巧:ProcMon 支持「堆栈查看」。双击某条记录,点「Stack」标签,能看到是哪个函数触发的操作。这对定位恶意代码入口点很有帮助。

Process Explorer:进程显微镜

Process Explorer,也是 Sysinternals 的。它比任务管理器强太多了。我常说,任务管理器是玩具,Process Explorer 才是工具

能看什么?

  • 进程树:谁创建了谁,一目了然。恶意软件经常创建子进程来执行 payload。
  • 句柄:进程打开了哪些文件、注册表键、互斥体。恶意软件常用互斥体防止多开。
  • DLL 列表:进程加载了哪些模块。可疑的 DLL 注入,在这里藏不住。
  • 网络连接:进程连了哪个 IP、哪个端口。C2 通信的线索。

实战用法

跑样本前,先打开 Process Explorer,找到样本进程。右键 -> Properties,看 TCP/IP 标签。如果样本正在外连,这里会显示目标 IP 和端口。

我记得有一次,一个样本伪装成系统进程 svchost.exe。名字一样,路径也对,但 Process Explorer 里显示它加载了一个奇怪的 DLL——cryptbase.dll 的路径不对。点进去一看,是个假 DLL。嗯,狸猫换太子的把戏,在 Process Explorer 面前没用。

注意:有些恶意软件会检测 Process Explorer 的窗口类名,发现你在监控就自毁。遇到这种情况,可以用命令行版本 pslist 或者远程监控。

Regshot:注册表快照对比

Regshot 是个轻量级工具,原理很简单:跑样本前拍一张快照,跑完后拍一张,然后对比差异。它不光对比注册表,还能对比文件系统的变化。

操作步骤

  1. 打开 Regshot,点「1st shot」拍第一张快照。
  2. 运行恶意样本。
  3. 等样本跑完(或者等几分钟),点「2nd shot」拍第二张。
  4. 点「Compare」,生成差异报告。

就这么简单。但有个坑——样本可能跑得很快,几秒就结束了。你还没来得及拍第二张,它已经干完活自毁了。怎么办?

我的做法是:先拍第一张快照,然后启动样本,等 10-15 秒再拍第二张。如果样本有延时执行的行为,可以等更久。实在不行,用 ProcMon 配合,看样本什么时候停止活动。

差异报告怎么看?

Regshot 生成的报告是纯文本的,会列出所有新增、修改、删除的注册表键和文件。重点关注:

  • Run 键HKCU\...\RunHKLM\...\Run,开机启动的经典位置。
  • 服务键HKLM\SYSTEM\CurrentControlSet\Services,恶意服务注册的地方。
  • 文件新增:特别是 %TEMP%%APPDATA%System32 目录下的新文件。

我曾经遇到一个样本,Regshot 报告显示它在 %APPDATA%\Microsoft\ 下创建了一个 svchost.exe。名字跟系统进程一样,但路径不对。这就是典型的伪装持久化

进阶用法:Regshot 支持命令行模式。你可以写个批处理,自动拍快照、跑样本、对比、输出报告。适合批量分析。

三剑客配合使用

这三个工具不是孤立的。我一般这样配合:

  1. 先开 Regshot 拍第一张快照
  2. 打开 ProcMon,设好过滤,开始监控。
  3. 打开 Process Explorer,定位到样本进程。
  4. 运行样本
  5. 观察 Process Explorer 里的进程树、网络连接变化。
  6. 等样本跑完,停掉 ProcMon,拍 Regshot 第二张快照。
  7. 对比 Regshot 报告,结合 ProcMon 日志,交叉验证。

这样一套下来,样本的文件操作、注册表修改、进程创建、网络通信全都被记录在案。你想想看,一个恶意软件,它的所有行为都被你盯着,它还能藏什么?

知识体系图

下面这张图,是我自己总结的动态分析知识体系。三剑客各司其职,又互相补充。

动态分析三剑客知识体系 恶意样本动态分析 Process Monitor 文件/注册表/进程操作 实时监控 + 过滤 堆栈回溯定位 Process Explorer 进程树/句柄/DLL 网络连接监控 模块验证 Regshot 快照对比 注册表差异分析 文件系统变化 配合使用流程 Regshot快照 → ProcMon监控 → ProcExplorer观察 → 运行样本 → 停止监控 → 对比分析 三份数据交叉验证,恶意行为无所遁形

避坑指南

最后,分享几个我踩过的坑:

  • 样本有反虚拟化检测:有些样本检测到在虚拟机里就跑,或者跑假行为。我建议用真实硬件或者配置好的沙箱。
  • ProcMon 日志太大:不设过滤的话,跑一分钟就能生成几百 MB 日志。设好过滤,只关注目标进程。
  • Regshot 对比结果太多:系统本身也在不断写注册表。重点关注 RunServicesAppInit_DLLs 等关键位置。
  • 样本自删除:有些样本跑完就删自己。没关系,ProcMon 和 Regshot 已经记录了它的行为。

我曾经遇到一个样本,它在 ProcMon 里显示创建了一个文件,但 Regshot 对比却没发现。为什么?因为它创建完马上就删了。这就是临时文件的典型行为。两个工具一对照,问题就清楚了。

好了,动态分析的基础就这些。工具不难,难的是怎么解读数据。多练,多看,慢慢就有感觉了。


公众号:蓝海资料掘金营,微信deep3321