IMAGE_NT_HEADERS Ctrl+滚轮可以放大图片
typedef struct _IMAGE_NT_HEADERS {
DWORD Signature; //"PE00"
IMAGE_FILE_HEADER FileHeader; //文件头包括了PE文件的基本信息
IMAGE_OPTIONAL_HEADER32 OptionalHeader; //可选映射头,和IMAGE_FILE_HEADER文件头连起来就是一个完整"PE 文件头结构"
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
IMAGE_FILE_HEADER
typedef struct _IMAGE_FILE_HEADER {WORD Machine; //运行平台
WORD NumberOfSections; //section区块数目
DWORD TimeDateStamp; //文件创建时间
DWORD PointerToSymbolTable; //调试符号表地址
DWORD NumberOfSymbols; //调试符号表字节数
WORD SizeOfOptionalHeader; //可选头结构字节数 通过这一选项可以定位到IMAGE_SECTION_HEADER
WORD Characteristics; //文件属性
} IMAGE_FILE_HEADER32, *PIMAGE_FILE_HEADER32;
建议:PE文件结构书籍(1.段刚的加密与解密2.程序员的自我修养)和PE查看工具结合学习,不建议用LoadPE,Stud_PE和PE Tools等等
需要专业的PE工具可以加扣扣3346507173, 添加时备注PE工具
IMAGE_OPTIONAL_HEADER32
typedef struct _IMAGE_OPTIONAL_HEADER {WORD Magic; //标志字(ROM映像或者可执行镜像)
BYTE MajorLinkerVersion; //链接程序的主版本号
BYTE MinorLinkerVersion; //链接程序的次版本号
DWORD SizeOfCode; //代码段大小
DWORD SizeOfInitializedData; //所有初始化数据区块的大小
DWORD SizeOfUninitializedData; //所有未初始化数据区块的大小
DWORD AddressOfEntryPoint; //程序入口地址
DWORD BaseOfCode; //代码区块起始RVA
DWORD BaseOfData; //数据区块起始RVA
DWORD ImageBase; //程序默认装入基地址
DWORD SectionAlignment; //内存区块对齐值
DWORD FileAlignment; //文件区块对齐值
WORD MajorOperatingSystemVersion; //操作系统主版本号
WORD MinorOperatingSystemVersion; //操作系统次版本号
WORD MajorImageVersion; //用户自定义主版本号
WORD MinorImageVersion; //用户自定义次版本号
WORD MajorSubsystemVersion; //所需要子系统主版本号
WORD MinorSubsystemVersion; //所需要子系统次版本号
DWORD Win32VersionValue; //预留
DWORD SizeOfImage; //映像装入内存总尺寸
DWORD SizeOfHeaders; //DOS头,PE头和区块表总大小
DWORD CheckSum; //映像校验和
WORD Subsystem; //文件子系统
WORD DllCharacteristics; //显示DLL特性的旗标
DWORD SizeOfStackReserve; //初始化预留栈大小
DWORD SizeOfStackCommit; //初始化实际提交栈大小
DWORD SizeOfHeapReserve; //初始化预留堆大小
DWORD SizeOfHeapCommit; //初始化实际提交堆大小
DWORD LoaderFlags; //与调试有关,默认为0
DWORD NumberOfRvaAndSizes; //数据目录表项目
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
IMAGE_DATA_DIRECTORY
数据目录表有16个IMAGE_DATA_DIRECTORY类型的数组组成
typedef struct _IMAGE_DATA_DIRECTORY {
DWORD VirtualAddress; //RVA相对虚拟地址
DWORD Size; //数据目录占用内存的字节数
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
数据目录表很重要,一般情况输出表(Export Directory RVA)指向Dll动态库输出的函数列表,OD动态分析和IDA Pro静态分析时需要用到
输入表(Import Directory)会被装载器重写,重写函数的地址是指向动态库的函数入口地址
资源表(Resource Directory)存放可执行的log,string,Title,Png等等,修改资源表可以汉化一些外国软件,修改log,免广告等等