Default.phoneformat文件的大致結(jié)構(gòu)和偏移量的計(jì)算方法:
文件開頭的4個(gè)字節(jié)代表支持的國家個(gè)數(shù),IOS 5.0.1的這一字段為E9 00 00 00,十進(jìn)制即為233。即IOS 5.0.1支持233個(gè)國家的卡號
接下來就是每個(gè)國家的信息,一條接一條,一共233條,每條信息都是12個(gè)字節(jié),這12個(gè)字節(jié)分別代表的是
0-3:國家代碼,ASCII碼的數(shù)字
4-7:國家縮寫,ASCII碼的字母
8-11:偏移量,指向該國家號碼匹配規(guī)則等數(shù)據(jù)的起始地址
在文件的開頭部分,用肉眼就可以發(fā)現(xiàn)在0x000000AC處中國的信息,如下
38 36 00 00 63 6E 00 00 18 19 00 00 | 8 6 . . c n . . . . . . |
86是中國電話號碼的國家代碼
cn是中國的縮寫
而十六進(jìn)制的18 19 00 00代表的是偏移量0x00001918(注意此處的順序要顛倒一下!!)
計(jì)算中國的數(shù)據(jù)區(qū)的偏移量:
第一個(gè)國家的數(shù)據(jù)區(qū)地址 = 4字節(jié)(國家個(gè)數(shù)計(jì)數(shù)器)+ 12(字節(jié)每個(gè)國家)* 233(個(gè)國家) = 0xAF0
中國的偏移量 = 0xAF0 + 0x1918 = 0x2408
然后前面就有一些亂七八糟的計(jì)數(shù)器,往后找8個(gè)字節(jié)就是前綴區(qū)了,就到了我們要修改的0x00002416了,這個(gè)數(shù)據(jù)就是這么算出來的。