win32下PE文件分析之节表
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,接上一篇的win32下PE文件分析之NT头(一).FileBuffer与ImageBuffer(1).FileBuffer是将文件原原本本的读入申请的内存区域中,那部分区域就是FileBuffer,里
千家信息网最后更新 2025年01月20日win32下PE文件分析之节表
接上一篇的win32下PE文件分析之NT头
(一).FileBuffer与ImageBuffer
(1).FileBuffer是将文件原原本本的读入申请的内存区域中,那部分区域就是FileBuffer,里面的内容与磁盘中的文件一模一样.如下图:
(2).ImageBuffer是按照一定规则加载到内存中的某个区域,并且通过一定的处理,能立刻执行的区域,那部分区域叫做ImageBuffer.其大小就是可选PE头中的SizeOfImage.结构如下图:
(3).二者之间的关系:
ImageBuffer是按照文件FileBuffer中给定的条件,按照一定的规定加载到ImageBuffer.如果内存对齐与文件对齐大小一样,则ImageBuffer几乎是FileBuffer的一份完整拷贝(图中×××部分是节表中的Misc).
(二).节表:
从上面的图中,可以看到节表的位置就挨着可选PE头的,所以只要从FileBuffer的起始位置加上几个头的大小,就是节表的位置.一个PE文件中,节表的数量可能不一样.各个节表是紧挨着的.以下是Visual C++ 6.0中winnt.h中定义的节表结构:
#define IMAGE_SIZEOF_SHORT_NAME 8typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; //该节的名字 union { DWORD PhysicalAddress; DWORD VirtualSize; } Misc; //该节在内存中对齐前的大小 DWORD VirtualAddress; //该节在ImageBuffer中的偏移 DWORD SizeOfRawData; //该节在文件中对齐后的大小 DWORD PointerToRawData; //该节在在文件中的偏移 DWORD PointerToRelocations; DWORD PointerToLinenumbers; WORD NumberOfRelocations; WORD NumberOfLinenumbers; DWORD Characteristics; //该节的属性(比如是否可读,是否可写...)} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
(三).遍历节表:
通过循环遍历notepad.exe中的节表,节的数量为标准PE头中NumberOfSections的值,代码如下:
section.h:
void OutputSections(void* buffer){ void* buf = buffer; IMAGE_DOS_HEADER* pdos = (IMAGE_DOS_HEADER*)buf; IMAGE_FILE_HEADER* pfile = (IMAGE_FILE_HEADER*)((unsigned char*)buf + pdos->e_lfanew + 0x4); //定位节表在文件缓冲中的位置 IMAGE_SECTION_HEADER* psec = (IMAGE_SECTION_HEADER*)((unsigned char*)buf + pdos->e_lfanew + 0x4 + 0x14 + pfile->SizeOfOptionalHeader); //遍历节表 for(int sec_num = 1; sec_num <= pfile->NumberOfSections; sec_num++) { printf("\nSection%d: %s\n", sec_num, psec->Name); printf("Misc: %#X\n", psec->Misc); printf("VirtualAddress: %#X\n", psec->VirtualAddress); printf("SizeOfRawData: %#X\n", psec->SizeOfRawData); printf("PointToRawData: %#X\n", psec->PointerToRawData); printf("Charactoeristcs: %#X\n", psec->Characteristics); psec++; }}
注释掉解析其他头的函数,运行结果如下图:
(四).说明:
上面的代码中只输出了部分信息,主要是一些比较有用的信息.
节表中最后一个成员的值Characteristics,决定了这个节的权限.下图是其属性的对照表:
有空会继续更新.有任何建议请留评论.
文件
区域
大小
位置
内存
部分
就是
代码
信息
属性
数量
结构
面的
图中
偏移
分析
一模一样
原原本本
下图
个头
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
海南全岛互联网科技有限公司
浙江丽水软件开发公司
服务器坏了需要备份吗
银行安全网络安全设备生产商
网络安全与应急管理工作
码上淘软件开发
关于网络安全的视频教学
数据库备份有哪些
构建常态化网络安全防控机制
48位存储服务器参数
宝可梦无法连接到服务器
网络安全学习汇报
软件开发服务承诺怎么写
数据库图片加载不出来
iis搭建web服务器错误
什么是前端服务器检验失败
软件开发行业税点
义乌网络安全司
银联软件开发公司电话
网络安全与内容安全的差异
互联网泡沫对科技公司的影响
软件开发对数据的要求
数据库结构join
网络安全技术及成果
数据库和上层应用耦合原则
数据库 元组关系演算
租服务器开私服
软件开发方法的定义
怎么在表格中删除一列数据库
奥奇传说手游怎么转服务器