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