Android系統固件包解包、修改(涉及root提權)、打包

 

目錄

瑞芯微android固件包介紹

一、解包、打包

二、固件升級

三、固件修改

1、固件精減、添加APK軟件

2、提取Root權限

3、修改用戶分區大小

A.修改HWDEF文件:

B.修改parameter文件

5、美化界面

A.界面美化

B.修改開機LOGO(Android啓動時,出現閃動的ANDROID字樣的動畫圖片)

6、桌面美化


瑞芯微android固件包介紹

瑞芯微的android固件包分兩種:

一種爲量產升級包(暫且如此稱呼吧,PS:其實稱之爲開發包較爲合適,因爲是使用開發工具進行升級。),使用量產升級工具RKAndroidTool.exe進行升級,量產升級包的文件包含:HWDEF、package-file、parameter、recover-script、Rock28Boot(L).bin、update-script和一個Image文件夾,裏邊又包含boot.img、 kernel.img、 misc.img、 recovery.img 、system.img五個鏡像文件。

System.img包含所有用戶資源,大部分情況下修改system.img文件就能達到我們的目的。本文也是重點圍繞system.img的修改。

另一種爲用戶升級包(也暫且如此稱呼吧),即將上述量產升級包的文件用工具打包成一個文件――update.img,使用用戶升級工具RKAndroidDM.exe進行升級。此文件包需通過解包成量產升級包後才能修改,修改後再打包成update.img進行升級。

一、解包、打包


對於update.img的解包、打包,需用到附件“打包解包工具”中的AFPTool.exe、mkupdate.bat、unpack.bat三個文件,其中unpack.bat爲解包工具,

mkupdate.bat爲打包工具。將用戶升級包update.img和上述三個文件放在同一目錄下,雙擊unpack.bat後,就可以將用戶升級包解包成6個文件和一個Image文件夾,即和量產升級包完全相同的文件。此時可對相應的文件進行修改,修改完成後,再雙擊mkupdate.bat,會在Image文件夾下產生一個update.img,此文件就是打包後新生成的用戶升級包文件。

對於system.img的解包、打包,需用到cramfsck、mkcramfs兩個工具,此img文件和工具需在Linux(Ubuntu、RedHat等)系統下操作和使用,來進行解包、打包,cramfsck爲解包工具,mkcramfs爲打包工具。

先通過本地硬盤、U盤或者Live CD啓動到Linux下(Linux相關知識和安裝不在本篇介紹範圍內,請自行Google),然後將system.img、cramfsck、mkcramfs三個文件拷貝到系統的root文件夾下。(有些Linux系統對掛載的其它分區或磁盤兼容性不好,所以拷貝到系統分區進行操作可減少出問題的可能性,本文涉及到Linux部分的操作以BackTrack3操作系統爲示例。部分人反映用Ubuntu的精簡等版本時用不了已編譯好的cramfsck和mkcramfs,所以在教程包中又放入了一個deb的文件,在啓動到Linux後雙擊就可以像Windows一樣安裝它了。)

打開一個shell,在shell中輸入:

cramfsck -x system system.img

對system.img文件進行解包,執行完成後,會產生一個名爲system的文件夾,如下圖所示:

也可以採用以下方法進行解包,原理就是mount這個鏡像文件,然後再拷貝出來,命令如下:

mkdir system

sudo mount -t cramfs -o loop system.img system

tar cvzf system.tgz system

sudo umount system

rm -r system

tar xzvf system.tgz

用這個方法的好處是可以避免某種情況下出錯的可能,第一種方法在某些情況下會造成某些文件損壞,有碰到過。

解包後的System文件夾內包含9個文件夾和1個文件,簡單說明如下:

/system/app 系統應用程序存放目錄

/system/bin 系統的本地程序,是binary二進制的程序,裏面主要是Linux系統自帶的組件。

/system/etc 系統的配置文件,比如APN接入點設置等核心配置。 /system/fonts 字體文件夾。

/system/framework 主要是一些核心的文件,從後綴名爲jar可以看出是系統平臺框架。

/system/lib 存放的主要是系統底層庫,如平臺運行時庫。

/system/media 鈴聲音樂文件夾,除了常規的鈴聲外還有一些系統提示事件音

/system/usr 用戶文件夾,包含共享、鍵盤佈局、時間區域文件等。
/system/xbin 存放系統管理工具,他們都是爲系統管理員準備的,是一些系統管理和配置工具。

/system/build.prop 屬性文件,“關於MID”中所顯示的軟件版本、內核、機型等信息。

通過上面進行簡單的介紹,相信你已有了一個大概的瞭解了。

此時可對system文件夾下的文件進行其它修改了,比如提取root權限、固件精減、APK替換修改等操作。

修改完成後,需要對system文件夾進行打包,在shell中輸入:

mkcramfs system system02.img

(爲了便於區分原先的img文件,所以建議重新生成的文件不要與原文件名一樣。)

此時會在root目錄下生成一個新文件system02.img,這個文件就是我們修改好並重新打包OK的文件了。

7-506-png_6_0_0_135_115_706_570_893.25_1263.375-628-0-0-628.jpg

此時,對於update.img和system.img兩個文件的解包、打包操作就介紹完了。對於system.img和相應的文件是否需要打包成用戶升級包update.img就看各位是否有需要了。

 

二、固件升級


固件升級有兩種工具可實現(其實還有第三種升級――即通過MID本機進行升級,不過需要原生軟件和硬件支持纔可以實現,目前發現上市的機子還無此功能。所以略過 ),即量產升級、用戶升級。

量產升級:將量產升級包的6個文件和一個文件夾,放入../升級工具/量產升級工具_RKAndroidTool/rockdev文件夾下,然後打開量產工具

RKAndroidTool.exe,如下圖所示:

(如有需要勾選Loader、Backup選項,對於軟件跨版本較大或修改過分區等情況可勾選Loader,如果你的MID沒有Recover功能,Backup選項無需勾選。題外話太多了,現轉移到正題。)

關機狀態下長按ESC鍵或菜單鍵(視機型而定,具體請自行查找相應信息)的同時連接PC,按提示安裝驅動(首次使用),驅動路徑指向.. /升級工具/rk28usb‐Driver,安裝好驅動後按“執行”即可完成升級。

注意:如果是Vista、Windows7系統需用管理員權限運行本工具,否則會提示“測試設備失敗”,造成升級失敗。

用戶升級:打開用戶升級工具RKAndroidDM.exe,如下圖所示:

點擊“ ”按鈕,選擇電腦中要升級的用戶升級文件update.img,然後按量產升級的方法連接你的MID,提示找到設備後按“升級”按鈕進行升級,完成後提示“升級成功”後拔掉USB線重新開機即可。

 

三、固件修改


前面講解了那麼多了,前戲應做的很足了,現在開始介紹各位同鞋最爲關心滴事、最最爲想做滴事情,我再次手把手滴開始教各位同鞋鳥,希望能和大家一起達到目的,衝向高潮。吼 !!!

1、固件精減、添加APK軟件


將system.img解包,解包後將../system/app目錄下的不需要的APK文件進行刪除、修改、替換,以製作適合自己的固件包,對於app目錄內不清楚用途的APK文件,請勿隨意刪除,以免引起不必要的問題。
注意:據說個別APK軟件需自帶的庫文件支持才能正常運行,此時可用WinRAR等壓縮軟件將APK文件打開(將.apk後綴改成.zip,然後用壓縮軟件打開即可),從裏邊找到後綴爲.so的文件,然後放入../system/lib文件夾下即可。 修改完成後,然後進行打包、升級、測試。

2、提取Root權限


將system.img解包,解包後將“取root權限文件”目錄中的Superuser.apk、su兩個文件分別放進下列目錄:

Superuser.apk ---> ../system/app

su ---> ../system/bin

打開一個shell,然後用chmod 6755修改文件的權限,如圖示。

Chmod 6755 /system/app/Superuser.apk

Chmod 6755 /system/bin/su

上述命令需注意大小寫,否則有可能會出錯。修改完成後打包即可。

我開始在驗證過程中,因使用了較老的root explorer版本根本不能進入資源管理器,於是更換了最新版V2.94,是能進資源管理器界面了,但是卻不能修改或刪除system下的文件,可能有人會懷疑這是否真正的取得了root權限?我可以很負責的告訴你,已經取得了root權限,因爲運行drocap2這類root權限的軟件是灰常正常滴。

嗯,其實這裏又涉及到一個專業知識了,請 坐好捏,哎,後面那位同鞋別看別人了,說的就是你。現在仔細聽我講解:

瑞芯微android系統固件的system分區採用的是cramfs文件系統。

cramfs文件系統是一個壓縮式的文件系統,它並不需要一次性地將文件系統中的所有內容都解壓縮到內存之中,而只是在系統需要訪問某個位置的數據的時侯,馬上計算出該數據在cramfs文件系統中的位置,將其實時地解壓縮到內存之中,然後通過對內存的訪問來獲取文件系統中需要讀取的數據。cramfs文件系統中的解壓縮以及解壓縮之後的內存中數據存放位置都是由cramfs文件系統文件系統本身進行維護的,用戶並不需要了解具體的實現過程,因此這種方式既方便,又節省了存儲空間。cramfs文件系統的數據都是預先經過處理、打包的,這種系統是一種只讀、不支持寫操作的文件系統,在刷到機器裏後,這個分區就是隻讀的,不能做任何更改。所以,刷機後是不能對這個系統進行修改的,只能在刷機前對system.img進行解包、修改,以達到我們的目的。

3、修改用戶分區大小


部分同鞋使用了MID一段時間後,就會爲用戶區空間太小裝不了幾個軟件而發愁,其實,你不用發愁,只要稍稍修改一下兩個文件就可以將分區加大。現在出產的MID一般都是配備2GB以上的內存,劃個幾百M至1G都不會太影響本機使用的,再者現在TF卡那麼便宜,都是標配2~4G以上的容量了。所以即便將用戶區再劃大些都不會有太大的影響。

(題外話:還有同鞋在尋找APP2SD的功能,個人建議不如修改一下這兩個文件,將用戶區劃大一些來得實在,一來在本機上讀取軟件穩定性會高些,二來不會因TF卡的問題導至軟件出問題嘛!)

言歸正傳:將用戶升級包update.img解包(如果已經是量產升級包,略過此解包操作),找到其中的HWDEF、parameter兩個文件並備份。再用UE(UltraEdit32,其實用記事本也可以,不過看起比較亂)修改兩個文件的分區偏移量和分區大小,是以16進製表示,前一個分區的偏移量和大小加起來就是後面一個分區的偏移量,我們需讓用戶分區增大,所以只修改用戶分區即可,只需修改userdata、user兩個分區的偏移量和大小即可。

A.修改HWDEF文件:


用UE打開HWDEF,找到如下部分的代碼(請注意紅色部分數據):

mtd_id=rk28xxnand

#Format: part_name offset:size

parameter 0x00000000:0x00001000:fh

misc 0x00001000:0x00001000:f

kernel 0x00002000:0x00003000:f

boot 0x00005000:0x00002000:f

recovery 0x00007000:0x00003000:f

system 0x0000A000:0x0001E000:f
backup 0x00028000:0x00026000:

cache 0x0004E000:0x0001E000:

userdata 0x0006C000:0x0001E000:

user 0x0008A000:0xFFFFFFFF:

END

簡單解釋一下,上面的userdata分區表示:偏移量爲0x0006C000,分區大小爲:0x0001E000,比如我們需將使用空間由原來的123M增大一倍到246M,即

0x0001E000+0x0001E000=0x0003C000,那麼,下一個分區user的偏移量就變成6C000+3C000=0x000A8000,修改後新的數據如下:

userdata 0x0006C000: 0x0003C000:

user 0x000A8000:0xFFFFFFFF:

修改後保存。對HWDEF的修改完成了。

B.修改parameter文件


再用UE打開parameter,找到最後一行,其部分代碼如下:

CMDLINE: noinitrd c,115200n8n androidboot.c init=/init

root=/dev/mtdblock2 mem=128M@0x60000000

mtdparts=rk28xxnand:0x00001000@0x00001000(misc),0x00003000@0x00002000(kernel),0x00002000@0x00005000(boot),0x00003000@0x00007000(recovery),0x0001E000@0x0000A000(system),0x00026000@0x00028000(backup),0x0001E000@0x0004E000(cache), 0x00040000 @0x0006C000(userdata),-@ 0x000AC000 (user)

此段代碼@前面表示分區大小,@後面表示偏移量。userdata前面的6個分區大小和偏移量都能和HWDEF文件中的一一對應起來,但userdata的分區大小明顯要大很多,暫不明白爲何要加大一些。查看過幾個不同機型的這些文件,大小也有差距,在22000-62000(16進制)之間;爲了不出問題,我們也依照那樣做吧,所以我們也在userdata空間的大小上面也加上22000至62000之間的一個數值吧。

所以,此處userdata的分區大小爲:3C000(擴容後的分區大小)

+22000=5E000,那下一個分區user的偏移量也變成了:5E000(新分區大小)+6C000(偏移)=CA000。修改過的數據如下:

0x0005E000@0x0006C000(userdata),-@0x000CA000(user)
修改後保存。對parameter的修改也完成了。用剛纔改好的兩個文件替換原先的兩個文件,然後重新打包、升級。

不同機型分區大小可能會有差別,所以附件中放有原始的和修改好的兩個文件,以供參考!此文件僅供參考,請勿直接替換,出了問題概不負責! 4,修改設置中“關於MID”中的機型型號

將system.img進行解包,解包後在system文件夾下找到

build.prop

將build.prop文件用UE打開,找到ro.product.model=sdkDemo一行,將其中的sdkDemo改成你想要顯示的文字,比如BM999,修改後保存,然後重新打包燒錄即可。

5、美化界面


這個又涉及到APK文件的修改了,這部分的教程就不作過多的介紹了,有需要的同鞋可以上網去Google下相關資料,大把的教程可供參考。

將system.img進行解包,解包後在../system/framework文件夾下找到

framework-res.apk,將.APK後綴改名爲.zip,然後將其中的assets、res兩個文件夾解壓出來開始我們的美化工作。要注意修改後的圖片分辨率大小和圖片格式要與原來保持一致,否則會出錯的哦。

A.界面美化


找到解壓後的下列兩個目錄,這兩個目錄存放所有界面的系統圖標,可對需要修改的界面小圖標進行美化:

../framework-res/res/drawable

../framework-res/res/drawable-land

B.修改開機LOGO(Android啓動時,出現閃動的ANDROID字樣的動畫圖片)

Android 的系統登錄動畫類似於Windows系統的滾動條,是由前景和背景兩張PNG圖片組成,這兩張圖片也是位於../system/framework/framework-res.apk文件當中。前景圖片(android-logo-mask.png)上的Android文字部分鏤空,背景圖片(android-logo-shine.png)則是簡單的紋理。系統登錄時,前景圖片在最上層顯示,程序代碼控制背景圖片連續滾動,透過前景圖片文字鏤空部 分滾動顯示背景紋理,從而實現動畫效果。以相同的原理修改或替換下面兩張圖片即可達到目的。

../framework-res/assets/images/android-logo-mask.png

../framework-res/assets/images/android-logo-shine.png

android-logo-mask.png :Android默認的前景圖片,文字部分鏤空,大小256×64

android-logo-shine.png :Android默認的背景圖片,有動感效果,大小512×64

美化完成後,將修改過的圖片替換掉APK文件中相應的文件,然後將APK文件中META-INF文件夾內的CERT.SF、CERT.RSA兩個文件刪除,然後用簽名工具重新簽名。再將簽名後的APK文件替換掉原先的文件,之後重新打包成system.img並用工具升級即可。

6、桌面美化


感覺桌面默認的公版壁紙、搜索條、快捷鍵等圖標太難看?沒問題,把它都換了吧。

將system.img進行解包,解包後在../system/app文件夾下找到Launcher.apk,將.APK後綴改名爲.zip,然後將其中的res文件夾解壓出來,將需要美化的圖片進行美化、替換,修改好後按照上面的方法將文件替換、簽名、打包再升級即可。

基礎篇教程完畢!敬請關注進階篇。因本人水平有限,教程中難免會有錯誤之處,歡迎指正!
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章