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

posted @ 2021-07-31 19:20  紅人  阅读(121)  评论(0编辑  收藏  举报