一、概述
想要获取一个可执行文件(PE文件)里包含的资源文件,首先要解析可执行文件,得到资源存储的地址及大小,可参考 https://blog.youkuaiyun.com/zhyulo/article/details/85717711 。然后,根据资源存储方式,得到各资源的数据内容及其大小,可参考 https://blog.youkuaiyun.com/zhyulo/article/details/85930045 。
PE文件的资源中,字符串的资源类型ID=6。字符串在资源中分组存储,每组最多16个,以ID号分段,[ID/16]值相同的在同一组。在RC文件中,字符串的定义方式如下:
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
IDR_MAINFRAME "test\n\nTest\n\n\nTest.Document\nTest Document"
END
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
AFX_IDS_APP_TITLE "test"
AFX_IDS_IDLEMESSAGE "就绪"
END
二、字符串的资源结构
字符串在资源中,以固定16个字符串的方式进行存储。假如该组字符串资源在资源树的第二层中的ID值是baseID,其中一个字符串在改组的序号为index,那么该字符串的真实ID=(baseID-1)*16+index。
由于字符串中间可能包括'\0',字符串的长