首页
社区
课程
招聘
如何获得节表地址?[求助]
2006-7-17 16:51 4161

如何获得节表地址?[求助]

2006-7-17 16:51
4161
已经获得了PE头地址,按照<Iczelion的PE教程>中描述的两种方法,我都没有正确得到显示节表名,下面是部分代码:        
          NumberOfSections = NtHeader->FileHeader.NumberOfSections;
       
        //因为NT头之后就是节表,故,节表头地址就是nt头地址加上NT结
          // 构大小.
        //或者用ImageBase+SizeOfHeaders的办法直接定位.
        //SectionHeader = (PIMAGE_SECTION_HEADER)
                   ((UINT32)NtHeader+(UINT32)sizeof(NtHeader));
        SectionHeader = (PIMAGE_SECTION_HEADER)
                    ((UINT32)NtHeader->OptionalHeader.ImageBase+
                    (UINT32)NtHeader->OptionalHeader.SizeOfHeaders);

可以确定这段代码之前的部分没有问题,那么是哪里 出了错?

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (3)
雪    币: 239
活跃值: (473)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
hmimys 2 2006-7-17 17:18
2
0
PIMAGE_NT_HEADERS GetNtHeaders(LPBYTE lpImage) {

        PIMAGE_DOS_HEADER        pDsHdr;
        PIMAGE_NT_HEADERS        pNtHdr;
        pDsHdr = (PIMAGE_DOS_HEADER)lpImage;
        pNtHdr = (PIMAGE_NT_HEADERS)(pDsHdr->e_lfanew + (DWORD)lpImage);
        return pNtHdr;
}

PIMAGE_SECTION_HEADER GetFirstSection(LPBYTE lpImage) {

        PIMAGE_NT_HEADERS                pNtHdr;
        PIMAGE_SECTION_HEADER        pScHdr;
        pNtHdr = GetNtHeaders(lpImage);
        pScHdr = (PIMAGE_SECTION_HEADER)((DWORD)pNtHdr + 0x18 + pNtHdr->FileHeader.SizeOfOptionalHeader);
        return pScHdr;
}
雪    币: 221
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
Casimodo 1 2006-7-17 17:34
3
0
呵呵.谢谢楼上大哥提醒

您的代码的实质仍然是用Nt头的地址加上Nt头结构的大小:

         0x18 + SizeOfOptionalHeader = sizeof(IMAGE_NT_HEADERS)

我也从这里发现了我的程序的错误,就是不能用sizeof(NtHeader);
而要用sizeof(IMAGE_NT_HEADERS)。  汗,基础问题。

其实,还有更简单的方法:
  
         SectionHeader = (PIMAGE_SECTION_HEADER) (NtHeader + 1);

更清晰,是吧? :)
雪    币: 239
活跃值: (473)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
hmimys 2 2006-7-17 18:30
4
0
SectionHeader = (PIMAGE_SECTION_HEADER) (NtHeader + 1);

pScHdr = (PIMAGE_SECTION_HEADER)((DWORD)pNtHdr + 0x18 + pNtHdr->FileHeader.SizeOfOptionalHeader);

还是这样用吧,具体原因看看看雪的书,你就明白了
游客
登录 | 注册 方可回帖
返回