使⽤程序判断⼀个⽂件是否是有效的PE⽂件 判断⼀个⽂件是否为有效的PE⽂件,判断2个字段: DOS头的e_magic字段是否为0x5A4D; NT头的Signature字段是否为0x00004550; 若都是的话则是⼀个有效的PE⽂件; VC6,单⽂档⼯程; void CIspeView::OnDraw(CDC* pDC) { CIspeDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here //HANDLE hFile = CreateFile(TEXT("test.png"), GENERIC_ALL, NULL, NULL,OPEN_EXISTING,NULL,NULL); HANDLE hFile = CreateFile(TEXT("notepad.exe"), GENERIC_ALL, NULL, NULL,OPEN_EXISTING,NULL,NULL); if (hFile == INVALID_HANDLE_VALUE) { //std::cout << "打开⽂件失败!" << std::endl; pDC->TextOut(20,20,"打开⽂件失败!"); CloseHandle(hFile); exit(EXIT_SUCCESS); } // 获取⽂件的⼤⼩ DWORD dwFileSize = GetFileSize(hFile, NULL); // 申请内存空间,⽤于存放⽂件数据 BYTE * FileBuffer = new BYTE[dwFileSize]; // 读取⽂件内容 DWORD dwReadFile = 0; ReadFile(hFile, FileBuffer, dwFileSize, &dwReadFile, NULL); //检查DOS头中的MZ标记,判断e_magic字段是否为0x5A4D,或者是IMAGE_DOS_SIGNATURE DWORD dwFileAddr = (DWORD)FileBuffer; //auto DosHeader = (PIMAGE_DOS_HEADER)dwFileAddr; PIMAGE_DOS_HEADER DosHeader = (PIMAGE_DOS_HEADER)dwFileAddr; if (DosHeader->e_magic != IMAGE_DOS_SIGNATURE) { // 如果不是则提⽰⽤户,并⽴即结束 ::MessageBox(NULL, TEXT("这不是⼀个有效PE⽂件"), TEXT("提⽰"), MB_OK); delete FileBuffer; CloseHandle(hFile); exit(EXIT_SUCCESS); } // 若都通过的话再获取NT头所在的位置,并判断Signature字段是否为0x00004550,或者是IMAGE_NT_SIGNATURE //auto NtHeader = (PIMAGE_NT_HEADERS)(dwFileAddr + DosHeader->e_lfanew); PIMAGE_NT_HEADERS NtHeader = (PIMAGE_NT_HEADERS)(dwFileAddr + DosHeader->e_lfanew); if (NtHeader->Signature != IMAGE_NT_SIGNATURE) { // 如果不是则提⽰⽤户,并⽴即结束 ::MessageBox(NULL, TEXT("这不是⼀个有效PE⽂件"), TEXT("提⽰"), MB_OK); delete FileBuffer; CloseHandle(hFile); exit(EXIT_SUCCESS); } // 若上述都通过,则为⼀个有效的PE⽂件 //MessageBox(NULL, TEXT("这是⼀个有效PE⽂件"), TEXT("提⽰"), MB_OK); pDC->TextOut(20,60,"这是⼀个有效PE⽂件"); delete FileBuffer; CloseHandle(hFile); } 拷贝⼀个test.png,notepad.exe到⼯程⽬录; 当测试test.png时如下, 测试 notepad.exe 如下, ⽬前程序可⽤; 这⼀句如果写为, auto DosHeader = (PIMAGE_DOS_HEADER)dwFileAddr; 则报错, cannot convert from 'struct _IMAGE_DOS_HEADER *' to 'int' 改为, PIMAGE_DOS_HEADER Do
- 粉丝: 167
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx