能力值:
(RANK:260 )
|
-
-
2 楼
首先要检查两个签名:先检查DOS MZ签名,确定DOS头有效,再再检查PE\0\0签名,确定有PE头。
在此基础上,要检查很多项目,主要的,要检查optional header中的base、characteristics等项目,以及section table、data directories的合法性。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢老大
我现在正在学PE文件头
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
#include <stdlib.h>
#include <windows.h>
int main(int argc, char *argv[])
{ char * fileName ;
HANDLE hFile = NULL;
IMAGE_DOS_HEADER dosHeader ;
IMAGE_NT_HEADERS ntHeaders;
int numOfSections;
long dwSize = 0;
printf("请输入文件路径:\n");
scanf("%s",fileName);
hFile=CreateFile(fileName,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,0);
if(hFile == INVALID_HANDLE_VALUE ){
printf("failed\n");
}
SetFilePointer(hFile,0,0,FILE_BEGIN);
ReadFile(hFile,&dosHeader,sizeof(dosHeader),&dwSize,NULL);
if(dosHeader.e_magic !=IMAGE_DOS_SIGNATURE){
printf("文件不是PE文件!");
CloseHandle(hFile);
return 0;
}
SetFilePointer(hFile,dosHeader.e_lfanew,0,FILE_BEGIN);
ReadFile(hFile,&ntHeaders,sizeof(ntHeaders),&dwSize,NULL);
if(ntHeaders.Signature != IMAGE_NT_SIGNATURE){
printf("该文件没有PE文件头!\n");
CloseHandle(hFile);
return 0;
}
printf("文件是PE文件!");
CloseHandle(hFile);
system("PAUSE");
return 0;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
老大真是高啊!!!
学习了
万分感谢!!
|
|
|