Process Dump 是一款 Windows 逆向工程命令行工具,用于将恶意软件内存组件转储回磁盘以便分析。恶意软件文件在执行前通常会被打包和混淆以逃避反病毒扫描器的检测,然而当这些文件执行时,它们通常会解包或注入一个干净的恶意软件代码版本到内存中。恶意软件分析师分析恶意软件时的常见任务就是将这段解包后的代码从内存中转储回磁盘,以便使用反病毒产品进行扫描,或使用静态分析工具(如 IDA)进行分析。
Process Dump 适用于 Windows 32 位和 64 位操作系统,可以转储特定进程或当前所有运行进程中的内存组件。Process Dump 支持创建和使用干净哈希数据库,从而可以跳过转储所有干净文件(如 kernel32.dll)。其主要功能包括:
我在我的网站上维护着官方编译版本: https://split-code.com/processdump.html
您可以从以下地址下载 Process Dump 的最新编译版本:
本工具面向 Visual Studio 2019 设计,并兼容免费的 Community 版本。只需使用 VS2019 打开项目文件并编译即可,应该非常简单!
Process dump 可用于转储内存中所有未知代码('-system' 标志)、转储特定进程,或运行监控模式,在进程终止前转储所有进程。
在首次使用此工具之前,请在干净的工作站上通过以下方式之一生成干净排除哈希数据库:
使用示例:
命令行参数可分组如下:
常规转储选项
干净哈希数据库选项
输出选项
| 选项 | 描述 |
|---|---|
| -v | 详细模式,输出更多调试信息。 |
| -nh | 输出中不打印头部信息。 |
高级选项
在自动化沙箱或进行手动反恶意软件研究时使用 Process Dump,以下步骤可能有用。请确保在干净环境中以管理员身份运行所有命令。
构建干净哈希数据库: 运行 pd64.exe -db gen 或使用更快速但不那么完整的过程 pd64.exe -db genquick。根据情况,您可能希望在创建干净哈希数据库后对虚拟机进行快照,这样每次使用时无需重复该步骤。
启动 Process Dump 终止监控: 让 pd64.exe -closemon 在后台保持运行。它将转储恶意软件使用的所有中间进程。
执行恶意软件文件: 监控恶意软件的安装。pd64.exe 将自动转储任何尝试关闭的进程。
从内存中转储运行中的恶意软件: 准备就绪时,使用 pd64.exe -system 转储所有进程。
转储的组件将位于 pd64.exe 的工作目录中。要更改输出路径,请使用 -o 标志。
转储文件的示例文件名:
| 选项 | 描述 |
|---|
| -system | 从所有可访问进程中转储所有不匹配干净哈希数据库的模块到工作目录。 |
| -pid <pid> | 从指定 PID 中转储所有不匹配干净哈希数据库的模块到当前工作目录。使用 '0x' 前缀可指定十六进制 PID。 |
| -closemon | 以监控模式运行。当任何进程终止时,Process dump 会先转储该进程。 |
| -p <正则表达式进程名> | 从符合过滤器条件的进程名称中,转储所有不匹配干净哈希数据库的模块到指定 PID 的当前工作目录。 |
| -a <模块基址> | 从进程中转储指定基址处的模块。 |
| -o <路径> | 设置转储组件的默认输出根文件夹。 |
| 选项 | 描述 |
|---|
| -db gen | 自动处理几个常见文件夹以及当前运行的所有进程,并将找到的模块哈希添加到干净哈希数据库。它将以递归方式添加以下目录中的所有文件:%WINDIR%、%HOMEPATH%、C:\Program Files\、C:\Program Files (x86)\,以及所有运行进程中的所有模块。这些干净哈希将添加到应用程序目录下的 clean.hashes 文件中。在未来的进程转储命令中,这些已知模块将不会被转储。建议在干净系统上使用工具前先运行此命令一次,以避免转储过多模块。 |
| -db genquick | 与上面相同,但仅将所有进程中的所有模块的哈希添加到干净哈希数据库。这是构建干净哈希数据库的更快方式,但完整性较差。 |
| -db add <目录> | 将指定目录中的所有文件递归添加到干净哈希数据库。 |
| -db rem <目录> | 将指定目录中的所有文件递归从干净哈希数据库中移除。 |
| -nr | 禁用哈希数据库目录添加或移除命令的递归操作。 |
| -db clean | 清空干净哈希数据库。 |
| -db ignore | 本次转储进程时忽略干净哈希数据库。即使找到匹配项,也会转储所有模块。 |
| -cdb <文件路径> | 指定本次运行使用的干净哈希数据库的完整文件路径,以覆盖默认的 clean.hashes。 |
| -edb <文件路径> | 指定本次运行使用的入口点哈希数据库的完整文件路径。 |
| -esdb <文件路径> | 指定本次运行使用的入口点短哈希数据库的完整文件路径。 |
| 选项 | 描述 |
|---|
| -g | 强制从头生成 PE 头,忽略现有头部。 |
| -eprec | 强制重建入口点,即使看起来已存在有效的入口点。 |
| -ni | 禁用导入重建。 |
| -nc | 禁用转储松散代码区域。 |
| -nt | 禁用多线程。 |
| -nep | 禁用入口点哈希。 |
| -t <线程数> | 设置使用的线程数(默认 16)。 |
| 命令 | 描述 |
|---|
pd64.exe -db genquick | 基于当前运行进程快速构建干净模块数据库。后续任务中 Process Dump 将只转储未识别的模块。 |
pd64.exe -system | 转储所有进程中所有模块和隐藏块,同时忽略干净模块。 |
pd64.exe -closemon | 以终止监控模式运行。此模式将在所有进程尝试终止时转储它们。 |
pd64.exe -pid 0x18A | 从特定进程 ID 转储模块和隐藏块。 |
pd64.exe -p .\*chrome.\* | 按进程名称转储模块和隐藏块。 |
pd64.exe -db gen | 构建已知模块的干净哈希数据库。用于在后续任务中避免转储已知的正常模块。 |
pd64.exe -pid 0x1a3 -a 0xffb4000 | 从 PID 中转储特定地址的代码。将生成两个用于分析的文件,分别具有重建的 32 位和 64 位 PE 头:notepad_exe_x64_hidden_FFB40000.exe 和 notepad_exe_x86_hidden_FFB40000.exe。 |