-
-
给PE文件增加节的时候出现的问题
-
发表于:
2010-5-5 16:31
4313
-
我的目的是想给PE文件增加一个节,然后把一段代码复制到这个节中去。但是,在复制的时候总是出现 access violation 错误。请大家帮忙看一下是什么问题。
这个是创建 内存映射的代码
hFile=::CreateFile(lpFilename,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);//创建文件对象
if (!hFile)
return FALSE;
DWORD dwFileSize = GetFileSize(hFile,NULL);
dwFileSize += 0x000002000;//增加8Kb,为后面增加节做准备
hMapping=CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,dwFileSize,NULL);//创建内存映射
if(!hMapping)
{
CloseHandle(hFile);
return FALSE;
}
ImageBase=MapViewOfFile(hMapping,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);//得到内存映射的基址
if(!ImageBase)
{
CloseHandle(hMapping);
CloseHandle(hFile);
return FALSE;
}
下面是增加节的代码
CcheckPE check; // 获取PE头文件信息的类
PIMAGE_FILE_HEADER pFH=NULL;
PIMAGE_SECTION_HEADER pFirstSecH; //第一个块表
PIMAGE_SECTION_HEADER pLastSecH;//原来的最后一个块表
PIMAGE_OPTIONAL_HEADER pOH=NULL;
pOH=check.GetOptionalHeader (ImageBase); //得到 option header 指针
pFirstSecH=check.GetFirstSectionHeader(ImageBase);//得到第一个块表指针
pFH=check.GetFileHeader(ImageBase);//得到 NT HEADER指针
pAddSecH = (PIMAGE_SECTION_HEADER)((DWORD)(pFirstSecH) + (sizeof(IMAGE_SECTION_HEADER) * (pFH->NumberOfSections)));//增加块表
pLastSecH = (PIMAGE_SECTION_HEADER)(((DWORD)(pAddSecH) - sizeof(IMAGE_SECTION_HEADER)));//得到原来的最后一个块表的指针
//判断最后一个节表后面是否有多余空间来增加节表.如果有十个双字是全0则表示有空间。
for (int i = 0;i < 12;i++)
{
if (*((PDWORD)(pAddSecH)+i)!=0)
{
break;
}
}
[课程]FART 脱壳王!加量不加价!FART作者讲授!