吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 2640|回复: 74

[C/C++] 用C写的打开一个文件查看这个文件的头文件信息

  [复制链接]
gwgirl 发表于 2021-12-20 19:00 | 显示全部楼层 |阅读模式

[C] 纯文本查看 复制代码
#include	<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<Windows.h>

LPVOID ReadPEFile(LPSTR lpszFile)
{
	FILE* pFile = NULL;
	DWORD filesize = 0;
	LPVOID pFileBuffer = NULL;

	//打开文件
	fopen_s(&pFile,lpszFile, "r+b");
	if (!pFile)
	{
		printf("无法打开EXE文件!");
		return NULL;
	}

	//读取文件大小
	fseek(pFile, 0, SEEK_END);
	int fileSize = ftell(pFile);
	fseek(pFile, 0, SEEK_SET);

	//分配缓冲区
	pFileBuffer = malloc(fileSize);
	if (!pFileBuffer)
	{
		printf("分配空间失败!"); fclose(pFile);
		return NULL;
	}

	//将文件数据读取到缓冲区
	size_t n = fread(pFileBuffer, fileSize, 1, pFile);
	if (!n)
	{
		printf("读取数据失败!"); free(pFileBuffer);
		fclose(pFile);
		return NULL;
	}
	//关闭文件
	fclose(pFile);
	return pFileBuffer;
}

VOID  PrintNTHeaders(char* FILEPATH)
{
	LPVOID pFileBuffer = NULL;
	PIMAGE_DOS_HEADER pDosHeader = NULL;
	PIMAGE_NT_HEADERS pNTHeader = NULL;
	PIMAGE_FILE_HEADER pPEHeader = NULL;
	PIMAGE_OPTIONAL_HEADER32 pOptionHeader = NULL;
	PIMAGE_SECTION_HEADER pSectionHeader = NULL;
	
	pFileBuffer = ReadPEFile(FILEPATH);
	if (!pFileBuffer)
	{
		printf("文件读取失败\n");
		return;
	}

	//判断是否是有效的MZ标志
	if (*((PWORD)pFileBuffer) != IMAGE_DOS_SIGNATURE)
	{
		printf("不是有效的MZ标志\n"); 
		free(pFileBuffer);
		return;
	}
	pDosHeader = (PIMAGE_DOS_HEADER)pFileBuffer;

	//打印DOC头
	printf("******************DOC头********************\n");
	printf("MZ标志:%x\n", pDosHeader->e_magic);
	printf("PE偏移:%x\n", pDosHeader->e_lfanew);

	//判断是否是有效的PE标志
	if (*((PDWORD)((DWORD)pFileBuffer + pDosHeader->e_lfanew)) != IMAGE_NT_SIGNATURE)
	{
		printf("不是有效的PE标志\n"); free(pFileBuffer);
		return;
	}
	pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)pFileBuffer + pDosHeader->e_lfanew);

	//打印NT头
	printf("**********************NT头***********************\n");
	printf("NT: %x\n", pNTHeader->Signature);
	pPEHeader = (PIMAGE_FILE_HEADER)(((DWORD)pNTHeader) + 4);
	printf("**************************PE头*****************************\n");
	printf("PE: %x\n", pPEHeader->Machine);
	printf("节的数量:%x\n", pPEHeader->NumberOfSections);
	printf("PE: %x\n", pPEHeader->Machine);
	printf("节的数量:%x\n", pPEHeader->NumberOfSections);
	printf("Size0f0ptionalHeader: %x\n", pPEHeader->SizeOfOptionalHeader);

	//可选PE头
	pOptionHeader = (PIMAGE_OPTIONAL_HEADER32)((DWORD)pPEHeader + IMAGE_SIZEOF_FILE_HEADER);
	printf("****************************OPTIOIN_PE头****************************\n"),
	printf("OPTION_PE:%x\n", pOptionHeader->Magic);

	//释放内存
	free(pFileBuffer);	
}

int main()
{
	char* FILEPATH = (char*)"E:/file/IPMSG2007.exe";
	PrintNTHeaders(FILEPATH);	
	return 0;
}

评分

参与人数 23HB +25 THX +15 收起 理由
隔壁老樊 + 1
消逝的过去 + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
agan8888 + 1
temp + 1
muker + 1
pmm018 + 1
越宝 + 1
6378895 + 2 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
a1fnv3llnq + 1
playboy + 1
XiaoWeiSec + 1
sunsky517 + 1
cruelloong + 1
w3731026 + 1 + 1
brswbx201610 + 1
河图 + 1 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
king51999 + 1 [快捷评语]--积极评分,从我做起。感谢分享!
baky1223 + 1 + 1 [快捷评语]--你将受到所有人的崇拜!
taiyuanzhou + 1
Shark_鹏 + 6 + 1 [快捷评语]--2021年,我们爱0爱1
上帝的恩赐 + 1 [快捷评语]--积极评分,从我做起。感谢分享!
boot + 6 + 1 [快捷评语]--你将受到所有人的崇拜!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
taiyuanzhou 发表于 2021-12-21 12:19 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
1666909156 发表于 2021-12-22 23:27 | 显示全部楼层

没有可视化,不是傻瓜操作,一般没几个人用的!!!!!!!!!!!!!!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| gwgirl 发表于 2021-12-23 09:04 | 显示全部楼层

1666909156 发表于 2021-12-22 23:27
没有可视化,不是傻瓜操作,一般没几个人用的!!!!!!!!!!!!!!

这些事给刚刚学C的看到,其实就是看看怎么写语法
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
雷lilei 发表于 2021-12-25 02:26 | 显示全部楼层

备注太少了啊,,
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| gwgirl 发表于 2021-12-26 10:03 | 显示全部楼层

雷lilei 发表于 2021-12-25 02:26
备注太少了啊,,

#include<Windows.h>  
第二个函数都是用的这个头文件!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
sunsky517 发表于 2021-12-27 11:49 | 显示全部楼层

纯支持,谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
6378895 发表于 2022-1-2 12:50 | 显示全部楼层

正在学习C中
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
无限和小白菜 发表于 2022-1-22 18:58 | 显示全部楼层

来向大佬学习
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
清爽打煎蛋 发表于 2022-1-22 19:26 | 显示全部楼层

感谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表