关于android的各种disk images
对android的各种disk images很好奇,一直想知道怎么去know和hack这些images,所以就有了这篇paper。
- 用file来查看文件类型
- chenjian@ubuntu8:/tmp/images$ file *
kernel-qemu: data
local.img: data
ramdisk.img: gzip compressed data, from Unix, last modified: Thu Oct 22 16:30:38 2009
system.img: VMS Alpha executable
userdata.img: VMS Alpha executable
opl.img: VMS Alpha executable
- 可见有三种,data, gzip和VMS Alpha executable;
- 再看从avd目录取得的image文件
- chenjian@ubuntu8:/tmp/images/HVGA.avd$ file *
cache.img: VMS Alpha executable
userdata.img: VMS Alpha executable
userdata-qemu.img: data
- 仍然没有逃脱以上三种image类型。
- 用表格表示如下
文件类型 |
文件 |
data |
kernel-qemu local.img
userdata-qemu.img |
gzip |
ramdisk.img |
VMS Alpha executable |
system.img
userdata.img(images目录) opl.img
userdata.img(avd目录) cache.img
|
- ramdisk.img
- 可以使用这个命令来查看ramdisk.img
- root@ubuntu8:/tmp/images# gzip -d -S .img ramdisk.img
root@ubuntu8:/tmp/images# ls -lrt ramdisk
-rw-r--r-- 1 root root 260608 Oct 22 01:34 ramdisk
- 可见ramdisk.img被解压成ramdisk,
- root@ubuntu8:/tmp/images# file ramdisk
ramdisk: ASCII cpio archive (SVR4 with no CRC)
- 可见ramdisk是个cpio文件,需要用cpio来extract
- root@ubuntu8:/tmp/images# mkdir ramdiskdir创建ramdiskdir来装ramdisk的内容
root@ubuntu8:/tmp/images# cd ramdiskdir/cd到该目录中
root@ubuntu8:/tmp/images/ramdiskdir# cpio -idmv <../ramdisk使用cpio来extractramdisk文件
data
default.prop
dev
init
init.goldfish.rc
init.rc
proc
sbin
sbin/adbd
sys
system
509 blocks
root@ubuntu8:/tmp/images/ramdiskdir# ls这就是被打包在ramdisk中的文件
data default.prop dev init init.goldfish.rc init.rc proc sbin sys system
- 使用find和file来看这些文件,发现init其实是个ARM arch的可执行文件,这也和emulator中所说的linux是ARM arch相吻合
root@ubuntu8:/tmp/images/ramdiskdir# find . -type f|file -f -
./default.prop: ASCII text
./init.rc: ASCII English text
./init.goldfish.rc: ASCII English text
./init: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped
./sbin/adbd: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped
- 查看某些文件的md5
root@ubuntu8:/tmp/images/ramdir# find . -name "init*"|xargs md5sum
c3cff931e494bb4872f0ebefe1dad548 ./init.rc
90dd60a3458cce84901d12b362880339 ./init.goldfish.rc
7a950533c62fe91300a5b31b12a38084 ./init
- ls –lrt 这些文件
root@ubuntu8:/tmp/images/ramdir# find . |grep init|xargs ls -lrt
-rwxr-x--- 1 root root 11875 Jan 1 1970 ./init.rc
-rwxr-x--- 1 root root 2138 Jan 1 1970 ./init.goldfish.rc
-rwxr-x--- 1 root root 127548 Jan 1 1970 ./init
- data
data文件共有这么几个,kernel-qemu,local.img和userdata-qemu.img。
什么是data文件?如何使用这些文件?我们面临着么两个问题
- VMS Alpha executable
VMS Alpah executable共有这么几个system.img,userdata.img,opl.img,userdata.img和cache.img。
什么是VMS Alpha executable?如何使用这些文件?我们面临这么两个问题。。。
- adb shell(1.5版本)
使用这个命令据说可以在emulator起来以后进入到android os的shell中,我们来看看、
- D:\Program Files\OPhoneSDK_1.5.beta\tools>adb shell
# pwd
pwd
/
- # ls -l
ls -l
lrwxrwxrwx root root 2010-01-31 15:03 preload -> /system/preload
drwxr-xr-x root root 2010-01-31 15:03 Linux
lrwxrwxrwx root root 2010-01-31 15:03 bin -> /opl/telephony/bin
lrwxrwxrwx root root 2010-01-31 15:03 usr -> /opl/telephony/usr
lrwxrwxrwx root root 2010-01-31 15:03 lib -> /opl/telephony/lib
drwxrwxrwt root root 2010-01-31 15:05 tmp
drwxrwxrwt root root 2010-01-31 15:05 sqlite_stmt_journals
drwxrwx--- system cache 2009-12-20 10:11 cache
drwxr-xr-x system system 2009-10-10 13:11 opl
drwxrwxrwx system system 2009-10-24 01:48 local
d--------- system system 2010-01-31 15:03 sdcard
drwxr-xr-x root root 2010-01-31 15:03 d
lrwxrwxrwx root root 2010-01-31 15:03 etc -> /system/etc
drwxr-xr-x root root 2009-10-22 16:20 system
drwxr-xr-x root root 1970-01-01 08:00 sys
drwxr-x--- root root 1970-01-01 08:00 sbin
dr-xr-xr-x root root 1970-01-01 08:00 proc
-rwxr-x--- root root 11875 1970-01-01 08:00 init.rc
-rwxr-x--- root root 2138 1970-01-01 08:00 init.goldfish.rc
-rwxr-x--- root root 127548 1970-01-01 08:00 init
-rw-r--r-- root root 118 1970-01-01 08:00 default.prop
drwxrwx--x system system 2009-12-20 10:11 data
drwx------ root root 1970-01-01 08:00 root
drwxr-xr-x root root 2010-01-31 15:04 dev
- 果然,可以run一些linux下的基本命令,如ls,pwd等,证明了我们确实是获得了一个linux shell
- 另外黄颜色显示的文件和我们在ramdisk中看到的文件似乎大小一致,暗示它们是同一。
- run mount to see有那些文件系统被mount了
# mount
mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
tmpfs /tmp tmpfs rw 0 0
/dev/block/mtdblock0/system yaffs2rw 0 0
/dev/block/mtdblock4/opl yaffs2rw 0 0
/dev/block/mtdblock1/data yaffs2rw,nosuid,nodev 0 0
/dev/block/mtdblock3/local yaffs2rw,nosuid,nodev 0 0
/dev/block/mtdblock2/cache yaffs2rw,nosuid,nodev 0 0
- 我们看见了system,opl,data,local和cache;恩,这些名字和那个表格里的data/VMS Alpha Executable似乎有些重合
/system,/opl和/cache是VMS Alpha Executable的system.img,opl.img和cache.img转换而来
/local是data的local.img转换而来
/data嘛,就不太好判断,不知道和userdata.img和userdata-qemu.img有什么关系没?
但至少我们知道可以查看/system来明白system image包含哪些东西了吧。。。,比如/system/framework就是android的framework啦
也可以知道可以查看/cache来明白什么是cache image的内涵了吧。。。
对于local image同理可得。。。
- 另外,adb shell提供的command有限,比如没有zcat,cp,uname和busybox等,有没有办法能将这些命令加入进去呢?
到这里下载busybox,http://benno.id.au/blog/2007/11/14/android-busybox,然后按照提示将busybox push至/data/busybox目录,install后即可运行所有的busybox
applet。比如:
# /data/busybox/zcat /proc/config.gz|/data/busybox/more
/data/busybox/zcat /proc/config.gz|/data/busybox/more
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.25
# Mon Nov 10 05:02:15 2008
所以我们就能知道1.5的Android用的linux kernel是2.6.25版本的。。。
- kernel在哪里?
- 什么是yaffs2?http://en.wikipedia.org/wiki/YAFFS2
ok, 这又是一种新的文件系统,designed specially for NAND chips;YAFFS2是YAFFS的第二版,为了适应新的NAND chips,这些新chip的page size有2048bytes,plus 64bytes的spare areas;老版本的NAND chips的page是512bytes,plus 16bytes spare area。
- 这些disk images从何而来?
从这篇文章编译Android1.5里能否得到一些启示?
在编译android1.5后,其实我们能得到3个img文件,似乎可以下断言,这三个image是在编译android的过程中得到的。有关生成他们的过程又是另外一个话题,估计得去读makefile了。
root@ubuntu8:/ophone/android-1.5# find . -name *.img
./out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
./out/target/product/generic/userdata.img
./out/target/product/generic/system.img
./out/target/product/generic/ramdisk.img
BTW, out目录是在编译过程中产生的目录,其余目录则是source目录
分享到:
相关推荐
最后一步:因为system.img中的apk是优化过的,apk主目录下是没有classes.dex文件的,而是一个被优化过的odex文件,用于优化启动速度。 因此需要将修改后的apk包再用dexopt-wrapper优化apk包后生成出odex文件,...
Android_boot_image_editor,用于解析和打包android boot.img/vbmeta.img的工具,支持android q预览.zip
安卓系统boot.img和recovery.img及system.img文件解包打包工具,Windows下使用,适用于联发科及高通芯片
把unyaffs与system.img放到同一目录,进入命令模式,运行:unyaffs system.img;windows上的android img解包工具,用于解system.img等文件,不包含打包功能。
教你如何解压Android系统文件中的.img文件。
从 Super.img 文件分区中删除 资源分区的解包打包:resource.img SOC Amlogic固件、瑞芯微、全志拆包打包 拆包和组装服务包:* .zip (Update.zip) 反编译和编译应用程序 (* .apk) 将程序文件夹放在任何位置,靠近...
Android boot.img解包/打包工具集,具体的使用方式可以参考README。
用于Android打包boot.img文件,主要是针对ramdisk
详细介绍如何解包/编辑/打包android系统的boot.img文件
解开后,会有四个文件,boot.img, recovery.img, system.img, userdata.img 这些都是刷机时可能需要的。 --unpack-bootimg [文件] [文件]为空时,默认使用boot.img 解开后,会有两个文件,kernel和ramdisk.gz 同时...
安卓模拟器的sdcard.img文件打开修改工具,可以很方便的给安卓模拟机的sd-card内存卡添加文件,直接可以在安卓模拟机的内存卡里打开添加的文件。同样可以打开其他的img文件
windows 下解压boot.img工具 使用方法 1、将boot.img拷贝到工作目录 2、运行bootimg.exe C:\bootimgtools>bootimg.exe --unpack-bootimg
android镜像system.new.dat解包解压缩sdat2img。 使用说明:需安装python环境,将system.new.dat,system.transfer.list和解压文件放在同一目录下,linux系统下,直接执行.py文件;windows下,直接双击执行.bat文件
小米手机系统boot.img提取工具,能一键提取系统中的boot.img与其余镜像包 使用方法,将payload.bin放置payload_input文件夹中,双击payload_dumper.exe即可
android 查看,编辑system.img文件。
Android10-system.img-unpack EMUI10 MIUI12 Flyme8 firmware unpack. Android system.img unpack repack on Windows10. Android 8以上 ROM解包工具 文件说明: 1.brotli:解压工具,用于将「system.new.dat.br」...
Android system.img unpack repack on Windows10. Android 8以上 ROM解包工具 文件说明: 1.brotli:解压工具,用于将「system.new.dat.br」文件解压为「system.new.dat」 2.sdat2img:格式转换工具,用于将「...
simg2img 可以将android编译生成的system.img转换成raw img文件,查看android rom包的时候,不需要先刷机再去手机里看相应内容,直接就可以看rom包内文件。
目前越来越多的Android手机放弃了nand, 更多采用了emmc为内部存储设备。...以emmc为存储设备的android手机,其文件系统(/system,/data两个分区)一般采用ext4格式。 下面讲述如何解压和生成 system.img。
需要解压安卓备份的img文件的来拿把,在Windows中查看img,支持XP,VISTA,WIN7,WIN8,更高.. Android安卓img镜像文件解压,安卓备份文件解压,安卓备份的img文件解压缩 很方便