<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 189,comments - 115,trackbacks - 0

    android的各種*.img 文件

    關(guān)于android的各種disk images

    對(duì)android的各種disk images很好奇,一直想知道怎么去know和hack這些images,所以就有了這篇paper。

    1. 用file來(lái)查看文件類(lèi)型
      • 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
      • 可見(jiàn)有三種,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
      • 仍然沒(méi)有逃脫以上三種image類(lèi)型。
      • 用表格表示如下
        文件類(lèi)型 文件
        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
      • 可以使用這個(gè)命令來(lái)查看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
      • 可見(jiàn)ramdisk.img被解壓成ramdisk,
      • root@ubuntu8:/tmp/images# file ramdisk 
        ramdisk: ASCII cpio archive (SVR4 with no CRC)
      • 可見(jiàn)ramdisk是個(gè)cpio文件,需要用cpio來(lái)extract
      • root@ubuntu8:/tmp/images# mkdir ramdiskdir                                        創(chuàng)建ramdiskdir來(lái)裝ramdisk的內(nèi)容
        root@ubuntu8:/tmp/images# cd ramdiskdir/                                          cd到該目錄中
        root@ubuntu8:/tmp/images/ramdiskdir# cpio -idmv <../ramdisk                 使用cpio來(lái)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來(lái)看這些文件,發(fā)現(xiàn)init其實(shí)是個(gè)ARM arch的可執(zhí)行文件,這也和emulator中所說(shuō)的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文件共有這么幾個(gè),kernel-qemu,local.img和userdata-qemu.img。
      什么是data文件?如何使用這些文件?我們面臨著么兩個(gè)問(wèn)題
    4. VMS Alpha executable
      VMS Alpah executable共有這么幾個(gè)system.img,userdata.img,opl.img,userdata.img和cache.img。
      什么是VMS Alpha executable?如何使用這些文件?我們面臨這么兩個(gè)問(wèn)題。。。
    5. adb shell(1.5版本)
      使用這個(gè)命令據(jù)說(shuō)可以在emulator起來(lái)以后進(jìn)入到android os的shell中,我們來(lái)看看、
      • 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等,證明了我們確實(shí)是獲得了一個(gè)linux shell
      • 另外黃顏色顯示的文件和我們?cè)趓amdisk中看到的文件似乎大小一致,暗示它們是同一。
      • run mount to see有那些文件系統(tǒng)被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

      • 我們看見(jiàn)了system,opl,data,local和cache;恩,這些名字和那個(gè)表格里的data/VMS Alpha Executable似乎有些重合
        /system,/opl和/cache是VMS Alpha Executable的system.img,opl.img和cache.img轉(zhuǎn)換而來(lái)
        /local是data的local.img轉(zhuǎn)換而來(lái)
        /data嘛,就不太好判斷,不知道和userdata.img和userdata-qemu.img有什么關(guān)系沒(méi)?
        但至少我們知道可以查看/system來(lái)明白system image包含哪些東西了吧。。。,比如/system/framework就是android的framework啦
        也可以知道可以查看/cache來(lái)明白什么是cache image的內(nèi)涵了吧。。。
        對(duì)于local image同理可得。。。
      • 另外,adb shell提供的command有限,比如沒(méi)有zcat,cp,uname和busybox等,有沒(méi)有辦法能將這些命令加入進(jìn)去呢?
        到這里下載busybox,http://benno.id.au/blog/2007/11/14/android-busybox ,然后按照提示將busybox push至/data/busybox目錄,install后即可運(yùn)行所有的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, 這又是一種新的文件系統(tǒng),designed specially for NAND chips;YAFFS2是YAFFS的第二版,為了適應(yīng)新的NAND chips,這些新chip的page size有2048bytes,plus 64bytes的spare areas;老版本的NAND chips的page是512bytes,plus 16bytes spare area。
    8. 這些disk images從何而來(lái)?
      從這篇文章編譯Android1.5 里能否得到一些啟示?
      在編譯android1.5后,其實(shí)我們能得到3個(gè)img文件,似乎可以下斷言,這三個(gè)image是在編譯android的過(guò)程中得到的。有關(guān)生成他們的過(guò)程又是另外一個(gè)話題,估計(jì)得去讀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目錄是在編譯過(guò)程中產(chǎn)生的目錄,其余目錄則是source目錄

    posted on 2010-08-30 10:43 MEYE 閱讀(5274) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): Android3D

    FeedBack:
    # re: android的各種*.img 文件
    2011-12-17 15:04 | 路過(guò)
    中文里夾雜著英文,亂七八糟的。
    能弄懂這些,說(shuō)明你英文水平不低了,干嘛還要在文字里賣(mài)弄....

    怎么去know和hack這些images,所以就有了這篇paper

    ——雞皮疙瘩~~  回復(fù)  更多評(píng)論
      
    # re: android的各種*.img 文件
    2012-08-02 18:11 | 洗腳哥
    樓上這個(gè)哥們各種沒(méi)文化啊  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 污网站免费在线观看| 免费国产在线视频| 高清一区二区三区免费视频| 成人超污免费网站在线看| 亚洲精品天堂成人片?V在线播放| 亚洲最新视频在线观看| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 国产 亚洲 中文在线 字幕| 一级美国片免费看| 999国内精品永久免费观看| 亚洲精品国产va在线观看蜜芽| 亚洲第一页在线视频| 91嫩草国产在线观看免费| 亚洲国产V高清在线观看| 亚洲综合久久成人69| 丰满少妇作爱视频免费观看| 久久久久久国产a免费观看黄色大片| 亚洲无码视频在线| 亚洲乱码在线观看| 华人在线精品免费观看| 国产一区二区免费在线| 亚洲一线产区二线产区精华| 十八禁视频在线观看免费无码无遮挡骂过 | 亚洲色自偷自拍另类小说| 亚洲欧美国产国产一区二区三区| 日韩免费观看一区| 亚洲精品国产精品乱码不卡 | 中国一级全黄的免费观看| 在线观看人成网站深夜免费| 亚洲爆乳精品无码一区二区三区| 免费精品国自产拍在线播放| 女性自慰aⅴ片高清免费| 中文字幕亚洲综合精品一区| 国产无遮挡色视频免费观看性色 | 亚洲精品一卡2卡3卡三卡四卡| 国产精品免费看久久久香蕉| 国内自产拍自a免费毛片| 99久久精品国产亚洲| 成人免费一区二区三区 | 亚洲真人无码永久在线| 真人无码作爱免费视频|