恶意软件分析:如何在内存转储中查找可执行代码?
内存转储中查找可执行代码的实操方法
一、用Volatility定位可执行代码
- 先确认转储文件的匹配profile:执行
volatility -f [你的dump文件路径] imageinfo,从输出里选最匹配的profile(比如Win7SP1x64),这是所有操作的基础,profile错了后续都无效。 - 枚举进程加载的模块:用
volatility -f [dump路径] --profile=[profile名] dlllist,逐个排查进程,重点盯无数字签名、路径不在系统目录的可疑进程。 - 提取目标进程内存:找到可疑进程的PID后,执行
volatility -f [dump路径] --profile=[profile名] procdump -p [PID] -D [输出文件夹],把进程内存导出成文件,直接用IDA、Ghidra这类反汇编工具打开分析。 - 扫描可执行内存页:用
volatility -f [dump路径] --profile=[profile名] vadinfo,筛选Protect属性为PAGE_EXECUTE_READWRITE(RWX)或PAGE_EXECUTE_READ(RX)的内存区域——恶意软件常把代码注入这类可执行权限的内存块。
二、用WinDbg分析内存转储
- 加载转储文件:打开WinDbg后,通过
File -> Open Crash Dump加载你的内存dump,加载完成后先跑.symfix和.reload加载系统符号(恶意软件没符号,但系统符号能帮你定位进程边界)。 - 列出所有进程:执行
!process 0 0,找到可疑进程的EPROCESS地址(比如ffff880123456780)。 - 切换到目标进程空间:执行
.process /r /p [EPROCESS地址],切换后就能访问该进程的虚拟内存。 - 扫描可执行内存区域:用
!vadump [EPROCESS地址]查看进程的VAD列表,找Protect列带RWX/RX的区域,然后用u [起始地址]直接反汇编该区域,或者用内存dump命令导出块。 - 搜索PE文件头:恶意软件可能注入完整PE文件,执行
s -u [起始地址范围] L[长度] 4D 5A搜索MZ标志(PE文件的起始标识),找到后用dd [地址]验证PE结构,确认后提取分析。
三、额外排查技巧
- 优先盯异常进程:比如无父进程、命令行参数奇怪、进程名仿冒系统进程的,这类大概率是恶意软件的载体。
- 用malfind快速定位可疑区域:Volatility的
malfind插件能自动标记异常内存块,执行volatility -f [dump路径] --profile=[profile名] malfind -D [输出目录],导出的文件直接用反汇编工具打开。 - 对比干净系统转储:如果拿不准哪些区域异常,找同版本系统的干净内存转储做对比,差异区域就是重点排查对象。
内容的提问来源于stack exchange,提问作者cheon
相关产品推荐
相关产品推荐

