天天看點

Android鏡像檔案的拆解

前言:最近新入手了一台電信版的android手機,由于厭惡其中預裝的各種應用,也想按照自己的意願裁剪一下手機中的應用,是以對此進行了一些學習。我找到了一個htc的ruu包,從中解析到了system.img,發現這個system.img不是ext4格式的,不能簡單的在ubuntu上挂載,于是在網上找到了一篇說明android裡面各種分區拆解的文章。我做了翻譯和補充,供大家參考。

<a target="_blank"></a>

ramdisk(initrd)是一個小的分區鏡像,在引導時核心以隻讀方式挂載它。它隻保護/init和一些配置檔案。它用于初始化和挂載其它的檔案系統鏡像。ramdisk是一個标準的linux特性。

ramdisk.img被包含google android sdk中($sdk_root/tools/lib/images/ramdisk.img),也可以編譯生成($sdk_root/out/target/product/$produt_name/ramdisk.img)。這是一個gzip壓縮的cpio檔案。

要修改它,首先複制它到你的linux機器上,并用如下指令解開:

解開後,做一些你的修改和删除無用的檔案後,通過如下指令重新建立ramdisk.cpio:

然後可以重新改名并壓縮:

system.img是挂載到 / 下的鏡像,它包含了全部的系統可執行檔案。

userdata.img挂載到 /data 下的鏡像,它包含了應用及使用者相關的資料。

在實際的實體裝置中,他們通過ramdisk中的init.rc腳本挂載為檔案系統。它們可以有各種不同的格式,如 yaffs2、ext4或 ubi-fs。

它們通過android建構系統生成并刷入到實體裝置中。模拟器對它們的使用有所不同(見下文):

system.img 被複制到一個臨時檔案中,用于模拟器工作。是以你對模拟器中的根目錄做的任何改變都會在模拟器退出後丢失。

userdata.img 隻用于使用了 -wipe-data參數時。通常将~/.android/userdata-qemu.img(linux下)作為 /data 分區鏡像挂載,而使用 -wipe-data 時會複制userdata.img中的内容到userdata-qemu.img。

sdcard.img 用于使用了-sdcard參數時,挂載到/sdcard

cache.img 用于使用了-cache參數來指定/cache内容。如果未指定該參數,模拟器啟動時會建立一個空的臨時檔案挂載到/cache上。這個臨時檔案會在退出時自動清除。

模拟器不會修改system.img和userdata.img。

一個yaffs2檔案在linux被識别為“vms alpha executable”檔案。

然後使用這個指令來拆解 yaff2 鏡像檔案:

如果鏡像是ext4,那麼很簡單,直接挂載就可以讀取其中的内容了:

作為補充,這裡說一下如何拆解jffs2鏡像:

<b>原文釋出時間為:2012-06-14</b>

<b></b>

<b>本文來自雲栖社群合作夥伴“linux中國”</b>

繼續閱讀