首页
社区
课程
招聘
[旧帖] 编写PE工具遇到问题,求助~(关于导入表的获取) 0.00雪花
发表于: 2011-3-7 19:30 3581

[旧帖] 编写PE工具遇到问题,求助~(关于导入表的获取) 0.00雪花

2011-3-7 19:30
3581
这个问题好头疼啊,想不明白~~
描述:
PE文件通过文件映射到内存,所以我认为可以在文件中用文件偏移找导入表结构或者是在内存中根据基地址与RVA的和找导入表结构,通过学习和看了一些源码,看到不少都是用CFile类然后通过文件偏移找导入表结构,后面又看了加密解密第三版中的PE代码,发现它的思路好像是第二个,在内存中读取导入表结构。。但是
PIMAGE_IMPORT_DESCRIPTOR  GetFirstImportDesc(LPVOID ImageBase)
{
        PIMAGE_IMPORT_DESCRIPTOR pImportDesc;
        pImportDesc=(PIMAGE_IMPORT_DESCRIPTOR)GetDirectoryEntryToData(ImageBase,IMAGE_DIRECTORY_ENTRY_IMPORT);
    if(!pImportDesc)
                return NULL;         
           return  pImportDesc;
}

LPVOID GetDirectoryEntryToData(LPVOID ImageBase,USHORT DirectoryEntry)
{
        DWORD dwDataStartRVA;
        LPVOID pDirData=NULL;
        PIMAGE_NT_HEADERS     pNtH=NULL;
        PIMAGE_OPTIONAL_HEADER pOH=NULL;

        pNtH=GetNtHeaders(ImageBase);
        if(!pNtH)
                return NULL;
        pOH=GetOptionalHeader(ImageBase);
        if(!pOH)
                return NULL;
    dwDataStartRVA=pOH->DataDirectory[DirectoryEntry].VirtualAddress;
      if(!dwDataStartRVA)
        return NULL;
  
        pDirData=RvaToPtr(pNtH,ImageBase,dwDataStartRVA);//就是这边,还是找了文件偏移   if(!pDirData)
                return NULL;         
           return  pDirData;
}

我非常不理解,从内存直接找导入表结构为什么不能直接用PE加载的基地址+导入表的RVA来获取需要的导入表的起始内存呢,为什么这边的导入表RVA被转化成了文件偏移了?看了KSSD,找到一篇文章描述的和我认识相同的


求解惑啊~~

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
  • 1.jpg (7.68kb,364次下载)
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人帮忙解答下~~~自己顶个~~
2011-3-8 07:30
0
雪    币: 7188
活跃值: (1200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
同求高手解答!期待……
2011-3-10 13:35
0
雪    币: 1149
活跃值: (908)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
4
为什么这边的导入表RVA被转化成了文件偏移了?

如果你是直接将Pe文件映射到内存中,而不是那种想系统加载pe文件那样进行映射,这就有区别。。。
前者,你必须转化为文件偏移,后者你可以使用rva+基地址 使用。。。
2011-3-10 13:51
0
雪    币: 1149
活跃值: (908)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
5
为什么这边的导入表RVA被转化成了文件偏移了?

如果你是直接将Pe文件映射到内存中,而不是那种想系统加载pe文件那样进行映射,这就有区别。。。
前者,你必须转化为文件偏移,后者你可以使用rva+基地址 使用。。。
2011-3-10 13:51
0
雪    币: 1149
活跃值: (908)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
6
为什么这边的导入表RVA被转化成了文件偏移了?

如果你是直接将Pe文件映射到内存中,而不是那种想系统加载pe文件那样进行映射,这就有区别。。。
前者,你必须转化为文件偏移,后者你可以使用rva+基地址 使用。。。
2011-3-10 13:52
0
雪    币: 1149
活跃值: (908)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
7
sorry  学校机房网速问题。。。发了这么多。。。惭愧。。。。。。
2011-3-10 14:19
0
游客
登录 | 注册 方可回帖
返回
//