我針對 AMOI E8手機的ROM進行分析和替換文件,主要順著手工修改寫下去,其它的就不多說明了,以免越看越亂,如有不足之處還望指教。
前言:
需要工具軟件: dumPRom , rommaster , WinHex 以及本人寫的一個程序(非必須)。目錄設置:把 ROM 文件和軟件( nk_MP_060716.nba )放在統一目錄下,例如我用 E:/rom ,要增加的文件放 E:/rom/add 。在 ROM 文件中的十六進制數都是倒過來表示,比如“ 1A2B3C4D ”會成為“ 4D3C2B1A ”可以用我寫的程序來進行倒序(hamsrom.ys168.com)。
一、分析篇:
用 dumprom 分析文件結構,打開命令提示符(開始-運行-輸入 cmd 回車)輸入“ E:/rom/dump.exe E:/rom/nk_MP_060716.nba > E:/rom/dumpinfo.txt ” ( 可以直接把文件拖放到命令提示符窗口內 ) 回車,打開 dumpinfo.txt,可以看到首行img00000000:hdr=82ff1234,base=80040000,commandlineoffset=80040000,這個是指 ROM 中的基準偏移量為 80040000 ,就是指 ROM 文件的偏移量起始 0 位是手機中的 80040000 位.
再往下看有一行 80040040 - 80040048 L00000008 'ECEC' -> 82ff1234 ,用 WinHex 打開 ROM 文件,可以看到偏移量 40 (也就是手機中的 80040040 )就是 'ECEC' ,是 ROM 的標志(一般分析 ROM 可以先找 ECEC ),后面緊跟的十六進制數 34 12 FF 82 ,我們應該把它倒過來即 82 FF 12 34 ,這就文件指針的開始地址, 82ff1234-80040000 得 ROM 文件實際地址 02FB1234 ,轉到文件偏移量 02FB1234 就可以得到我們要修改的文件的所有信息了,查找dumpinfo.txt 中“ 82ff1234 ”就可以找到一段 82ff1234 - 82ff1288 L00000054 rom_00 header: dlls=01ac01dd-02000000 phys=80040000-82ff70b0, 279 modules, 542 files, 1 copyentries ext=80078640 ram=88480000-8a000000 cputype=000001c2 ,這就是 ROM 信息,需要特別說明的是 rom 文件的 2fb1264 位的“ 1E02 ”是指文件數量“ 021E ”= 542 ,我們手動增加文件后也要改這個數。
dumpinfo.txt 往下一行,這就是文件指針區開始的第一個文件 nk.exe ,這是一個 modent ,分散在 ROM 文件中的幾個地方,有興趣可以再分析,先用簡單一些的 filent (單一文件)說起,
轉到 dumpinfo.txt 最后倒數第三行, 82ff7094 - 82ff70b0 L0000001c filent 541 00000001 01c4f9ea1f89bb00 31 31 812b7fdc SkinSetting.lnk
說明: 82ff7094 - 82ff70b0 L0000001c :這一段信息在文件 82ff7094 - 82ff70b0 長度 0000001c ; filent :單一文件; 541 ,文件數編號;00000001 :文件在手機中的狀態,這個比較重要,但知道一般我們要加的用 00000005 (無壓縮,可在手機中拷出)和 00000805 (壓縮)就可以了;01c4f9ea1f89bb00 :文件修改時間,從 1601 年起,以 10^(-7) 秒計;
31 31 :前一個是文件實際大小,后一個是 ROM 中的實際大小,如果有壓縮兩個數字就不會一樣,可以往上找看看文件狀態為 00000805 的行;812b7fdc :文件實際內容的起始地址 812b7fdc-80040000=01277FDC 。
用 WinHex 打開 ROM 文件,移動到最底端, 2fb7094 到 2fb70af 這 1c 長度的內容就是上面 dumpinfo.txt 最后倒數第三行中的信息, 01000000 00BB891F EAF9C401 1F000000 1F000000 2CBECB80 DC7F2B81.
和上面內容對應起來看
01000000 --> 00000001 文件在手機中的狀態
00BB891F EAF9C401 文件修改時間
1F000000 --> 0000001F=31 文件實際大小
1F000000 --> 0000001F=31 ROM 中的實際大小
2CBECB80 --> 80CBBE2C =00C7BE2C 指向文件名內容地址 "SkinSetting.lnk"
DC7F2B81 --> 812B7FDC=01277FDC 文件實際內容的起始地址
每個文件指針段長度都為 1c ,如果文件刪除后,整個段會被刪除,后面的段會向前補上,所以我們先刪除一些文件后,在 ROM 文件的最后就會產生一大段的 0000000 ,我們可以緊接前面的數據加入自己的文件指針信息。
(待續…)
新聞熱點
疑難解答
圖片精選