win32下PE文件分析之节表
发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,接上一篇的win32下PE文件分析之NT头(一).FileBuffer与ImageBuffer(1).FileBuffer是将文件原原本本的读入申请的内存区域中,那部分区域就是FileBuffer,里
千家信息网最后更新 2024年12月12日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安全错误
数据库的锁怎样保障安全
网络安全法答卷
服务器安全测试设备
软件开发 你所具有的专长
led显示屏播放软件开发
江苏豪华服务器云服务器
郑州大块互联网科技有限公司
数据库应用里mid是什么
asp数据库怎么下载
单片机算不算软件开发
人民网络安全宣传周
手语网络安全
网页的数据库怎么弄
数据库安全 实验报告
服务器管理器命令打开
阿里巴巴网络技术有限公司简称
基岩版服务器防作弊
输入记录 数据库
潜山软件开发商
软件开发时期不包括总体设计
数据库查找字段like使用
黄山市公安局网络安全
网络技术难还是云计算难
2008数据库怎么建外键
赏帮赚这个软件开发多久了
数据库参照完整什么意思
为什么要加强网络安全法治学习
宅基地数据库建设技术报告
泉州公安局网络安全
亚马逊云服务器丢包严重
对于过滤实验最后一点数据库