Android镜像文件的拆解
创始人
2024-03-01 10:57:55
0

前言:最近新入手了一台电信版的Android手机,由于厌恶其中预装的各种应用,也想按照自己的意愿裁剪一下手机中的应用,所以对此进行了一些学习。我找到了一个HTC的RUU包,从中解析到了system.img,发现这个system.img不是EXT4格式的,不能简单的在Ubuntu上挂载,于是在网上找到了一篇说明Android里面各种分区拆解的文章。我做了翻译和补充,供大家参考。

RAMDISK

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文件。

修改Android的RAMDISK镜像

要修改它,首先复制它到你的Linux机器上,并用如下命令解开:

user@computer:$ mv ramdisk.img ramdisk.cpio.gz
gzip -d ramdisk.cpio.gz
mkdir ramdisk
cd ramdisk  
cpio -i -F ../ramdisk.cpio

解开后,做一些你的修改和删除无用的文件后,通过如下命令重新创建ramdisk.cpio:

user@computer:$ cpio -i -t -F ../ramdisk.cpio | cpio -o -H newc -O ../ramdisk_new.cpio

然后可以重新改名并压缩:

user@computer:$ cd ..
gzip ramdisk_new.cpio
mv ramdisk_new.cpio.gz ramdisk.img

SYSTEM和DATA镜像

system.img是挂载到 / 下的镜像,它包含了全部的系统可执行文件。

userdata.img挂载到 /data 下的镜像,它包含了应用及用户相关的数据。

在实际的物理设备中,他们通过ramdisk中的init.rc脚本挂载为文件系统。它们可以有各种不同的格式,如 YAFFS2、EXT4或 UBI-FS。

它们通过Android构建系统生成并刷入到物理设备中。模拟器对它们的使用有所不同(见下文):

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。

拆解Android’s YAFFS2 镜像

一个YAFFS2文件在Linux被识别为“VMS Alpha executable”文件。

user@computer:$ file ${SDK_ROOT}}/out/target/product/imx51_ccwmx51js/system.img
./out/target/product/imx51_ccwmx51js/system.img: VMS Alpha executable

从Google代码站中下载 unyaffs

如果上面的可执行文件在你的系统不工作的话,你也可以下载 源代码 并重新编译它。

user@computer:$ gcc -o unyaffs unyaffs.c
sudo chmod +x /complete/directory/path/to/unyaffs

然后使用这个命令来拆解 YAFF2 镜像文件:

user@computer:$ mkdir image
cd image
unyaffs ../system.img

拆解EXT4镜像

如果镜像是EXT4,那么很简单,直接挂载就可以读取其中的内容了:

user@computer:$ mount -o loop -t ext4 system.img /media

拆解JFFS2镜像

作为补充,这里说一下如何拆解JFFS2镜像:

user@computer:$ modprobe mtdblock
modprobe jffs2
modprobe mtdram total_size=65536 erase_size=256
mknod /tmp/mtdblock0 b 31 0
dd if=/pathtoimage/rootfs.jffs2 of=/tmp/mtdblock0
mount -t jffs2 /tmp/mtdblock0 /mnt

原文链接:http://www.lindusembedded.com/blog/2012/02/23/androids-partition-images/

相关内容

整治违规吃喝,“口头通知”...
撰文丨于永杰 (图片来源:pixabay) 对于基层干部来说...
2025-06-20 11:42:25
阿里云CentOS镜像源配...
在开源世界的广袤版图中,CentOS以其卓越的稳定性与坚实的可靠性...
2025-06-17 06:11:09
在CentOS系统中为Do...
理解Docker存储的核心机制:驱动与分层管理 在CentOS系统...
2025-06-16 07:41:58
编写CentOS系统下的B...
面对重复繁琐的服务器操作,手动输入命令效率低下且易出错。为了解决这...
2025-06-15 08:43:24
下一个25年,AI可以为人...
2013年,电影《Her》上映时,观众们还会觉得与主角自然交谈、对...
2025-06-13 16:16:04
央视解读民生文件:养老金月...
【资料来源于中国政府网、国新办发布会、央视新闻1+1、界面新闻等】...
2025-06-12 17:43:58

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...