PE(Portable Executable)文件是Windows操作系统中的可执行文件格式,包括.exe、.dll、.sys等,通过PE命令可以分析PE文件的结构、导入/导出表、节区信息、资源等,帮助开发者或安全研究人员了解文件特性,本文将详细介绍常用PE命令的使用方法,涵盖Windows自带工具及第三方工具的操作步骤。
Windows自带工具:dumpbin命令
dumpbin是Visual Studio附带的命令行工具,无需额外安装,可直接在“开发人员命令提示符”中使用,其基本语法为:
dumpbin [选项] 文件名
常用参数及功能说明(通过表格整理更清晰):
参数 | 功能描述 | 示例命令 |
---|---|---|
/headers |
显示PE文件头信息(DOS头、PE签名、文件头、可选头等) | dumpbin /headers notepad.exe |
/imports |
列出导入的DLL函数及API名称 | dumpbin /imports notepad.exe |
/exports |
列出导出的函数名称及序号 | dumpbin /exports kernel32.dll |
/section |
显示节区名称、虚拟大小、 raw大小等 | dumpbin /section notepad.exe |
/dependents |
列出文件依赖的所有DLL文件 | dumpbin /dependents notepad.exe |
/summary |
显示文件摘要(机器类型、节区数量、入口点等) | dumpbin /summary notepad.exe |
实例演示:分析notepad.exe的头部信息
- 打开“开发人员命令提示符”(开始菜单搜索“Developer Command Prompt”)。
- 输入命令:
dumpbin /headers C:WindowsSystem32notepad.exe
,回车执行。 - 输出结果中关键信息包括:
- Machine:
0x14C
(表示x86架构,0x8664为x64)。 - Characteristics:
0x202
(表示可执行文件,带调试信息)。 - AddressOfEntryPoint:入口点地址(程序执行的起始位置)。
- SectionAlignment/FileAlignment:节区对齐和文件对齐大小。
- Machine:
Linux工具:readpe命令
在Linux环境下,可通过readpe
(来自binutils
包)分析PE文件,基本语法为:
readpe [选项] 文件名
常用参数:
-h
/--headers
:显示PE头信息(与dumpbin的/headers
类似)。-i
/--imports
:列出导入表。-e
/--exports
:列出导出表。-s
/--sections
:显示节区详细信息。
示例:分析Windows PE文件
若已将Windows的notepad.exe
复制到Linux系统,执行:
readpe -h notepad.exe
输出会包含PE签名("PE "
)、文件头中的NumberOfSections
(节区数量)、可选头中的Subsystem
(子系统类型,如Windows GUI为2)等。
第三方工具:PEiD与CFF Explorer
PEiD(检测壳类型)
PEiD是图形化工具,可快速识别PE文件是否加壳及壳类型(如UPX、ASPack等),使用步骤:
- 打开PEiD,点击“文件”→“打开”,选择目标PE文件。
- 在“扫描结果”窗口中,若显示“[! None !]”表示未加壳,否则显示壳名称(如“UPX 3.91”)。
CFF Explorer(详细结构分析)
CFF Explorer是功能强大的PE编辑器,支持查看/修改PE结构,使用步骤:
- 打开CFF Explorer,加载PE文件后,左侧窗格显示结构树(DOS头、NT头、节区、导入表等)。
- 点击“IMAGE_OPTIONAL_HEADER”→“Data”,可查看“Magic”字段(0x10b为32位,0x20b为64位)、入口点地址、基址等。
- 切换到“IMPORT”标签页,查看导入的DLL及API函数。
注意事项
- 权限问题:分析系统关键文件(如
kernel32.dll
)时,需以管理员身份运行工具。 - 文件备份:使用PE工具修改文件前,建议备份原文件,避免损坏导致程序无法运行。
- 字符集兼容:部分工具输出可能涉及ANSI/Unicode编码,建议用记事本等工具打开查看。
相关问答FAQs
Q1: 使用dumpbin分析PE文件时提示“无法访问文件”,如何解决?
A: 可能原因包括:文件被占用(如正在运行)、未以管理员身份运行命令提示符、文件路径包含空格未用引号括起,解决方法:关闭目标程序后重试,或以管理员身份运行命令提示符;若路径含空格,需用双引号包裹,如dumpbin /headers "C:Program Filesapp.exe"
。
Q2: 如何通过PE命令快速判断文件是32位还是64位?
A: 可通过以下两种方式:
- 使用dumpbin:执行
dumpbin /headers 文件名
,查看“可选头”中的“Magic”字段,若为0x10b
则为32位(PE32),0x20b
为64位(PE32+)。 - 使用CFF Explorer:打开文件后,在“IMAGE_OPTIONAL_HEADER”→“Data”中查看“Magic”字段,或直接查看“Machine”字段(
0x14C
为x86,0x8664
为x64)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20914.html