• WindowsPE 资源表


    0x01IMAGE_RESOURCE_DIRECTORY

    资源表分布图

     查看一个exe 资源表

     

    4000位置 资源目录头的结构体

    typedef struct _IMAGE_RESOURCE_DIRECTORY {
        DWORD   Characteristics;
        DWORD   TimeDateStamp;
        WORD    MajorVersion;
        WORD    MinorVersion;
        WORD    NumberOfNamedEntries;
        WORD    NumberOfIdEntries;
    //  IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[];
    } IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY;

     

     0x02IMAGE_RESOURCE_DIRECTORY_ENTRY

    接着就是资源目录项

    //@[comment("MVI_tracked")]
    typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
        union {
            struct {
                DWORD NameOffset:31;
                DWORD NameIsString:1;
            } DUMMYSTRUCTNAME;
            DWORD   Name;
            WORD    Id;
        } DUMMYUNIONNAME;
        union {
            DWORD   OffsetToData;
            struct {
                DWORD   OffsetToDirectory:31;
                DWORD   DataIsDirectory:1;
            } DUMMYSTRUCTNAME2;
        } DUMMYUNIONNAME2;
    } IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY;

     

     

     看一下预定义16个标识

     

     可以看到分别对应 id,名字 4个结构体 03 05 0e 10 的id 站一个双子

     

     高位为80 就是 高位1  地位代表  从资源表4000偏移30位置 就是下一个资源项 后面也是同样的偏移分别偏移50,68,80

    30位置又是IMAGE_RESOURCE_DIRECTORY 结构体

     2个资源项 id是 1,2   下一级偏移位置在98,b0  如果有会继续递归下去 直到把所有的关系找全

     可以看到没找到下一个了  高位也不是1了 说明这是最后一层 代表 id=407 偏移110

    rva=4160 大小=2e8  这一层分析结束  后面都是这样分析的 以此类推

     0x03IMAGE_RESOURCE_DATA_ENTRY

    typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
        DWORD   OffsetToData;
        DWORD   Size;
        DWORD   CodePage;
        DWORD   Reserved;
    } IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY;

     

     这个结构也上面推到到最后的结构 前2个值

     接着看4160 这个地址 转换地址foa 也是4160

     这些就是 图标的属性设置 具体单个内容都是类似结构体

     可以在文件的图标组看到

     

     26  相对图标组偏移 文件物理地址 可以通过更改这个地址来显示不同图标 其实算是图标的下标 需要保证ico大小相同

     

     对应的第一个下标ico

    从此山高路远,纵马扬鞭。愿往后旅途,三冬暖,春不寒,天黑有灯,下雨有伞。此生尽兴,不负勇往。
  • 相关阅读:
    0401. Binary Watch (E)
    0436. Find Right Interval (M)
    0151. Reverse Words in a String (M)
    1344. Angle Between Hands of a Clock (M)
    0435. Non-overlapping Intervals (M)
    0434. Number of Segments in a String (E)
    0063. Unique Paths II (M)
    0062. Unique Paths (M)
    0100. Same Tree (E)
    0190. Reverse Bits (E)
  • 原文地址:https://www.cnblogs.com/feizianquan/p/15085006.html
Copyright © 2020-2023  润新知