- 论坛徽章:
- 0
|
3.分析文件格式
使用vi 打开ext2.img文件如下图
设置16进制显示
在命令模式下输入
:%!xxd
4.现在我们磁盘结构开始查找数据,进行分析
根据前面的格式化可知,块大小为1024Byte=0x400,因为第一个块为启动块,所以越过第一个块即为第一个块组,我们查看0x400位置的数据
根据块组的格式,块组中第一个为超级块,大小总是1024Byte,我们只查看前面264Byte,(为什么?),我们对着超级块数据结构struct ext2_super_block {…}查看
第一个32为 8000 0000 即为0x80=128, s_inodes_count; /* Inodes count */
第二个32位 0004 0000 即为0x400=1024,s_blocks_count; /* Blocks count */
第三个32位 3300 0000 即为0x33=51,s_r_blocks_count; /* Reserved blocks count */
第四个32位 da03 0000 即为0x3da=986,s_free_blocks_count; /* Free blocks count */
……
不知你是否还记得格式化时数据
5.超级块后面是组描述,它紧跟超级块后面,数据如下
- struct ext2_group_desc
- {
- __le32 bg_block_bitmap; /* Blocks bitmap block */
- __le32 bg_inode_bitmap; /* Inodes bitmap block */
- __le32 bg_inode_table; /* Inodes table block */
- __le16 bg_free_blocks_count; /* Free blocks count */
- __le16 bg_free_inodes_count; /* Free inodes count */
- __le16 bg_used_dirs_count; /* Directories count */
- __le16 bg_pad;
- __le32 bg_reserved[3];
- };
复制代码 第一个32位 0600 0000 即为0x06=6
第二个 32位 0700 0000 即为0x07=7
第三个 32位 0800 0000 即为 0x08=8
第四个 16位 da03 即为0x3da=986
第五个 16位 7500 即为 0x75=117
…2
…4
……….
组描述后面是:块位图,节点位图,节点表,数据块。它们的起始块号都在组描述中指定
由上数据可知,块位图在第6块,节点位图在第7块,节点表在第8块,空闲的块数986
空闲节点117,目录个数为2个,
6.查看块位图
根据上述,块位图在第6块,地址=块大小*块数=1024*6=0x1800
数据如下:
7.查看节点位图
8.查看节点表
我们对着inode结构查看一下inode tables- struct ext2_inode {
- __le16 i_mode; /* File mode */
- __le16 i_uid; /* Low 16 bits of Owner Uid */
- __le32 i_size; /* Size in bytes */
- __le32 i_atime; /* Access time */
- __le32 i_ctime; /* Creation time */
- __le32 i_mtime; /* Modification time */
- __le32 i_dtime; /* Deletion Time */
- __le16 i_gid; /* Low 16 bits of Group Id */
- __le16 i_links_count; /* Links count */
- __le32 i_blocks; /* Blocks count */
- __le32 i_flags; /* File flags */
- __le32 ……..
- __le32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */ EXT2_N_BLOCKS=15
- __le32 i_generation; /* File version (for NFS) */
- __le32 i_file_acl; /* File ACL */
- __le32 i_dir_acl; /* Directory ACL */
- __le32 i_faddr; /* Fragment address */
- __le32 ……..
- __le32 ……..
- __le32 ……..
- };
复制代码 我们数数inode大小128字节,注意“__le32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */ EXT2_N_BLOCKS=15”
则一个inode为0x80
第二个inode其实地址为0x2080,第二个数据较为”丰富”,分析第二个Inode,重点看看
i_block[EXT2_N_BLOCKS]; i_block位置在偏移40Byte,即0x28;0x2080+0x28=0x20a8
可以看出该文件只有一个数据块,在第0x18块号即为24块处,查看24块内容 0x6000
分析数据可知此文件 为顶层文件夹.... |
|