首页
社区
课程
招聘
如何读取PE区段中的.text数据
发表于: 2022-3-12 17:27 6816

如何读取PE区段中的.text数据

2022-3-12 17:27
6816

想获取区段的数据进行特征码搜索 不知道怎么获取 论坛下了好多PE例子都没有看到解析区段数据的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 得到第一个区段
PIMAGE_SECTION_HEADER pSectionHeader = IMAGE_FIRST_SECTION(pNTHeader32);
CString TmpCstr = _T("");
DWORD PeBase = 0;
for (int i = 0; i < pNTHeader32->FileHeader.NumberOfSections; i++) {
 
    TCHAR tmpWchar[9] = { 0 };
    CHAR_TO_WCHAR((CHAR*)&(pSectionHeader[i].Name), tmpWchar);
    TmpCstr.Format(_T("%s"), tmpWchar);
    m_PeShowEditValue += TmpCstr;
    m_PeShowEditValue += _T("\r\n");
    if (TmpCstr ==".text")
    {
        TmpCstr.Format(_T("区段数据的文件偏移:%x H"), pSectionHeader[i].PointerToRawData);
        m_PeShowEditValue += TmpCstr;
        m_PeShowEditValue += _T("\r\n");
 
        TmpCstr.Format(_T("区段数据的RVA:%x H"), pSectionHeader[i].VirtualAddress);
        m_PeShowEditValue += TmpCstr;
        m_PeShowEditValue += _T("\r\n");
        MessageBoxA(NULL, NULL, NULL, NULL);
        PeBase = 1;
        PeBase = (pSectionHeader[i].PointerToRawData + pSectionHeader[i].SizeOfRawData);
        TmpCstr.Format(_T("区段数据的大小:%x H"), pSectionHeader[i].SizeOfRawData);
        m_PeShowEditValue += TmpCstr;
        m_PeShowEditValue += _T("\r\n");
        m_PeShowEditValue += _T("\r\n");
        m_PeShowEditValue += _T("\r\n");
        break;
    }
}

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 193
活跃值: (630)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

*

最后于 2022-4-16 09:30 被hkx3upper编辑 ,原因:
2022-4-15 22:59
0
雪    币: 1285
活跃值: (1764)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
hkx3upper 我搞了一下,要不你去看看https://github.com/hkx3upper/FOKS-TROT,在Poc项目的ProcesSecure.c中
谢谢分享
2022-4-16 00:59
0
雪    币: 1541
活跃值: (1643)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不知道看懂你的意思没,我觉得把代码简单改一下就行了吧,另外我觉得仅仅用.text这种区段名来匹配是不可靠的,还要看区段是否有可执行属性
       // 得到第一个区段
       PIMAGE_SECTION_HEADER pSectionHeader = IMAGE_FIRST_SECTION(pNTHeader32);
       CString TmpCstr = _T("");
       DWORD PeBase = 0;
       for (int i = 0; i < pNTHeader32->FileHeader.NumberOfSections; i++) {

               TCHAR tmpWchar[9] = { 0 };
               CHAR_TO_WCHAR((CHAR*)&(pSectionHeader[i].Name), tmpWchar);
               TmpCstr.Format(_T("%s"), tmpWchar);

               if (TmpCstr == ".text")
               {
                       HANDLE h = CreateFile(TEXT("PATH"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
                       DWORD l = pSectionHeader[i].SizeOfRawData;
                       void* p = malloc(l);
                       DWORD n;
                       SetFilePointer(h, pSectionHeader[i].PointerToRawData, NULL, FILE_BEGIN);
                       ReadFile(h, p, l, &n, NULL);

                       do_something(p, l);//获取到的.text区段的数据

                       free(p);
                       CloseHandle(h);
                       break;
               }
       }
2022-4-16 15:18
1
雪    币: 102
活跃值: (462)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
静态分析?加壳的pe搜索特征码就没用了,可能有N多个代码段、数据段
2022-4-18 18:06
0
游客
登录 | 注册 方可回帖
返回
//