zoukankan      html  css  js  c++  java
  • [linux] 对一个虚拟机的研究

    今天拿到了一个vmware的虚拟机硬盘镜像,是其他公司的演示产品。

    启动之后是带着ubuntu字样的grub。进入系统之后也不是shell,而是一个定制的命令行。所以如果想了解细节的话,只能单独挂硬盘了。

    首先现在同事的vmware虚拟机里用CentOS的光盘挂载了一下,简单的看了看,用起来不太方便,遂准备把整个虚拟机镜像拿到T7来处理。

    文件名:wobeidalemasaike.ova 共15GB。

    一:ova 就是 tar格式的。先解压

    /home/tong/Temp [tong@T7] [11:02]
    > tar xvf wobeidalemasaike.ova 
    
    /home/tong/Temp [tong@T7] [11:03]
    > ll
    total 0
    -rw-r--r-- 1 tong tong 15G Apr 13 11:03 wobeidalemasaike-disk1.vmdk
    -rw-r--r-- 1 tong tong 135 Apr 13 11:03 wobeidalemasaike.mf
    -rw-r--r-- 1 tong tong 15G Apr 13 11:02 wobeidalemasaike.ova
    -rw-r--r-- 1 tong tong 10K Apr 13 11:03 wobeidalemasaike.ovf

    二:转换成qcow2格式。这个过程我用了4个小时,并且硬盘IO始终100%,电脑几乎动不了,而无法进行其他工作。。。

    /home/tong/Temp [tong@T7] [11:03]
    > qemu-img convert -f vmdk -O qcow2 wobeidalemasaike-disk1.vmdk wobeidalemasaike-disk1.qcow2
    
    /home/tong/Temp [tong@T7] [11:09]
    > ll |grep disk1
    -rw-r--r-- 1 tong tong 19G Apr 13 11:09 wobeidalemasaike-disk1.qcow2
    -rw-r--r-- 1 tong tong 15G Apr 13 11:03 wobeidalemasaike-disk1.vmdk

    另外,可以对比一下文件格式的大小。

    三:挂载。这个时候,就要吐草一下步骤二的,转格式真的很愚蠢,因为无论是使用qemu-nbd挂载还是直接启动,都可以直接使用vmdk格式,而不需要一定使用qcow2。

      简直是愚蠢透了,浪费了4,5个小时的时间。

      启动是这样的:

    /home/tong/Temp [tong@T7] [11:18]
    > qemu-system-x86_64 -hda wobeidalemasaike-disk1.vmdk

      挂载可以参考这个:

      http://www.cnblogs.com/hugetong/p/5903105.html

    四:挂好之后,预料之中,分区是加密的:

    /home/tong [tong@T7] [11:25]
    > blkid 
    /dev/nbd0p1: UUID="7e126a21-4f25-4c78-a39d-ad891d3809e1" TYPE="ext4" PARTLABEL="boot" PARTUUID="40670754-aee2-4f4a-a85c-48d4667f65f8"
    /dev/nbd0p2: UUID="115a6d13-b04e-4e56-9a52-05408487431f" TYPE="swap" PARTLABEL="swap" PARTUUID="b8fbd911-1b24-4be4-bdc9-3ffc884c6d0c"
    /dev/nbd0p3: UUID="7b98be95-b401-44d2-9889-1c266ab9d0c3" TYPE="crypto_LUKS" PARTLABEL="root" PARTUUID="cb8c0f4f-fd20-475b-993a-0b82f144caf2"
    /dev/nbd0p4: UUID="f9edf6ec-0cda-4b88-ab0c-d87627f24d9d" TYPE="crypto_LUKS" PARTLABEL="recovery" PARTUUID="24151f98-f6f0-4ee1-8c25-6f045835b3de"
    /dev/nbd0p5: UUID="d75fd96e-7ee9-44ba-94d6-b342dbafe72d" TYPE="ext4" PARTLABEL="data" PARTUUID="ae85b8cd-2816-4e03-87b1-83ef159ceeda"

      TODO: 加密分区。

    五: 分区在加密,也会被initrd解出来,所以initrd应该怎么处理呢?

    六: 内核呢?

    七:解压内核:(14441 = 14432 + 8 )就是1f8b08的地址偏移。

    [root@jay-rhel boot]# od -t x1 -A d vmlinuz-2.6.32-372.el6_jay.x86_64 | grep "1f 8b 08"
    0014432 48 8d 83 70 81 3d 00 ff e0 1f 8b 08 00 c4 01 9c
    [root@jay-rhel boot]# dd if=vmlinuz-2.6.32-372.el6_jay.x86_64 bs=1 skip=14441 | zcat > vmlinux-jay
     
    gzip: stdin: decompression OK, trailing garbage ignored
    [root@jay-rhel boot]# file vmlinux-jay
    vmlinux-jay: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped

    参考:http://smilejay.com/2013/06/extract-vmlinuz-and-initrd/

    八:解密了!@2017-04-19

      我费劲心机的研究,也没有把它解出来。测试部轻轻松的一个single就搞定了。。。。

    8.1 把boot分区挂载起来,把grub里面的password去掉。

    8.2 添加kernel选项:

    rw single init=/bin/bash

    8.3 给root一个密码。

    8.4 重启。

    8.5 用root登录。整个加密分区就都拿到了。

    九,进来了才知道,不过只是干了这么一件事而已。。。。。

    # cat /etc/passwd
    super:x:402:402:Super User:/home/super:/opt/radar-console/bin/clish-shell
    admin:x:403:403:Admin User:/home/admin:/opt/radar-console/bin/clish-shell

    十,加个什么破密,防君子啊。。。。

  • 相关阅读:
    HGE tutorial04
    HGE tutorial03
    HGE tutorial02 plus
    HGE tutorial02
    C 语言实例
    C 语言实例
    C 语言实例
    C 语言实例
    C 语言实例
    C 语言实例
  • 原文地址:https://www.cnblogs.com/hugetong/p/6703134.html
Copyright © 2011-2022 走看看