“居廟堂之高,則憂其民”、“處江湖之遠(yuǎn),則憂其君”。
這種君與民的“思念”之情同樣發(fā)生在x65手機(jī)與我們之間。然而,我們今天卻要舞起雙劍、沖進(jìn)內(nèi)宮搞搞震!
左手劍:x65 flasher
這個(gè)x65 flasher就是我們盼望已久的x65手機(jī)的刷機(jī)軟件!
它的主要功能如下:
1.讀寫手機(jī)的閃存;
2.備份和恢復(fù)手機(jī)的部分或全部閃存:FUBU(flashfile FUllBackUp)和filesystem(文件系統(tǒng))、firmware(固件)、bootcore(啟動(dòng)內(nèi)核)或EEPROM lite;
3.將刷過補(bǔ)丁的bootcore復(fù)原;
4.顯示閃存地址映射圖;
概括起來,刷機(jī)軟件的主要作用就是刷補(bǔ)丁和恢復(fù)系統(tǒng)。
使用前需做一點(diǎn)準(zhǔn)備工作:用軟件包里的一個(gè)java程序px65i.jar破解bootcore(復(fù)制到\java\jam目錄下運(yùn)行,顯示*** OK ***時(shí)表示破解成功)。
然后,手機(jī)(要充足電)關(guān)機(jī)、插上數(shù)據(jù)線、運(yùn)行x65 flasher,顯示如下界面:

選擇正確的數(shù)據(jù)線連接端口和速率(一般選115200),按Connect連接手機(jī),稍后短按手機(jī)的開機(jī)鍵確認(rèn)連接,顯示:

這里按照功能劃分共有三個(gè)部分:
Flash Map:手機(jī)的閃存地址映射圖。

x65手機(jī)內(nèi)部MPU的程序和數(shù)據(jù)地址空間為32M(A0000000h~A1FFFFFFh,長度2000000h)。從圖上看,閃存的地址空間是連續(xù)的,實(shí)際在物理上可能對應(yīng)著不同的邏輯器件,例如bootcore(A0000000h~A001FFFFh)可能位于MPU芯片內(nèi)部,EEPROM和固件也可能位于外部不同的存儲(chǔ)器件中,只是這些器件由地址譯碼器統(tǒng)一在一個(gè)便于管理的連續(xù)空間內(nèi)。
映射圖將地址空間顯示為16x16共計(jì)256個(gè)128KB(長度20000h)的地址塊,每一個(gè)地址塊就是一個(gè)基本的功能劃分空間,同一功能可以按照簡化布線的原則占用不同的地址塊。
地址塊的位置序號(hào)(從左到右、由上到下、從0算起)和起始地址之間的換算方法是:將“序號(hào)x128x1024”的結(jié)果轉(zhuǎn)換成8位16進(jìn)制數(shù),再與A0000000h進(jìn)行邏輯或操作(這里相當(dāng)于將地址的最高位改為A)。例如,EEPROM(第1個(gè)粉紅色的地址塊)的起始地址為:(17x128x1024)h+A0000000h=220000h+A0000000h=A0220000h。
地址的計(jì)算和轉(zhuǎn)換可以用Windows的科學(xué)計(jì)算器來完成。反過來計(jì)算可以由地址獲得地址塊序號(hào),從而判斷出所屬的功能區(qū)。
Map相當(dāng)于皇宮的地形圖。
Backup和Restore:實(shí)現(xiàn)上述第2項(xiàng)功能。備份的FUBU或者其中的部分內(nèi)容保存為.fbk文件。需要注意的是,這些.fbk不是純機(jī)器碼文件,而是一種目標(biāo)文件,里面儲(chǔ)存著一些地址信息,只能供恢復(fù)系統(tǒng)之用,不能用于刷補(bǔ)丁。建議大家利用一點(diǎn)時(shí)間做個(gè)FUBU(大約40分鐘)和全部單項(xiàng)的備份。
Backup和Restore給我們留下了東山再起的退路。
Read Flash和Write Flash: 實(shí)現(xiàn)刷補(bǔ)丁功能。輸入起始地址和長度后,按Read Flash鍵可以讀出純二進(jìn)制機(jī)器碼文件,文件名為:起始地址.bin,建議不要改文件名,除非你另外記住了這個(gè)地址,否則一旦將這個(gè)文件寫入到了其他的地址,你的手機(jī)可能會(huì)瘋掉!
作為研究之用,你盡可以讀取上述地址范圍內(nèi)的任意一個(gè)字節(jié)或者一整段內(nèi)容,但是需要注意,x65的閃存器件都是按頁寫入的,即一次寫入一個(gè)128K的地址塊,所以,當(dāng)你想要刷補(bǔ)丁時(shí),讀寫的起始地址和長度就必須一致并且符合以下要求:二者必須都是20000h(即128x1024)的整數(shù)倍。例如,起始地址A1230000h是錯(cuò)誤的,A1220000h是正確的;長度10000h是錯(cuò)誤的,40000h是正確的。
讀出來的地址塊備份后用UltraEdit編輯(打補(bǔ)丁),然后再按原地址和長度寫回去。有關(guān)打補(bǔ)丁的方法請參閱寶典中的相關(guān)文章。
建議大家先將默認(rèn)的32M閃存內(nèi)容讀出來保存好。
Read Flash和Write Flash是我們出手的寶劍,兄弟們務(wù)必一招奪命啊!
警告:使用后手機(jī)有可能開不了機(jī)了!斷開連接。不行?莫急,按死機(jī)方案處理,這個(gè)大家都知道的。
右手劍:Smelter 4.6
這是一個(gè)陌生而又令人費(fèi)解的名字。字面意思是“熔爐, 熔煉工”。這就是我們修練上乘武功的葵花寶典。
運(yùn)行Smelter,語言選擇英文。打開我們讀取的32M文件,按“Information”菜單顯示如下:
這里統(tǒng)計(jì)了一些比較籠統(tǒng)的數(shù)據(jù),包括固件、內(nèi)置圖片、語言包以及EEPROM的數(shù)量和位置等信息。從圖中可以看到,一些EEPROM區(qū)域被刪除了,另外C6C的Menus一項(xiàng)為0,而CX65為62項(xiàng)(16版)。
該軟件有6個(gè)常用的手機(jī)信息快捷按鈕,分別介紹如下:
E:EEPROM 信息。這是夢開始的地方,像啟動(dòng)航空模式之類的功能都可以在這兒實(shí)現(xiàn)。
這里我們只需要關(guān)注Description、Offset這兩列內(nèi)容,前者是功能定義,后者是該功能在閃存中的地址偏移量(與A0000000h相或后才是絕對地址)。通過分析可以發(fā)現(xiàn),這些地址集中在0023xxxxh~0024xxxxh和00FExxxxh區(qū)域,換算成地址塊序號(hào)正好對應(yīng)著地址映射圖中的粉紅色EEPROM區(qū)(第17、18、127塊)。
按鼠標(biāo)右鍵可以保存相應(yīng)的程序代碼,配合仿真器或反匯編程序即可掌握該功能的工作原理,進(jìn)而設(shè)計(jì)自己的補(bǔ)丁程序。
L:語言包。
這里是手機(jī)固化的菜單、設(shè)置等的文字內(nèi)容及其位置信息,按鼠標(biāo)右鍵可以顯示不同的語言包文字及其位置信息。據(jù)此可以修改不恰當(dāng)?shù)姆g方法,例如將“播放視訊片”(地址偏移量1BA64Ch)改為“自動(dòng)換片”等等。
M:菜單。
這里是按鍵和快捷按鍵的入口地址。我們熟知的DSE 1.0.4.2就是在這里面做的文章。其中Entry一列就是該鍵的入口地址,改變這個(gè)地址就改變了按鍵定義,同時(shí),我們順藤摸瓜就可以追蹤到該功能的程序入口。這里可是各路豪杰大展拳腳的地方,比如進(jìn)入通訊錄查找功能中,把首漢字首拼音查詢改為所有漢字的首拼音查詢。分析程序的秘密和原理也可以從這里入手。
P:內(nèi)置圖片。
包括系統(tǒng)的九宮圖標(biāo)、錄音機(jī)的動(dòng)畫等等,包含了地址、大小和圖片等資料,非常直觀。有趣的是,gif格式的動(dòng)畫在手機(jī)里是一幅幅靜態(tài)圖片,最后由定時(shí)程序合成動(dòng)畫。更改系統(tǒng)圖片可以用專門的軟件SPC3來實(shí)現(xiàn)。
F:文件系統(tǒng)。包括系統(tǒng)文件(地址映射圖中的藍(lán)色方塊)和用戶文件(黃色方塊)。
通過計(jì)算可以看出,通過紅外線或數(shù)據(jù)線傳到手機(jī)里的數(shù)據(jù)都儲(chǔ)存在了黃色的用戶文件區(qū)里面。隱含文件夾config下的內(nèi)容位于藍(lán)色的系統(tǒng)文件區(qū)里面。憑直覺,兩個(gè)區(qū)的容量之和應(yīng)該大于系統(tǒng)的最大標(biāo)稱空間10.32M。
讓我們計(jì)算一下:藍(lán)色方塊20個(gè)=2.5M,黃色方塊89個(gè)=11.125M,二者合計(jì)=13.625M,比標(biāo)稱的最大空間大3.305M!
我的手機(jī)現(xiàn)有6.75M空間,傳一個(gè)200K的文件到data目錄下,空間變?yōu)?.55M。刪掉,傳到config目錄下,空間還是6.75M!沒有變化!繼續(xù)傳了共計(jì)840K的文件,傳不進(jìn)去了,加上原來的849K系統(tǒng)文件,總計(jì)1.65M。再向cache目錄傳文件,共計(jì)270K裝滿。這樣,兩個(gè)隱含目錄原有文件855K,又傳入文件1110K約1.1M,總計(jì)>1.9M,系統(tǒng)文件區(qū)剩余約600K,而這時(shí)手機(jī)的文件管理器顯示的可用空間仍然是6.75M!接著運(yùn)行幾個(gè)軟件,一切正常。
至此,我們找到了1.9M空間,可以用MPM/SiMoCo來存儲(chǔ)文件,但是,還不能在手機(jī)里很方便地加以利用(可以將default目錄下的系統(tǒng)默認(rèn)圖鈴改為自己喜歡的同名大文件來加以利用)。另外還有約600K的系統(tǒng)空間和約800K的用戶空間無法訪問,這些空間(約12個(gè)地址塊)很可能被系統(tǒng)留給了文件名和目錄數(shù)據(jù)庫以及一些后臺(tái)生成的臨時(shí)系統(tǒng)文件等。
這樣,我們意外地發(fā)現(xiàn)了x65的>1M的可利用空間!希望以后的補(bǔ)丁能讓我們自由地使用這一寶貴的空間。
D:閃存地址映射表,作用類似于x65 flasher的地址映射圖。
其他一些不甚重要的功能這里就不再介紹了。另外需要注意,這里的一個(gè)Block塊是64KB。
通過以上功能的介紹,我們對x65手機(jī)的內(nèi)部地址空間分布、系統(tǒng)功能調(diào)用參數(shù)和入口地址以及跟蹤調(diào)試的方法有了一個(gè)全面的理解,一幅異常翔實(shí)的進(jìn)攻路線圖鋪在了我們的面前,配合內(nèi)部MPU的匯編、調(diào)試程序(這里下載:http://www.arm.com)以及更高級(jí)的仿真器等先進(jìn)工具,相信廣大的西機(jī)高手們完全有能力擺平西門子,做x65的君王!