PE编程汇总

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

判断是否为有效PE文件:

(c 版读写文件)

//通过判断DOS头标志和PE头标志以及PE头属性值来确定文件是否可执行文件
BOOL IsExeFile(HANDLE hFile)
{
	DWORD nCount;
	BOOL bResult = FALSE;
	IMAGE_DOS_HEADER dosHeader;
	IMAGE_NT_HEADERS ntHeader;

	ReadFile(hFile,&dosHeader,sizeof(dosHeader),&nCount,NULL);
	if (nCount == sizeof(dosHeader))
	{
		//有效的DOS头
		if (IMAGE_DOS_SIGNATURE == dosHeader.e_magic)
		{
			if (SetFilePointer(hFile,dosHeader.e_lfanew,NULL,FILE_BEGIN) != -1)
			{//NT头检查
				ReadFile(hFile,&ntHeader,sizeof(ntHeader),&nCount,NULL);
				if(nCount == sizeof(ntHeader))
					if(IMAGE_NT_SIGNATURE == ntHeader.Signature)
						if(ntHeader.FileHeader.Characteristics & IMAGE_FILE_EXECUTABLE_IMAGE)
						{
							bResult = TRUE;
						}
			}
		}
	}
	SetFilePointer(hFile,0,NULL,FILE_BEGIN);

	return bResult;
}

(以下通过文件指针操作)

//通过ImageBase 文件指针判断,映像基址由MapViewOfFile函数获得
BOOL IsPEFile(LPVOID ImageBase)
{
	PIMAGE_DOS_HEADER pDosHeader = NULL;
	PIMAGE_NT_HEADERS pNtHeader = NULL;
	
	if(!ImageBase)    //指针安全检查
		return FALSE;
	//DOS头和PE头检查	
	pDosHeader = (PIMAGE_DOS_HEADER)ImageBase; //转换ImageBase为PIMAGE_DOS_HEADER结构变量类型
	if(pDosHeader->e_magic != IMAGE_DOS_SIGNATURE)
		return FALSE;
	pNtHeader = (PIMAGE_NT_HEADERS32)((DWORD)pDosHeader+pDosHeader->e_lfanew); 
	//一般可等同于 pNtHeader = (PIMAGE_NT_HEADERS32)(pDosHeader->e_lfanew);
	if(pNtHeader->Signature != IMAGE_NT_SIGNATURE)
		return FALSE;
	return TRUE;
}

//映像基址的获取
	HANDLE hFile;
	HANDLE hMapping;
	LPVOID ImageBase;
	HANDLE hFile = CreateFile(szFilePath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
	if(INVALID_HANDLE_VALUE == hFile) 
		 return  FALSE;
	//可以添加判断空文件语句
    hMapping = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
	if(!hMapping)
	{									
		CloseHandle(hFile);
		return FALSE;
	}
	ImageBase = MapViewOfFile(hMapping,FILE_MAP_READ,0,0,0);
    if(!ImageBase)
	{									
		CloseHandle(hMapping);
		CloseHandle(hFile);
		return FALSE;
	}

//获取 NT头、文件头、可选头、区块
PIMAGE_NT_HEADERS32 GetNtHeader(LPVOID ImageBase)
{
	PIMAGE_DOS_HEADER pDosHeader = NULL;
	PIMAGE_NT_HEADERS32 pNtHeader = NULL;

	if(!ImageBase)
		return NULL;

	pDosHeader = (PIMAGE_DOS_HEADER)ImageBase;
	pNtHeader = (PIMAGE_NT_HEADERS32)((DWORD)pDosHeader+pDosHeader->e_lfanew);

	return  pNtHeader;
}

PIMAGE_FILE_HEADER GetFileHeader(LPVOID	Imagebase)
{  
	PIMAGE_NT_HEADERS pNtHeader = NULL;
	pNtHeader = GetNtHeader(Imagebase);
	if(!pNtHeader)
		return NULL;
	else
		return &pNtHeader->FileHeader; 
}

PIMAGE_OPTIONAL_HEADER GetOptionalHeader(LPVOID ImageBase)
{
  PIMAGE_NT_HEADERS32 pNtHeader = NULL;
  pNtHeader=GetNtHeaders(ImageBase);
  if(!pNtHeader)
     return NULL;
  else
     return &pNtHeader->OptionalHeader;
}

//获得区块表指针
PIMAGE_SECTION_HEADER GetSectionHeader(LPVOID ImageBase)
{
	return (PIMAGE_SECTION_HEADER)
	(GetOptionalHeader(ImageBase)+sizeof(IMAGE_OPTIONAL_HEADER));
}	

//待添加: rva转化、输入输出表获取、文件目录等



C/C++编程解析PE文件结构 PE的意思就是Portable Executable(可移植、可执行)PE文件结构图: PS:现在大多数PE文件都是加壳或者经过处理的,此程序只适用于最原始的PE文件关于PE文件的解析问题,可以参考我的另一篇博文《用Winhex软件解析PE文件》#include <stdio.h> #include <stdlib.h> #include <Windows.h> //函数计算导出/导入表的VA D 阅读详情

相关推荐

PE 格式详解

介绍PE 文件的格式

cwei231的博客 1175

PE知识

PE知识

Windows PE资源表编程(枚举资源树)

资源枚举     写一个例子,枚举一个PE文件的资源表。首先说下资源相关的作为铺垫。 1.资源类型也是PE可选头中数据目录的一种。位于第三个类型。 2.资源目录分为三层。第四层是描述文件相关的。这些结构是按照二叉排序树的结构存的。每一个节点都可以看成是一段连续的数据块(1个资源目录头+n个资源目录项)。 3.整体基本结构: OK,基础知识就简单说这些。如果还是

天使也掉毛 2305

PE结构详解

文章目录 转载自[PE结构详解(64位和32位)](https://blog.csdn.net/cs2626242/article/details/79391599) 1 基本概念 2 概览 3 文件头 3.1 DOS头(PE文件签名的偏移地址就是大小) 3.2 NT头(244或260个字节) 3.2.1 机器类型 3.2.2 特征 3.3 节头 3.3.1 节标志 4 一些注意信息 5 特殊的节 5.1 .edata节 5.1.1 导

whl0071的专栏 3180

Windows下的PE文件编程

PE头:PE头是PE文件的第一个有效部分,包含了PE文件的基本信息,如文件类型、入口点地址等。PE头:PE头是PE文件的第一个有效部分,包含了PE文件的基本信息,如文件类型、入口点地址等。本文介绍了Windows下的PE文件编程,包括PE文件的基本结构和创建一个简单的PE文件PE文件(Portable Executable)是Windows操作系统中可执行文件的标准格式。本文介绍了Windows下的PE文件编程,包括PE文件的基本结构和创建一个简单的PE文件的示例代码。

ByteNinja的博客 323

深入理解PE,手工制作64位PE程序

由于像 ASLR 这样的内存保护以及许多其他原因,该字段指定的地址几乎从未被使用过,在这种情况下,PE 加载程序选择一个未使用的内存范围来加载图像,在将图像加载到该地址后加载器进入一个称为重定位的过程,它修复图像中的常量地址以使用新的图像库,有一个特殊的部分保存有关需要重定位时需要修复的地方的信息,该部分称为重定位部分(对于 DLL,入口点是可选的,在没有入口点的情况下,该。十进制为70,这个大小是由我们在节区的数据量来确定,我们这个操作码+字符常量的总占地大小为70,所以这里填写70。

yhy1315的博客 2021

PE文件详解(C制作PE格式解析器)

0x00:前言 PE文件可以说是在逆向的各个领域都有涉及,特别是病毒领域,如果你是一名病毒制造者,那你肯定是对PE文件有详细的了解,那么这里我就详细介绍一下PE文件,最后我们用C来写一个PE格式解析器。 0x01:PE格式 要了解PE文件,首先要知道PE格式,那么什么是PE格式呢,既然是一个格式,那肯定是我们都需要遵循的定理,下面这张图就是PE文件格式的图片(来自看雪),非常大一张图片,其实PE格...

CharlesGodX的博客 6349

PE文件感染程序设计(PE病毒)

记录PE病毒设计的入门实验

Zyecho的博客 4968

常用工具汇总-备忘

最近总是忘事。所以这里把我学用的工具汇总一下,备忘!!!1:编程工具  vc2005 + msdn + vc小助手 + wrk + psdk  qt + qt助手/qt集成工具  python + pyqt  cygwin  radasm2:动态调试工具  ollydbg  windbg工具集  livekd/softice3:静态调试工具  IDA4:其它调试工具  内存泄漏检测:Lea

我的新家 1242

excellent websit

 //c库函数查询http://research.microsoft.com/invisible/src/crt/strcat.c.htm//搜毒网http://www.soudu.net///vb函数查询http://www.cnsdn.com.cn/learn/index.asp?url=/learn/File.asp?FileID=153//PE结构http://www.pediy.co

zsx123的专栏 488

基于VC++实现PE的修改编程

在Windows系统下的可执行文件的一种(还有NE、LE),是微软设计、TIS(Tool Interface Standard,工具接口标准)委员会批准的一种可执行文件格式。PE的意思是Portable Executable(可移植可执行)。所有Windows下的32位或64位可执行文件都是PE文件格式,其中包括DLL、EXE、FON、OCX、LIB和部分SYS文件。 DOS-stub(DOS-头

尹成的技术博客 4829

Windows编程系列:PE文件结构

/大小为: 0x40(64)字节0x5A4D// MZ// MZ标记 0x5a4d// 最后(部分)页中的字节数// 文件中的全部和部分页数// 重定位表中的指针数// 头部尺寸以段落为单位// 所需的最小附加段// 所需的最大附加段// 初始的SS值(相对偏移量)// 初始的SP值// 补码校验值// 初始的IP值// 初始的SS值// 重定位表的字节偏移量// 覆盖号// 保留字// OEM标识符(相对m_oeminfo)// OEM信息// 保留字。

a1b2c3是弱口令 1772

[网络安全自学篇] 六十二.PE文件逆向之PE文件解析、PE编辑工具使用和PE结构修改(三)

本系列虽然叫“网络安全自学篇”,但由于系统安全、软件安全与网络安全息息相关,作者同样会分享一些系统安全案例及基础工具用法,也是记录自己的成长史,希望大家喜欢,一起进步。前文分享了数字签名,采用Signtool工具对EXE文件进行签名,接着利用Asn1View、PEVie、010Editor等工具进行数据提取和分析。本文将详细介绍PE文件格式,熟悉各种PE编辑查看工具,针对目标EXE程序新增对话框等,这也为后续PE病毒和恶意代码的攻防打下扎实基础。希望这篇基础文章对您有所帮助~

杨秀璋的专栏 1万+

手写PE结构解析工具

PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如文件加密与解密,病毒分析,外挂技术等,在PE文件中我们最需要关注,PE结构,导入表,导出表,重定位表,下面将具体介绍PE的关键结构,并使用C语言编程获取到这些结构数据.

微软技术分享 1万+

PE格式:手写PE结构解析工具

PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如文件加密与解密,病毒分析,外挂技术等,在PE文件中我们最需要关注,PE结构,导入表,导出表,重定位表,下面将具体介绍PE的关键结构,并使用C语言编程获取到这些结构数据.

微软技术分享 6636

[读书][笔记]WINDOWS PE权威指南《三》PE的原理和基础 之 第三章 PE文件头

文章目录3.1 PE的数据组织方式3.2 与PE有关的基本概念3.2.1 地址3.2.2 指针3.2.3 数据目录3.2.4 节3.2.5 对齐3.2.6 Unicode字符串3.3 PE文件结构3.3.1 16位系统下的PE结构3.3.2 32位系统下的PE结构3.3.3 程序员眼中的PE结构3.4 PE文件头部解析3.5 数据结构字段详解3.6 PE内存映像3.7 PE文件头编程3.8 总结 3.1 PE的数据组织方式 3.2 与PE有关的基本概念 3.2.1 地址 3.2.2 指针 3.2.3 数据目

二次元怪兽的博客 2857

PE文件格式学习

萌新是跟着这位爷学的 感觉这博客写起来和抄书差不多。。。 PE文件结构概述 PE文件,即Portable Executable File Format,可移植的执行体,Windows下的所有可执行文件都是PE文件格式,比如.exe,.dll,.sys等 PE文件格式是一种对文件组织管理的方式 用RadASM编写一个简单的可执行程序做为分析的对象 (工程类型win32(nores)) 这玩意好像没法写注释语句,那我就按c的语法写注释了 .386 // 用到的汇编指令的指令集是.386 .model f

iPlayForSG的博客 8502

PE_Info 之DIY

 自己写的PE 信息查看工具(C代码),不甚完美,希望可以帮助初学PE 的读者从编程的角度认识PE文件,Good Luck!       下面是源代码:/*///////////////////////////////////////////////////////////////////////////////This program will output the values of impo

4706

逆向编程一,PE结构拉伸内存

PE的加载从文件到内存有一个拉伸的过程,拉伸的原因是因为PE在文件中的对齐字节和在内存中的对齐字节可能不一样(文件对齐字节<=内存对齐字节,为了节省磁盘空间,目前的pe文件大部分文件和内存对齐字节都是一样的)。文件对齐字节在可选PE头里: _IMAGE_OPTIONAL_HEADER: 32 4 SectionAlignment 内存对齐 当加载进内存时节的对齐值(以字节计)。它必须≥FileAlignment。默认是相应系统的页面大小。 36 4 Fi..

cszrydn的专栏 924
上一篇: Win32汇编——内存管理
下一篇: Win32汇编——文件操作
kisbuddy
博客等级 码龄18年 24粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值