首页
社区
课程
招聘
编写PE分析工具的问题
发表于: 2009-11-29 15:40 3524

编写PE分析工具的问题

2009-11-29 15:40
3524
我正在看《加密与解密》10章 编写PE分析工具(300页)
里面有个函数是这样的:
BOOL IsPEFile(LPVOID ImageBase)
{
          PIMAGE_DOS_HANDER pDH=NULL;
          PIMAGE_NT_HEADRS  pNtH = NULL;
          if(!ImageBase)                         //判断映像基址
            return FALSE;
          pDH = (PIMAGE_DOS_HEADER)ImageBase;
          if(pDH->e_magic != IMAGE_DOS_SIGNATURE)
                  return FALSE;
          pNtH = (PIMAGE_NT_HEADERS32)
                        ((DWORDpDH+pDH>e_lfanew);
          if(pDH->Signature != IMAGE_NT_SIGATURE) //判断是否为PE格式
                  return FALSE;
        return TRUE;         
}
这是一个判断文件是不是PE文件的函数。
问题:函数的参数ImageBase是如何得到的呢?
麻烦详细点!先谢了!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
一般是先通过CreateFile得到文件句柄,然后CreateFileMapping创建文件映像,最后MapViewOfFile得到映像基址,代码如下:
HANDLE hFile, hMapping;
void *pMem;
hFile = CreateFile(pFilename, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); 
                             //pFilename是文件路径,char *类型
if ( hFile == INVALID_HANDLE_VALUE )
{
        printf("打开文件失败, 错误代号# %08x\n", GetLastError());
        return;
}
hMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
if ( hMapping == 0 )
{
        printf("创建文件映射失败, 错误代号# %08x\n", GetLastError());
        CloseHandle(hFile);
        return;
}  
pMem = MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if ( pMem == 0)
{
        printf("无法映射文件视图, 错误代号# %08x\n", GetLastError());
        CloseHandle(hMapping);
        CloseHandle(hFile);
        return;
}
ImageBase = (PIMAGE_DOS_HEADER)pMem;
2009-11-29 16:00
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
ImageBase = (PIMAGE_DOS_HEADER)pMem;
相当于你的 pDH = (PIMAGE_DOS_HEADER)ImageBase;
2009-11-29 16:02
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我不够快。。。。。我的kx

摘自加解密

BOOL  LoadFileR(LPTSTR lpFilename,PMAP_FILE_STRUCT pstMapFile)
{

        HANDLE hFile;
        HANDLE hMapping;
        LPVOID ImageBase;

        memset(pstMapFile,0,sizeof(MAP_FILE_STRUCT));

        hFile=CreateFile(lpFilename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,0);
       
        if (!hFile)                                  
                return FALSE;

hMapping=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
        if(!hMapping)
        {                                                                       
                CloseHandle(hFile);
                return FALSE;
        }
        ImageBase=MapViewOfFile(hMapping,FILE_MAP_READ,0,0,0);
    if(!ImageBase)
        {                                                                       
                CloseHandle(hMapping);
                CloseHandle(hFile);
                return FALSE;
        }
        pstMapFile->hFile=hFile;
        pstMapFile->hMapping=hMapping;
        pstMapFile->ImageBase=ImageBase;
        return TRUE;
}
2009-11-29 16:03
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
泥芭...老是能和你撞上~
2009-11-29 16:06
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
LS,让KX给我吧
2009-11-29 16:18
0
游客
登录 | 注册 方可回帖
返回
//