exe解析
来源:互联网 发布:虚拟号码软件 编辑:程序博客网 时间:2024/05/26 17:48
IMAGE_DOS_HEADER size 0x40
e_lfanew 0xe0
当中有0xA0的间隔数据。
IMAGE_NT_HEADERS size 0xf8
Section Header紧接着NT_HEADERS
通过IMAGE_NT_HEADERS结构中的Section Number,解析所有的Section Header
每个Section Header中记录了Section Data的真实文件偏移与Section Data Size。
这里有一个奇怪的问题,按道理来说,Section Header后紧接着就是Section Data,但在我的测试文件中,却不是,Section Header完成后文件偏移为0x2f0,而最开始有数据的Section Data起始偏移是在0x400,这中间差了不少了,具体存放了什么数据,没有找到说明。
不过分析Section Data的偏移以及大小发现,Section Data数据后没有其它数据了,SectionData是文件最后的数据。
现在总结下,问题就两个:
1、 Section Header与Section Data中间的数据是什么?
2、 Section Data数据如何解析?
整理下最终的exe文件结构布局
IMAGE_DOS_HEADER
空闲部分
IMAGE_NT_HEADERS 地址为 IMAGE_DOS_HEADER中e_lfanew字段值
IMAGE_SECTION_HEADER
IMAGE_SECTION_HEADER
…
IMAGE_SECTION_HEADER Section Header数量通过IMAGE_NT_HEADERS中的FileHeader.NumberOfSections确定
未知
SectionData
…
Section Data 这里的数据通过IMAGE_SECTION_HEADER记录的文件指针偏移以及大小读取
示例C代码:
#include<iostream>
#include<Windows.h>
#include<vector>
int main(intargc,char** argv)
{
FILE*fp = fopen(argv[1],"rb");
if(!fp)
{
std::cerr<<"Readfile error!\n";
return-1;
}
fseek(fp,0,SEEK_END);
intiLen = ftell(fp)+1;
fseek(fp,0,SEEK_SET);
char*pC = new char[iLen];
intiRead = fread(pC,1,iLen,fp);
fclose(fp);
//解析
IMAGE_DOS_HEADER* m_pDOSHeader= (IMAGE_DOS_HEADER*)(pC);
intiDosHeaderSize = sizeof(IMAGE_DOS_HEADER);
IMAGE_NT_HEADERS* m_pNTHeaders32= (IMAGE_NT_HEADERS *) ((BYTE*)m_pDOSHeader +
m_pDOSHeader->e_lfanew);
intiNTHeaderSize = sizeof(IMAGE_NT_HEADERS);
intiSectionStart = m_pDOSHeader->e_lfanew + iNTHeaderSize;
std::vector<IMAGE_SECTION_HEADER*>vecSectionHeaders;
for(inti=0; i<m_pNTHeaders32->FileHeader.NumberOfSections; i++)
{
IMAGE_SECTION_HEADER*pSectionHeader = (IMAGE_SECTION_HEADER*)((BYTE*)m_pDOSHeader +
iSectionStart+ i*sizeof(IMAGE_SECTION_HEADER));
vecSectionHeaders.push_back(pSectionHeader);
}
intiCurPos = iSectionStart +m_pNTHeaders32->FileHeader.NumberOfSections*sizeof(IMAGE_SECTION_HEADER);
return0;
}
- exe解析
- Explorer.exe 参数解析
- kernel CoreNK.EXE 解析
- aspnet_regsql.exe 工具参数解析
- 【EXE PE】vs_version_info全解析
- opencv_traincascade.exe文件结构解析
- 解析Svchost.exe和Explorer.exe两大系统进程
- php解析exe文件--exeinfo.php
- dos下的exe文件格式解析
- Exe
- exe
- LC.exe” exited with code -1 错误解析
- 计算机应用知识,什么是Ose.exe程序解析?
- 计算机应用知识,什么是Ose.exe程序解析?
- 解析利用wsdl.exe生成webservice代理类的详解
- 解析利用wsdl.exe生成webservice代理类的详解
- Windows-详细解析U盘病毒、Autorun.inf文件和RavMonE.exe病毒
- 解析.NET 许可证编译器 (Lc.exe) 的原理与源代码剖析
- python爬虫教程大全
- ckeditor+ckfinder配置及使用(asp,asp.net环境)
- 一篇有思想深度的好文章 —— 莫言在东亚文学论坛上的演讲
- 如何用jsp页面生成随机的验证数字码
- 获取文件夹下文件列表
- exe解析
- 转载的Linux内核学习资料_1
- poj 3126 Prime Path
- 关系代数表达式的优化
- Cocos2d小计(一)
- Unique Binary Search Trees II
- 深入log4J和commons-logging
- Jsp useBean各项参数及page,request,session,application作用范围
- Java RMI之HelloWorld篇