Loader

来源:互联网 发布:网络社区营销优点 编辑:程序博客网 时间:2024/04/30 21:52

打算学习pe文件的结构,最好的方法就是写Loader了,希望自己能坚持下来吧。

今天贴Pe文件的校验函数:

/** 该函数用于校验pe文件的合法性,重点判断了File Header、Optional Header、Section Header* 的可访问性,其它标准可以往该函数里面加,这样在之后的操作中就不进行重复验证了*/#define FUNC_NAME "#LdrValidateImage:"BOOL LdrValidateImage(char* pImage, DWORD FileSize){BOOL Ret = FALSE;char* Temp;PIMAGE_FILE_HEADER pFileHeader;if(!pImage)goto Leave;if(FileSize < 0x1000){d_print(FUNC_NAME"文件太短了\n");goto Leave;}if(*(WORD*)pImage != IMAGE_DOS_SIGNATURE){d_print(FUNC_NAME"IMAGE_DOS_SIGNATURE Failed\n");goto Leave;}Temp = pImage + *(DWORD*)(pImage + 0x3C);//判断pe签名和File Header的可访问性if(Temp + 4 + sizeof(IMAGE_FILE_HEADER) > pImage + FileSize){d_print(FUNC_NAME"无法定位FILE_HEADER\n");goto Leave;}if(*(DWORD*)Temp != IMAGE_NT_SIGNATURE){d_print(FUNC_NAME"IMAGE_NT_SIGNATURE validate Failed\n");goto Leave;}pFileHeader = (PIMAGE_FILE_HEADER)(Temp + 4);//验证到节表末尾的访问性if((char*)pFileHeader + sizeof(IMAGE_FILE_HEADER) + pFileHeader->SizeOfOptionalHeader + sizeof(IMAGE_SECTION_HEADER)*pFileHeader->NumberOfSections> pImage + FileSize){d_print(FUNC_NAME"文件头信息无法访问\n");goto Leave;}return TRUE;Leave:return Ret;}


原创粉丝点击