对于需要对软件汉化,修改界面的这节内容挺重要
我们可以通过RVA定位到资源表的位置
资源定义
Windows 将程序的各种界面定义为资源,包括加速键(Accelerator)、位图(Bitmap)、光标(Cursor)、对话框(Dialog Box)、图标(Icon)、菜单(Menu)、串表(String Table)、工具栏(Toolbar)和版本信息(Version Information)等。
资源有很多种类型,每种类型的资源中可能存在多个资源项,这些资源项,用不同的ID 或名称来区分。但是,要将这么多种类型的不同ID 的资源有序地组织起来是一件非常痛苦的事情,因此采取类似磁盘目录结构的方式保存。
常用资源类型如下:
//资源类型名称映射表
typedef struct tagRES_ID_NAME_TABLE
{
LPSTR id;
char name[_MAX_PATH];
}RES_ID_NAME_TABLE;
static RES_ID_NAME_TABLE ResIdNameTable[0x17] = {
{0, "Unknown"},
{RT_CURSOR, "光标"},
{RT_BITMAP, "位图"},
{RT_ICON, "图标"},
{RT_MENU, "菜单"},
{RT_DIALOG, "对话框"},
{RT_STRING, "字符串表"},
{RT_FONTDIR, "字体目录"},
{RT_FONT, "字体"},
{RT_ACCELERATOR, "加速器表"},
{RT_RCDATA, "自定义资源"},
{RT_MESSAGETABLE, "消息表"},
{RT_GROUP_CURSOR, "图标组"},
{0, "Unknown"},
{RT_GROUP_ICON, "光标组"},
{0, "Unknown"},
{RT_VERSION, "版本信息"},
{RT_PLUGPLAY, "即插即用资源"},
{RT_VXD, "Vxd"},
{RT_ANICURSOR, "动态光标"},
{RT_ANIICON, "动态图标"},
{RT_HTML, "HTML文档"},
{RT_MANIFEST, "XPManifest"},
};
资源结构体解析
首先,资源结构体分很多,但是有用的就三个
IMAGE_RESOURCE_DIRECTORY 根目录(资源目录头)
IMAGE_RESOURCE_DIRECTORY_ENTRY 子目录(资源目录项)其中根目录下可以有很多子目录(也就是说根目录下会有子目录的)
IM