重要聲明:Flex文件(.hs文件)的修改需要對(duì)電腦有較深的了解,特別是對(duì)16進(jìn)制代碼要能進(jìn)行熟練的操作。不小心導(dǎo)致的處理錯(cuò)誤將導(dǎo)致用修改后的hs文件刷機(jī)失敗,嚴(yán)重的可能導(dǎo)致手機(jī)無(wú)法開(kāi)機(jī)。因此修改hs文件前請(qǐng)三思!!!
hs文件實(shí)際上是16進(jìn)制代碼表,其中包含手機(jī)內(nèi)的功能文件以及seem代碼以及其他的控制代碼。但是要注意的是,有些seem文件的代碼在hs文件中是不全的,有些seem文件甚至沒(méi)有。而有些功能目錄下的文件,如 /a/motorola/certs/root/x509/ssl/rsa.crt ,在p2k上看到的目錄是不一樣的,這些文件不要去動(dòng)它。
用UltraEdit打開(kāi)hs文件,以文本的方式查看(注意不是Hex方式),可看到hs文件的組織方式:
第一行:AAB03000000D0000004A0005000000000006000092。這行其實(shí)是一個(gè)空字符,可不管它
第二行開(kāi)始,是功能文件和seem代碼的16進(jìn)制表示。其中,以 AAB030000XXX0000004A 開(kāi)頭的行是功能文件,以 AAB030000XXX0000002F 開(kāi)頭的是seem代碼。其中的XXX是變化的,下面有說(shuō)明。功能文件都是以一個(gè)空行為結(jié)束,空行代碼為 AAB03000000C0000004A0004000000000004008E。也就是說(shuō),兩個(gè)這樣的代碼行之間就是我們?cè)趐2k上看見(jiàn)文件了,只不過(guò)它是以16進(jìn)制表示。下面以 /a/mobile/audio/~AlertFile121.mid文件為例,說(shuō)明功能文件的表示方式。在hs文件中可以找到以下代碼,這就是/a/mobile/audio/~AlertFile121.mid文件的內(nèi)容,其中XXX......XXX是文件真正的內(nèi)容,因?yàn)閮?nèi)容代碼太長(zhǎng)而用這個(gè)來(lái)代替的。 AAB0300000310000004A0029000000000000000000442F612F6D6F62696C652F617564696F
2F7E416C65727446696C653132312E6D69640CB1
AAB0300003F80000004A03F0000000000002000003E8XXX......XXX1207
AAB0300003270000004A031F00000000000200000317XXX......XXXCE8B
AAB03000000C0000004A0004000000000004008E
代碼第一行是文件名(包含路徑),但其前面有44位的控制代碼。其中最后面44是表示這個(gè)文件的屬性是44。44后面的代碼就是文件名16進(jìn)制代碼(不包括最后四位校驗(yàn)碼0CB1)。再看前面的031,是文件名字節(jié)數(shù)(兩位一個(gè)字節(jié))加16。如本文件名的字節(jié)數(shù)是33,33+16=49,49的16進(jìn)制表示為031。然后還有中間的029,是文件名字節(jié)數(shù)加8。最后面的兩位字節(jié)0CB1是校驗(yàn)碼,它的生成方式是,將最前面的AAB0和最后面的0CB1去掉后中間的所有字節(jié)當(dāng)成16進(jìn)制數(shù)字相加的結(jié)果。如果結(jié)果超出了兩位字節(jié),將高位字節(jié)丟掉即可。注意的是每一個(gè)字節(jié)(兩位)當(dāng)成一個(gè)16進(jìn)制數(shù)字,然后累加。
代碼的第二行第三行是文件的真正內(nèi)容。每行1000字節(jié),控制代碼的最后面3E8就是十進(jìn)制的長(zhǎng)度1000,同樣3F8是1016,3F0就是1008。內(nèi)容的最后一行不足1000字節(jié)的,按實(shí)際長(zhǎng)度計(jì)算。每行最后面的校驗(yàn)碼按第一行同樣的方法處理。
代碼的第四行就一個(gè)空行,這是固定的,不用多說(shuō)。
上面就是功能文件的表示。再來(lái)看seem。比如0021_0001.seem,可在hs文件中找到其對(duì)應(yīng)代碼:
AAB0300000930000002F008B00000032000100000083XXX......XXX32E7
其中的00320001表示是0032_0001.seem,其他093、08B、083與上面所說(shuō)一樣。XXX......XXX是seem文件的實(shí)際內(nèi)容。注意的是內(nèi)容可能比實(shí)際的seem文件內(nèi)容要少,少的話就是seem文件的前面部分,其后面的部分由shx文件或其他方式生成。
以上就是hs文件的格式表示。了解了其格式,修改起來(lái)思路就清晰了。要?jiǎng)h除文件,將相應(yīng)的代碼刪除即可(包含一個(gè)空行的刪除),要增加文件就復(fù)雜點(diǎn),將其16進(jìn)制代碼拼成串,以1000字節(jié)為單位分行,計(jì)算出每行前面的控制代碼和后面的校驗(yàn)碼。拼好代碼后增加到hs文件中即可(手工弄的話得脫層皮哦~,編個(gè)程序還差不多。不過(guò)一般也不會(huì)增加文件的啦)。重要注意事項(xiàng):hs文件中是以一個(gè)0A字節(jié)作為換行符,而不是0D或0D0A,修改時(shí)注意。要修改seem,找到相應(yīng)的字節(jié)進(jìn)行更改,然后記得按規(guī)則更改校驗(yàn)碼就可以了。seem代碼間沒(méi)有空行。
寫(xiě)了這么多,比較亂,希望能看懂:) 附帶說(shuō)一句,F(xiàn)lex文件內(nèi)其實(shí)也未涉及到真正的操作系統(tǒng)程序,因此手機(jī)本身沒(méi)有的功能也不可能在這里面增加?磗hx文件里能否實(shí)現(xiàn)了(可能性也不大)。倒是用JAVA理論上可以增加手機(jī)功能,遺憾的是MIDP2.0的安全機(jī)制使得一般的愛(ài)好者無(wú)法使用手機(jī)中敏感的功能,只好作罷