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