重要声明:Flex文件(.hs文件)的修改需要对电脑有较深的了解,特别是对16进制代码要能进行熟练的操作。不小心导致的处理错误将导致用修改后的hs文件刷机失败,严重的可能导致手机无法开机。因此修改hs文件前请三思!!!
hs文件实际上是16进制代码表,其中包含手机内的功能文件以及seem代码以及其他的控制代码。但是要注意的是,有些seem文件的代码在hs文件中是不全的,有些seem文件甚至没有。而有些功能目录下的文件,如 /a/motorola/certs/root/x509/ssl/rsa.crt ,在p2k上看到的目录是不一样的,这些文件不要去动它。
用UltraEdit打开hs文件,以文本的方式查看(注意不是Hex方式),可看到hs文件的组织方式:
第一行:AAB03000000D0000004A0005000000000006000092。这行其实是一个空字符,可不管它
第二行开始,是功能文件和seem代码的16进制表示。其中,以 AAB030000XXX0000004A 开头的行是功能文件,以 AAB030000XXX0000002F 开头的是seem代码。其中的XXX是变化的,下面有说明。功能文件都是以一个空行为结束,空行代码为 AAB03000000C0000004A0004000000000004008E。也就是说,两个这样的代码行之间就是我们在p2k上看见文件了,只不过它是以16进制表示。下面以 /a/mobile/audio/~AlertFile121.mid文件为例,说明功能文件的表示方式。在hs文件中可以找到以下代码,这就是/a/mobile/audio/~AlertFile121.mid文件的内容,其中XXX......XXX是文件真正的内容,因为内容代码太长而用这个来代替的。 AAB0300000310000004A0029000000000000000000442F612F6D6F62696C652F617564696F
2F7E416C65727446696C653132312E6D69640CB1
AAB0300003F80000004A03F0000000000002000003E8XXX......XXX1207
AAB0300003270000004A031F00000000000200000317XXX......XXXCE8B
AAB03000000C0000004A0004000000000004008E
代码第一行是文件名(包含路径),但其前面有44位的控制代码。其中最后面44是表示这个文件的属性是44。44后面的代码就是文件名16进制代码(不包括最后四位校验码0CB1)。再看前面的031,是文件名字节数(两位一个字节)加16。如本文件名的字节数是33,33+16=49,49的16进制表示为031。然后还有中间的029,是文件名字节数加8。最后面的两位字节0CB1是校验码,它的生成方式是,将最前面的AAB0和最后面的0CB1去掉后中间的所有字节当成16进制数字相加的结果。如果结果超出了两位字节,将高位字节丢掉即可。注意的是每一个字节(两位)当成一个16进制数字,然后累加。
代码的第二行第三行是文件的真正内容。每行1000字节,控制代码的最后面3E8就是十进制的长度1000,同样3F8是1016,3F0就是1008。内容的最后一行不足1000字节的,按实际长度计算。每行最后面的校验码按第一行同样的方法处理。
代码的第四行就一个空行,这是固定的,不用多说。
上面就是功能文件的表示。再来看seem。比如0021_0001.seem,可在hs文件中找到其对应代码:
AAB0300000930000002F008B00000032000100000083XXX......XXX32E7
其中的00320001表示是0032_0001.seem,其他093、08B、083与上面所说一样。XXX......XXX是seem文件的实际内容。注意的是内容可能比实际的seem文件内容要少,少的话就是seem文件的前面部分,其后面的部分由shx文件或其他方式生成。
以上就是hs文件的格式表示。了解了其格式,修改起来思路就清晰了。要删除文件,将相应的代码删除即可(包含一个空行的删除),要增加文件就复杂点,将其16进制代码拼成串,以1000字节为单位分行,计算出每行前面的控制代码和后面的校验码。拼好代码后增加到hs文件中即可(手工弄的话得脱层皮哦~,编个程序还差不多。不过一般也不会增加文件的啦)。重要注意事项:hs文件中是以一个0A字节作为换行符,而不是0D或0D0A,修改时注意。要修改seem,找到相应的字节进行更改,然后记得按规则更改校验码就可以了。seem代码间没有空行。
写了这么多,比较乱,希望能看懂:) 附带说一句,Flex文件内其实也未涉及到真正的操作系统程序,因此手机本身没有的功能也不可能在这里面增加。看shx文件里能否实现了(可能性也不大)。倒是用JAVA理论上可以增加手机功能,遗憾的是MIDP2.0的安全机制使得一般的爱好者无法使用手机中敏感的功能,只好作罢