注意:所有的多字节数据,都是低位在前,高位在后的。比如 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,???不知是什么资源,可能是菜单
BYTE data[]; 具体的数据区
}RESOURCE_DATA
文字分析:
索引为 F92F0000 为中文字符 前12个字符为标识头,后面4个字符为接下来的 字符串索引 所占的长度,包括自己共有4F04字节,也即有(4F04-4)/4 = 0x13C0个字符串,
再后面则是字符串索引4个字节一项,按顺序排下去,索引对应的字符串存放在【偏移地址为:索引本身所在的开始地址+索引存储的数值】。比如:
在0x00171430h处为第一个字符串索引,存放的数据为 01 4F 00 00 -> 0x4f01,则该字符串对应的存放起始地址为:0x00171430h+0x4f01 = 0x00176631h
第二个字符串索引应该位于 (2-1)*4 + 0x00171430h = 0x00171434h处
第n个字符串索引应该位于 (n-1)*4 + 0x00171430h处
后面就是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;
WORD wdNo2; 不知是一个什么编号
WORD wd[2]; 目前都为0
WORD itemNum; 项目个数
}MENU_HEAD;
struct
{
DWORD dw1;
WORD strIndex; 菜单项名称在字符查找表中的序号(取值范围 1~0x4F04)
WORD wdNo; 不知是一个什么编号,感觉和 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...]
0000771B 2902 0000 F09F0000 00000000 电话本管理
0000761B 5702 0000 F99F0000 00000000 资料室
2 信息菜单编排:
16900000资源:
80041200 00003000
1C010000 0000 0600 6个菜单项 [060310:1901...]
00000D1C 0700 0000 26900000 00000000 短信
00000E1C ED04 7D00 27900000 00000000 彩信
0000C31E 9602 0000 EB9F0000 00000000 语音信箱
00005523 8802 0000 F79F0000 00000000 小区广播
0000751B B612 0000 E89F0000 00000000 空间查看
0000C41E 9402 0000 EA9F0000 00000000 信息设置
小区广播菜单编排:
F79F0000资源:
0000A208 00008802 [060310:...00002700]
00000000 0000 0300 3个菜单项
00000000 EC02 3800 00000000 00000000 读广播消息
0000FA05 9A02 3900 00000000 00000000 自动显示
00000000 ED02 0000 F69F0000 00000000 频道选择
3 音画效果菜单编排:
18900000资源:
80041200 0000 2900
00000000 0000 0700 7个菜单项
00000000 1300 0000 E59F0000 00000000 铃声选择
00000000 FD10 0000 D99F0000 00000000 效果音设置
00009F1F 7B04 2500 00000000 00000000 提示方式 [060310:..7B04 2400...]
0000A01F 3203 2400 00000000 00000000 音量调整 [060310:..3203 2300...]
00000000 0F00 0000 E49F0000 00000000 待机设置
00000000 0111 0000 E39F0000 00000000 隐藏信息设置
00000000 3F04 0000 D89F0000 00000000 开关机效果
5 影音休闲菜单编排:
1C900000资源:
80041200 00000411 这一段不知道是什么
00000000 0000 0600 是指示项数的,表示总共有6条项目
00000B1C 240C 0000 1E900000 00000000 ;照相机->进入子菜单 240C反转后是(0C24-1)*4+字符查找表起始地址(0x00171430),找到对应的字符串索引 后面指示对应子菜单的索引 901E0000
0000421C 4100 0501 00000000 00000000 ;MP3播放器->直接进入程序 [060310:..4100 0201...]
0000411C 4200 1E00 00000000 00000000 ;电影院->直接进入程序
0000501E 2A00 4401 00000000 00000000 ;调频收音机->直接进入程序 [060310:..2A00 4101...]
00000000 4007 0200 00000000 00000000 ;电子书
00000000 2700 0000 F59F0000 00000000 ;游戏->进入子菜单【java版本的该地方为 无线java】
照相机菜单编排:
1E900000资源:
80044200 0000240C
00000000 0000 0400 4个菜单项
0000AD1C 250C 0500 00000000 00000000 拍摄照片->直接进入程序
0000651C E012 0301 00000000 00000000 拍摄视频->直接进入程序
0000AC1C 270C 0400 00000000 00000000 浏览照片->直接进入程序
0000651C E112 0401 00000000 00000000 浏览视频->直接进入程序
游戏菜单编排:【java版本也采用此资源】
F59F0000资源:
0000A208 00002700
00000000 0000 0300 3个菜单项
00000000 F310 0000 F49F0000 00000000 五子棋->进入子菜单
00000000 F409 0800 00000000 00000000 俄罗斯方块->进入子菜单
00000000 EE09 0700 00000000 00000000 推箱子->进入子菜单
Java版本:
0000A208 00003805
00000000 00000500
00000000 3E05 9300 00000000 00000000 应用管理器
00000000 8C00 9600 00000000 00000000 剩余空间
00000000 0A00 9200 00000000 00000000 设置
00000000 3400 0000 F49F0000 00000000 下载资源
00000000 9401 6801 00000000 00000000 重置
五子棋菜单编排:
F49F0000资源:
0000A208 0000F310
00000000 0000 0400 4个菜单项
00000000 9000 0000 F39F0000 00000000 新游戏->进入子菜单
0000F420 8B0C 2801 00000000 00000000 载入游戏->直接进入游戏
00000000 F410 0000 F29F0000 00000000 等级选择->进入子菜单
00000000 9200 2A01 00000000 00000000 游戏规则->查看游戏帮助 打开0x1109序号的字符串
五子棋->新游戏菜单编排:
F39F0000资源:
0000A208 00009000
00000000 0000 0200 2个菜单项
0000F220 F510 2801 00000000 00000000 先手->直接进入游戏
0000F320 F610 2801 00000000 00000000 后手->直接进入游戏
五子棋->等级选择菜单编排:
F29F0000资源:
00002209 0000F410
2B010000 0000 0300 3个菜单项
0000F520 9E00 2901 00000000 00000000 初级 打对勾表示选择【设置选项】
0000F620 9F00 2901 00000000 00000000 中级
0000F720 A000 2901 00000000 00000000 高级
6 工具箱菜单编排:
1A900000资源:
80041200 00000B00
00000000 0000 0800 8个菜单项
00009D20 1C00 0100 00000000 00000000 闹钟
00000000 6406 2301 00000000 00000000 日程管理
0000DF22 A20B 0000 DC9F0000 00000000 词典
0000221C 1D00 0A01 00000000 00000000 计算器
0000BD20 2000 2701 00000000 00000000 录音机
0000801B 2500 4301 00000000 00000000 便笺
0000991C 1F00 9D00 00000000 00000000 电脑通信
00000000 910E 0000 DD9F0000 00000000 其它
7 互联网菜单编排:
17900000资源:
80041200 00000400
22000000 0000 0400 4个菜单项
00000000 B912 8300 00000000 00000000 手机音乐专区
00000000 BA12 8400 00000000 00000000 声色炫彩铃
00000000 BB12 8500 00000000 00000000 免费天气预报
00000614 B004 7C00 00000000 00000000 主页
8 设置菜单编排:
19900000资源:
80041200 00000A00
00000000 0000 0500 5个菜单项
00005E06 FC02 FF00 00000000 00000000 时间设置
00000000 1800 0000 EC9F0000 00000000 话机设置
00000000 1500 0000 E29F0000 00000000 通话设置
0000F609 1900 0000 3F900000 00000000 网络设置
00008B1F 3300 0000 EF9F0000 00000000 安全信息