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