zoukankan      html  css  js  c++  java
  • android的各种*.img 文件

    android的各种*.img 文件

     

    关于android的各种disk images

    对android的各种disk images很好奇,一直想知道怎么去know和hack这些images,所以就有了这篇paper。

    1. 用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
    2. 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

    3. data
      data文件共有这么几个,kernel-qemu,local.img和userdata-qemu.img。
      什么是data文件?如何使用这些文件?我们面临着么两个问题
    4. VMS Alpha executable
      VMS Alpah executable共有这么几个system.img,userdata.img,opl.img,userdata.img和cache.img。
      什么是VMS Alpha executable?如何使用这些文件?我们面临这么两个问题。。。
    5. 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 yaffs2 rw 0 0                                    
        /dev/block/mtdblock4 /opl yaffs2 rw 0 0
        /dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
        /dev/block/mtdblock3 /local yaffs2 rw,nosuid,nodev 0 0
        /dev/block/mtdblock2 /cache yaffs2 rw,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版本的。。。

    6. kernel在哪里?
    7. 什么是yaffs2? http://en.wikipedia.org/wiki/YAFFS2
      ok,这又是一种新的文件系统,designed specially for NANDchips;YAFFS2是YAFFS的第二版,为了适应新的NAND chips,这些新chip的pagesize有2048bytes,plus 64bytes的spare areas;老版本的NANDchips的page是512bytes,plus 16bytes spare area。
    8. 这些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目录

    转自: http://jinguo.javaeye.com/blog/696902

  • 相关阅读:
    11111 Generalized Matrioshkas
    Uva 442 Matrix Chain Multiplication
    Uva 10815 Andy's First Dictionary
    Uva 537 Artificial Intelligence?
    Uva 340 MasterMind Hints
    SCAU 9508 诸葛给我牌(水泥题)
    Uva 10420 List of Conquests(排序水题)
    Uva 409 Excuses, Excuses!
    10/26
    11/2
  • 原文地址:https://www.cnblogs.com/yuzaipiaofei/p/4124441.html
Copyright © 2011-2022 走看看