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

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

2022-3-12 17:27
7041

想获取区段的数据进行特征码搜索 不知道怎么获取 论坛下了好多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;
    }
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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

*

最后于 2022-4-16 09:30 被hkx3upper编辑 ,原因:
2022-4-15 22:59
0
雪    币: 1286
活跃值: (2059)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
hkx3upper 我搞了一下,要不你去看看1d6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6Z5K9%4R3K6N6i4m8H3k6i4u0Q4x3V1k6r3e0@1E0e0i4K6u0V1g2q4u0a6g2q4!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4g2)9&6b7#2!0m8z5q4m8G2j5#2!0q4z5g2!0m8x3g2!0n7z5g2!0q4y4#2)9&6b7W2!0m8c8g2!0q4y4#2)9&6b7g2)9^5y4q4m8J5L8$3y4W2M7#2y4W2j5%4g2J5k6g2)9J5k6h3y4Q4c8e0c8Q4b7U0S2Q4b7f1b7`.
谢谢分享
2022-4-16 00:59
0
雪    币: 1680
活跃值: (2583)
能力值: ( 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
雪    币: 92
活跃值: (467)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
静态分析?加壳的pe搜索特征码就没用了,可能有N多个代码段、数据段
2022-4-18 18:06
0
游客
登录 | 注册 方可回帖
返回