M636界面部分资源分析

注意:所有的多字节数据,都是低位在前,高位在后的 。比如 89 34 00 63 应该为0x63003489
很奇怪,左软键弹出菜单在资源文件中找不到 。估计是直接集成到主程序里面的

00000000h: 01 00 04 00 0B 00 10 00 | 31 B2 71 08 7C 18 5F 00
前8个字节所有版本都一样的 | 该部分不知道什么意思,每个版本都不尽相同,但同一个版本的界面文件是一样的
00000010h: FA 02 00 00 这4个字节表示后面跟的资源地址对的个数,这里表示后面有0x02FA=762个资源
从这之后的开始就是下面这个索引地址对了:
struct
{
DWORD resNo;4字节的资源号,高两位都为00 即形如:AB CD 00 00 格式
DWORD address;10H 后表示该索引对应资源的偏移地址,从该部分的开头计算偏移地址【即从0x20860004开始的相对偏移地址】
}RESOURCE_ADDR
索引里面,实际上的图片,文字,铃声等资源仅为420个左右,其他的那些不知道是什么,估计是每一屏幕的菜单资源吧 。
跳转到address 10H的地方,首先是4个字节的 resNo 的重复,接下来的4个字节根据资源文件的不同而有如下区别:
struct
{
DWORD resNo;4字节的索引,和INDEX_ADDR.resNo的相同
DWORD length;
对于MID,MMF铃声,这四个字节是大小
对于bmp文件,宽度[WORD] * 高度[WORD],接着的data区的1000000000000000是文件头,后面的数据的长度是(宽度*高度*2)字节【导入的时候把24位的bmp文件转换成了16位的文件】
有一种比较特殊的索引,length == resNo,???不知是什么资源,可能是菜单
BYTEdata[]; 具体的数据区
}RESOURCE_DATA
文字分析:
索引为 F92F0000 为中文字符 前12个字符为标识头,后面4个字符为接下来的 字符串索引 所占的长度,包括自己共有4F04字节,也即有(4F04-4)/4 = 0x13C0个字符串,
再后面则是字符串索引4个字节一项,按顺序排下去,索引对应的字符串存放在【偏移地址为:索引本身所在的开始地址+索引存储的数值】 。比如:
在0x00171430h处为第一个字符串索引,存放的数据为 01 4F 00 00 -> 0x4f01,则该字符串对应的存放起始地址为:0x00171430h 0x4f01 = 0x00176631h
第二个字符串索引应该位于 (2-1)*40x00171430h = 0x00171434h处
第n个字符串索引应该位于 (n-1)*40x00171430h处
后面就是UTF-8编码的中文字符基本上都是3个字符表达一个汉字的UNICODE编码,每个字符串之间 00 隔开
索引为 F82F0000 为英文字符 前12个字符为标识头,英文字符的UTF-8编码和ASCII码一致的
菜单项分析:
菜单项偏移地址处应该 RESOURCE_DATA.length = RESOURCE_DATA.resNo;
每一个菜单界面应该有一个16字节头,然后按16字节一个菜单条目往下编排
struct
{
DWORD dw1; 估计是菜单的属性,风格
WORD wdreserve; 目前都为0
WORD wdNo1;
WORDwdNo2; 不知是一个什么编号
WORDwd[2];目前都为0
WORDitemNum; 项目个数
}MENU_HEAD;
struct
{
DWORD dw1;
WORDstrIndex; 菜单项名称在字符查找表中的序号(取值范围 1~0x4F04)
WORDwdNo; 不知是一个什么编号,感觉和 MENU_HEAD.wdNo 是在同一个空间里面的编号
DWORD subIndex;
对于仍有子菜单的项目,该位置存储子菜单项目的资源号(INDEX_DATA.index)
对于没有子菜单的项目,填充0
DWORD dw2; 目前都为0
}MENU_ITEM;
1 电话本菜单编排:
22900000资源:
80041200 00002600
E600 0000 0000 0800 8个菜单项 [060310:E300...]
00000000 ED11 E700 00000000 00000000 火拼速查 [060310:...ED11 E400...]
00007A1B C500 0000 F19F0000 00000000 查找
0000791B A60E EC00 00000000 00000000 添加 [060310:...A60E E900...]
0000781B FC10 E900 00000000 00000000 群组管理 [060310:...FC10 E600...]
00005D1F 2200 0000 F89F0000 00000000 通话信息
00007B1B 8C02 2201 00000000 00000000 快速拨号 [060310:...8C02 1F01...]

推荐阅读