UBIFS文件系统(一)
一、简介
UBIFS(Unsorted Block Image File System)无排序区块图像文件系统,用于裸的flash设备,作为jffs2的后继文件系统之一。UBIFS通过UBI子系统处理与MTD设备之间动作。UBIFS文件系统更适合NAND FLASH。
通常UBIFS文件系统的使用涉及到三个子系统:
- UBIFS文件系统
- 可以理解为用户层,工作于UBI之上。
- 比如我们设备中挂载可见的分区,可使用mount命令查看挂载情况。
- UBI
- 是MTD设备的高层次表示,一般用户层也可以在这里做开发定制,比如升级,通过ioctl控制MTD设备的读写。
- MTD子系统
- 提供nand flash底层访问接口。
这三个子系统的关系如下图所示:

二、准备工作
1、准备目录
这里我们主要是为了了解UBIFS文件系统的结构,首先我们来创建一个目录rootfs,里面包含001目录,002.txt文件内容为test002,002.link为001/002.txt的链接,还包含一个003目录,004.txt文件内容为test004,005.txt文件内容为test005,文件树结构如下所示:

2、UBIFS文件系统生成
使用命令mkfs.ubifs打包为一个UBIFS文件系统映像:
mkfs.ubifs -r rootfs -m 512 -e 128KiB -c 100 -o rootfs.ubifs
常用参数说明:
序号 | 参数 | 说明 |
1 | -r rootfs | 指定根文件系统目录树的路径为rootfs/ |
2 | -m 512 | Nand Flash的最小读写单元,一般为page size,这里设置为512字节 |
3 | -e 128KiB | 逻辑擦除块(LEB)的大小,这里设置为128KB |
4 | -c 100 | 逻辑擦除块(LEB)的个数,与分区大小有关,这里设置为100个 |
5 | -o rootfs.ubifs | 输出的根文件系统文件为rootfs.ubifs |
三、UBIFS文件系统结构分析
1、整体分析
通过本站的固件分析工具可以分析内容:

可以知晓rootfs.ubifs文件分为几大块:
序号 | 偏移 | 说明 |
1 | 0x00000-0x20000 | superblock node |
2 | 0x20000-0x40000 | master node |
3 | 0x40000-0x1A0000 | master node |
2、基础定义
根据源码,可以得到一些基础定义。
节点类型(node type):
序号 | 值 | 节点类型 |
1 | 0x00 | inode node |
2 | 0x01 | data node |
3 | 0x02 | directory entry node |
4 | 0x03 | extended attribute node |
5 | 0x04 | truncation node |
6 | 0x05 | padding node |
7 | 0x06 | superblock node |
8 | 0x07 | master node |
9 | 0x08 | LEB reference node |
10 | 0x09 | index node |
11 | 0x0A | commit start node |
12 | 0x0B | orphan node |
13 | 0x0C | count of supported node types |
压缩方式(default_compr):
序号 | 值 | 压缩方式 |
1 | 0x00 | 无 |
2 | 0x01 | LZO |
3 | 0x02 | ZLIB |
2、superblock node分析
使用hexdump查看生成的rootfs.ubifs文件的0-0x1FFFF字节内容:
00000000 31 18 10 06 2d d5 ad 8b 1b 00 00 00 00 00 00 00 |1...-...........|
00000010 00 10 00 00 06 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020 00 02 00 00 00 00 02 00 0d 00 00 00 64 00 00 00 |............d...|
00000030 00 00 16 00 00 00 00 00 04 00 00 00 02 00 00 00 |................|
00000040 01 00 00 00 01 00 00 00 08 00 00 00 00 01 00 00 |................|
00000050 04 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
00000060 00 00 00 00 00 00 00 00 00 ca 9a 3b 1d 06 68 06 |...........;..h.|
00000070 bd 98 44 84 a0 fc f5 b0 b3 43 0f 76 00 00 00 00 |..D......C.v....|
00000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00001000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00020000
通过分析源码(struct ubifs_sb_node),并结合文件,分析结构如下:
序号 | 偏移 | 说明 |
1 | 0x00-0x03 | UBIFS标志,值为0x06101831 |
2 | 0x04-0x07 | CRC,值为0x8BADD52D |
3 | 0x08-0x0F | sequence number,值为0x1B |
4 | 0x10-0x13 | 块长度,值为0x100 |
5 | 0x14 | node type,值为0x06,表示superblock node |
6 | 0x15 | node group type,值为0x00 |
7 | 0x16-0x17 | 填充值,值为0x0000,前0x18字节为ubifs_ch结构体 |
8 | 0x18-0x19 | 填充值,值为0x0000 |
9 | 0x1A | key的hash类型,值为0x00 |
10 | 0x1B | key的格式 |
11 | 0x1C-0x1F | flags |
12 | 0x20-0x23 | 最小I/O单元大小,值为0x100字节(512B) |
13 | 0x24-0x27 | 逻辑擦除块(LEB)的大小,值为0x20000字节(128KB) |
14 | 0x28-0x2B | 逻辑擦除块(LEB)的个数,值为0x0D个(13) |
15 | 0x2C-0x2F | 逻辑擦除块(LEB)的最大个数,值为0x64个(100) |
16 | 0x30-0x37 | buds最大数,值为0x1600000个 |
17 | 0x38-0x3B | 逻辑擦除块(LEB)的日志大小,值为0x04字节 |
18 | 0x3C-0x3F | 用于lprops table的逻辑擦除块(LEB)的个数,值为0x02 |
19 | 0x40-0x43 | 用于recording orphans的逻辑擦除块(LEB)的个数,值为0x01 |
20 | 0x44-0x47 | journal heads的个数,值为0x01 |
21 | 0x48-0x4B | tree fanout,值为0x08 |
22 | 0x4C-0x4F | 在LPT's save table的LEB的个数,值为0x100 |
23 | 0x50-0x53 | UBIFS格式化版本,值为0x04 |
24 | 0x54-0x55 | 默认压缩方式(default_compr),值为0x01,表示LZO压缩方式 |
25 | 0x56-0x57 | 填充值,值为0x0000 |
26 | 0x58-0x5B | 保留池 UID,值为0x00000000 |
27 | 0x5C-0x5F | 保留池 GID,值为0x00000000 |
28 | 0x60-0x67 | 保留池大小,值为0 |
29 | 0x68-0x6B | 时间粒度,值为0x3B9ACA00 (1,000,000,000)ns |
30 | 0x6C-0x7B | UUID,值为1D066806BD984484A0FCF5B0B3430F76 |
31 | 0x7C-0x7F | UBIFS R/O compatibility版本,值为0 |
32 | 0x80-0xFFF | 填充值,值为0 |
3、master node分析
使用hexdump查看生成的rootfs.ubifs文件的0x20000-0x3FFFF字节内容:
00020000 31 18 10 06 98 0d 17 eb 1c 00 00 00 00 00 00 00 |1...............|
00020010 00 02 00 00 07 00 00 00 46 00 00 00 00 00 00 00 |........F.......|
00020020 00 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 |................|
00020030 0c 00 00 00 80 01 00 00 44 00 00 00 0b 00 00 00 |........D.......|
00020040 0c 00 00 00 00 02 00 00 c8 01 00 00 00 00 00 00 |................|
00020050 00 f6 05 00 00 00 00 00 98 01 00 00 00 00 00 00 |................|
00020060 a0 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00020070 00 24 00 00 00 00 00 00 07 00 00 00 2a 00 00 00 |.$..........*...|
00020080 07 00 00 00 00 02 00 00 07 00 00 00 36 00 00 00 |............6...|
00020090 00 00 00 00 00 00 00 00 0a 00 00 00 01 00 00 00 |................|
000200a0 01 00 00 00 0d 00 00 00 00 00 00 00 00 00 00 00 |................|
000200b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00020200 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00040000
通过分析源码(struct ubifs_mst_node),并结合文件,分析结构如下:
序号 | 偏移 | 说明 |
1 | 0x20000-0x20003 | UBIFS标志,值为0x06101831 |
2 | 0x20004-0x20007 | CRC,值为0xEB170D98 |
3 | 0x20008-0x2000F | sequence number,值为0x1C |
4 | 0x20010-0x20013 | 块长度,值为0x200 |
5 | 0x20014 | node type,值为0x06,表示master node |
6 | 0x20015 | node group type,值为0x00 |
7 | 0x20016-0x20017 | 填充值,值为0x0000,前0x18字节为ubifs_ch结构体 |
8 | 0x20018-0x2001F | 索引中的最高索引节点号(highest_inum),值为0x46 |
9 | 0x20020-0x20027 | commit number,值为0 |
10 | 0x20028-0x2002B | various flags,值为0x02 |
11 | 0x2002C-0x2002F | start of the log,值为0x03 |
12 | 0x20030-0x20033 | 根索引节点的LEB编号(root_lnum),值为0x0C |
13 | 0x20034-0x20037 | 根索引节点的LEB编号的偏移(root_offs),值为0x180 |
14 | 0x20038-0x2003B | 根索引节点长度(root_len),值为0x44 |
15 | 0x2003C-0x2003F | 用于垃圾收集的保留LEB(gc_lnum),值为0x0B |
16 | 0x20040-0x20043 | 索引头的LEB编号(ihead_lnum),值为0x0C |
17 | 0x20044-0x20047 | 索引头偏移(ihead_offs),值为0x200 |
18 | 0x20048-0x2004F | 闪存上索引的大小(index_size),值为0x1C8 |
19 | 0x20050-0x20057 | 总可用空间(total_free),值为0x5F600字节 |
20 | 0x20058-0x2005F | 总垃圾空间(total_dirty),值为0x198字节 |
21 | 0x20060-0x20067 | 总已用空间(total_used),值为0x6A0字节 |
22 | 0x20068-0x2006F | 总无效空间(total_dead),值为0字节 |
23 | 0x20070-0x20077 | 总暗空间(total_dark),值为0x2400字节 |
24 | 0x20078-0x2007B | LPT root nnode的LEB个数(total_dark),值为0x07字节 |
25 | 0x2007C-0x2007F | LPT root nnode的的偏移,值为0x2A |
26 | 0x20080-0x20083 | LPT头的LEB编号,值为0x07 |
27 | 0x20084-0x20087 | LPT头的LEB编号的偏移,值为0x200 |
28 | 0x20088-0x2008B | LPT的lprops表的LEB编号(ltab_lnum),值为0x07 |
29 | 0x2008C-0x2008F | LPT的lprops表的LEB编号的偏移(ltab_offs),值为0x36 |
30 | 0x20090-0x20093 | LPT的save表的LEB编号(lsave_lnum),值为0 |
31 | 0x20094-0x20097 | LPT的save表的LEB编号的偏移(lsave_offs),值为0 |
32 | 0x20098-0x2009B | 上次LPT扫描的LEB编号(lscan_lnum),值为0x0A |
33 | 0x2009C-0x2009F | 空逻辑擦除块数(empty_lebs),值为0x01 |
34 | 0x20100-0x20103 | 索引逻辑块数(idx_lebs),值为0x01 |
35 | 0x200A4-0x200A7 | 文件系统使用的LEB总数(leb_cnt),值为0x0D |
3、其他node分析
使用hexdump查看生成的rootfs.ubifs文件的0x140000-0x1406BF字节内容:
00140000 31 18 10 06 42 0a 25 cb 03 00 00 00 00 00 00 00 |1...B.%.........|
00140010 ab 00 00 00 00 00 00 00 41 00 00 00 00 00 00 00 |........A.......|
00140020 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 |................|
00140030 0b 00 00 00 00 00 00 00 49 11 f7 62 00 00 00 00 |........I..b....|
00140040 47 11 f7 62 00 00 00 00 47 11 f7 62 00 00 00 00 |G..b....G..b....|
00140050 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 |................|
00140060 e9 03 00 00 e9 03 00 00 ff a1 00 00 01 00 00 00 |................|
00140070 0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00140080 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
00140090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
001400a0 30 30 31 2f 30 30 32 2e 74 78 74 ff ff ff ff ff |001/002.txt.....|
001400b0 31 18 10 06 e7 03 5a 56 04 00 00 00 00 00 00 00 |1.....ZV........|
001400c0 41 00 00 00 02 00 00 00 01 00 00 00 2d 68 f9 57 |A...........-h.W|
001400d0 00 00 00 00 00 00 00 00 41 00 00 00 00 00 00 00 |........A.......|
001400e0 00 02 08 00 00 00 00 00 30 30 32 2e 6c 69 6e 6b |........002.link|
001400f0 00 ff ff ff ff ff ff ff 31 18 10 06 78 e5 c1 c1 |........1...x...|
00140100 06 00 00 00 00 00 00 00 38 00 00 00 01 00 00 00 |........8.......|
00140110 42 00 00 00 00 00 00 20 00 00 00 00 00 00 00 00 |B...... ........|
00140120 08 00 00 00 00 00 00 00 74 65 73 74 30 30 35 0a |........test005.|
00140130 31 18 10 06 59 8a c3 d3 07 00 00 00 00 00 00 00 |1...Y...........|
00140140 a0 00 00 00 00 00 00 00 42 00 00 00 00 00 00 00 |........B.......|
00140150 00 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 |................|
00140160 08 00 00 00 00 00 00 00 c4 13 f7 62 00 00 00 00 |...........b....|
00140170 91 11 f7 62 00 00 00 00 91 11 f7 62 00 00 00 00 |...b.......b....|
00140180 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 |................|
00140190 e9 03 00 00 e9 03 00 00 b4 81 00 00 01 00 00 00 |................|
001401a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
001401b0 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
001401c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
001401d0 31 18 10 06 ee c5 ac 35 08 00 00 00 00 00 00 00 |1......5........|
001401e0 40 00 00 00 02 00 00 00 01 00 00 00 c8 c6 ec 59 |@..............Y|
001401f0 00 00 00 00 00 00 00 00 42 00 00 00 00 00 00 00 |........B.......|
00140200 00 00 07 00 00 00 00 00 30 30 35 2e 74 78 74 00 |........005.txt.|
00140210 31 18 10 06 0b fc 1d 6c 0b 00 00 00 00 00 00 00 |1......l........|
00140220 38 00 00 00 01 00 00 00 44 00 00 00 00 00 00 20 |8.......D...... |
00140230 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................|
00140240 74 65 73 74 30 30 34 0a 31 18 10 06 c1 99 82 e2 |test004.1.......|
00140250 0c 00 00 00 00 00 00 00 a0 00 00 00 00 00 00 00 |................|
00140260 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |D...............|
00140270 0a 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................|
00140280 c4 13 f7 62 00 00 00 00 7a 11 f7 62 00 00 00 00 |...b....z..b....|
00140290 7a 11 f7 62 00 00 00 00 00 00 00 00 00 00 00 00 |z..b............|
001402a0 00 00 00 00 01 00 00 00 e9 03 00 00 e9 03 00 00 |................|
001402b0 b4 81 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
001402c0 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 |................|
001402d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
001402e0 00 00 00 00 00 00 00 00 31 18 10 06 b1 e2 f2 a9 |........1.......|
001402f0 0d 00 00 00 00 00 00 00 40 00 00 00 02 00 00 00 |........@.......|
00140300 43 00 00 00 18 75 c5 59 00 00 00 00 00 00 00 00 |C....u.Y........|
00140310 44 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 |D...............|
00140320 30 30 34 2e 74 78 74 00 31 18 10 06 14 7e 41 15 |004.txt.1....~A.|
00140330 0e 00 00 00 00 00 00 00 a0 00 00 00 00 00 00 00 |................|
00140340 43 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |C...............|
00140350 09 00 00 00 00 00 00 00 e0 00 00 00 00 00 00 00 |................|
00140360 7b 11 f7 62 00 00 00 00 7a 11 f7 62 00 00 00 00 |{..b....z..b....|
00140370 7a 11 f7 62 00 00 00 00 00 00 00 00 00 00 00 00 |z..b............|
00140380 00 00 00 00 02 00 00 00 e9 03 00 00 e9 03 00 00 |................|
00140390 fd 41 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |.A..............|
001403a0 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 |................|
001403b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
001403c0 00 00 00 00 00 00 00 00 31 18 10 06 a1 c4 96 26 |........1......&|
001403d0 0f 00 00 00 00 00 00 00 3c 00 00 00 02 00 00 00 |........<.......|
001403e0 01 00 00 00 35 38 11 40 00 00 00 00 00 00 00 00 |....58.@........|
001403f0 43 00 00 00 00 00 00 00 00 01 03 00 00 00 00 00 |C...............|
00140400 30 30 33 00 ff ff ff ff 31 18 10 06 a7 1b 31 64 |003.....1.....1d|
00140410 12 00 00 00 00 00 00 00 38 00 00 00 01 00 00 00 |........8.......|
00140420 46 00 00 00 00 00 00 20 00 00 00 00 00 00 00 00 |F...... ........|
00140430 08 00 00 00 00 00 00 00 74 65 73 74 30 30 32 0a |........test002.|
00140440 31 18 10 06 47 85 6b 9b 13 00 00 00 00 00 00 00 |1...G.k.........|
00140450 a0 00 00 00 00 00 00 00 46 00 00 00 00 00 00 00 |........F.......|
00140460 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 |................|
00140470 08 00 00 00 00 00 00 00 c4 13 f7 62 00 00 00 00 |...........b....|
00140480 3c 11 f7 62 00 00 00 00 22 11 f7 62 00 00 00 00 |<..b...."..b....|
00140490 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 |................|
001404a0 e9 03 00 00 e9 03 00 00 b4 81 00 00 01 00 00 00 |................|
001404b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
001404c0 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
001404d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
001404e0 31 18 10 06 b9 32 7a 8e 14 00 00 00 00 00 00 00 |1....2z.........|
001404f0 40 00 00 00 02 00 00 00 45 00 00 00 b8 d1 76 59 |@.......E.....vY|
00140500 00 00 00 00 00 00 00 00 46 00 00 00 00 00 00 00 |........F.......|
00140510 00 00 07 00 00 00 00 00 30 30 32 2e 74 78 74 00 |........002.txt.|
00140520 31 18 10 06 41 f8 91 2f 15 00 00 00 00 00 00 00 |1...A../........|
00140530 a0 00 00 00 00 00 00 00 45 00 00 00 00 00 00 00 |........E.......|
00140540 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00 |................|
00140550 e0 00 00 00 00 00 00 00 42 11 f7 62 00 00 00 00 |........B..b....|
00140560 3c 11 f7 62 00 00 00 00 3c 11 f7 62 00 00 00 00 |<..b....<..b....|
00140570 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 |................|
00140580 e9 03 00 00 e9 03 00 00 fd 41 00 00 01 00 00 00 |.........A......|
00140590 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
001405a0 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
001405b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
001405c0 31 18 10 06 d4 d1 c3 df 16 00 00 00 00 00 00 00 |1...............|
001405d0 3c 00 00 00 02 00 00 00 01 00 00 00 d5 36 11 40 |<............6.@|
001405e0 00 00 00 00 00 00 00 00 45 00 00 00 00 00 00 00 |........E.......|
001405f0 00 01 03 00 00 00 00 00 30 30 31 00 ff ff ff ff |........001.....|
00140600 31 18 10 06 92 4a 20 c8 17 00 00 00 00 00 00 00 |1....J .........|
00140610 a0 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................|
00140620 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................|
00140630 a8 01 00 00 00 00 00 00 91 11 f7 62 00 00 00 00 |...........b....|
00140640 91 11 f7 62 00 00 00 00 91 11 f7 62 00 00 00 00 |...b.......b....|
00140650 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 |................|
00140660 e9 03 00 00 e9 03 00 00 fd 41 00 00 01 00 00 00 |.........A......|
00140670 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00140680 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
00140690 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
001406a0 31 18 10 06 36 6f 6c a4 00 00 00 00 00 00 00 00 |1...6ol.........|
001406b0 1c 00 00 00 05 00 00 00 44 01 00 00 |........D...|
001406bc
这里面包含文件名称、文件内容,包含多组node,这里大概分析一次:
序号 | 偏移 | node类型 | 备注 |
1 | 0x00140000-0x001400AF | inode node (0) | 文件路径 001/002.txt |
2 | 0x001400B0-0x001400F7 | directory entry node(2) | 链接路径 002.link |
3 | 0x001400F8-0x0014012F | data node(1) | 文件内容 test005 |
4 | 0x00140130-0x001401CF | inode node(0) | |
5 | 0x001401E0-0x0014020F | directory entry node(2) | 文件路径 005.txt |
6 | 0x00140210-0x00140247 | data node(1) | 文件内容 test004 |
7 | 0x00140248-0x001402e7 | inode node(0) | |
8 | 0x001402e8-0x00140327 | directory entry node(2) | 文件路径 004.txt |
9 | 0x00140328-0x001403C7 | inode node(0) | |
10 | 0x001403C8-0x00140407 | directory entry node(2) | 目录路径 003 |
11 | 0x00140408-0x0014043F | data node(1) | 文件内容 test002 |
12 | 0x00140440-0x001404DF | inode node(0) | |
13 | 0x001404E0-0x0014051F | directory entry node(2) | 文件路径 002.txt |
14 | 0x00140520-0x001405BF | inode node(0) | |
15 | 0x001405C0-0x001405FF | directory entry node(2) | 目录路径 001 |
16 | 0x00140600-0x0014069F | inode node(0) | |
17 | 0x001406A0-0x001406BB | padding node(5) | 填充 |
下面,我们挑选比较多的几个node类型进行分析。
(1)inode node分析
提取0x00140000-0x001400AF的inode node数据
00000000 31 18 10 06 42 0a 25 cb 03 00 00 00 00 00 00 00 |1...B.%.........|
00000010 ab 00 00 00 00 00 00 00 41 00 00 00 00 00 00 00 |........A.......|
00000020 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 |................|
00000030 0b 00 00 00 00 00 00 00 49 11 f7 62 00 00 00 00 |........I..b....|
00000040 47 11 f7 62 00 00 00 00 47 11 f7 62 00 00 00 00 |G..b....G..b....|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 |................|
00000060 e9 03 00 00 e9 03 00 00 ff a1 00 00 01 00 00 00 |................|
00000070 0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000080 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
00000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000a0 30 30 31 2f 30 30 32 2e 74 78 74 ff ff ff ff ff |001/002.txt.....|
通过分析源码(struct ubifs_ino_node),并结合文件,分析结构如下:
序号 | 偏移 | 说明 |
1 | 0x00-0x03 | UBIFS标志,值为0x06101831 |
2 | 0x04-0x07 | CRC,值为0xCB250A42 |
3 | 0x08-0x0F | sequence number,值为0x03 |
4 | 0x10-0x13 | 块长度,值为0xAB |
5 | 0x14 | node type,值为0x00,表示inode node |
6 | 0x15 | node group type,值为0x00 |
7 | 0x16-0x17 | 填充值,值为0x0000,前0x18字节为ubifs_ch结构体 |
8 | 0x18-0x27 | node key,值为0x41 |
9 | 0x28-0x2F | sequence number,值为0x02 |
10 | 0x30-0x37 | inode size,值为0x0B |
11 | 0x38-0x3F | access time,值为0x62F71149 |
12 | 0x40-0x47 | creation time,值为0x62F71147 |
13 | 0x48-0x4F | modification time,值为0x62F71147 |
14 | 0x50-0x53 | access time(ns),值为0 |
15 | 0x54-0x57 | creation time(ns),值为0 |
16 | 0x58-0x5B | modification time(ns),值为0 |
17 | 0x5C-0x5F | 硬链接个数,值为1 |
18 | 0x60-0x63 | UID,值为0x3E9(1001) |
19 | 0x64-0x67 | GID,值为0x3E9(1001) |
20 | 0x68-0x6B | mode,值为0xA1FF(八进制120777) |
21 | 0x6C-0x6F | per-inode flags,值为1 |
22 | 0x70-0x73 | inode data length,值为0x0B |
23 | 0x74-0x77 | xattr_cnt,值为0 |
24 | 0x78-0x7B | xattr_size,值为0 |
25 | 0x7C-0x7F | padding1,值为0 |
26 | 0x80-0x83 | xattr_names,值为0 |
27 | 0x84-0x85 | compr_type,值为0x01,表示LZO压缩方式 |
28 | 0x86-0x9F | padding2,值为0 |
29 | 0x86-0x9F | data,字符串为001/002.txt |
最后以0xFF填充,8字节对齐。
(2)directory entry node分析
提取0x001400B0-0x001400F7的directory entry node数据:
00000000 31 18 10 06 e7 03 5a 56 04 00 00 00 00 00 00 00 |1.....ZV........|
00000010 41 00 00 00 02 00 00 00 01 00 00 00 2d 68 f9 57 |A...........-h.W|
00000020 00 00 00 00 00 00 00 00 41 00 00 00 00 00 00 00 |........A.......|
00000030 00 02 08 00 00 00 00 00 30 30 32 2e 6c 69 6e 6b |........002.link|
00000040 00 ff ff ff ff ff ff ff |........|
00000048
通过分析源码(struct ubifs_dent_node),并结合文件,分析结构如下:
序号 | 偏移 | 说明 |
1 | 0x00-0x03 | UBIFS标志,值为0x06101831 |
2 | 0x04-0x07 | CRC,值为0x565A03E7 |
3 | 0x08-0x0F | sequence number,值为0x04 |
4 | 0x10-0x13 | 块长度,值为0x41 |
5 | 0x14 | node type,值为0x02,表示directory entry node |
6 | 0x15 | node group type,值为0x00 |
7 | 0x16-0x17 | 填充值,值为0x0000,前0x18字节为ubifs_ch结构体 |
8 | 0x18-0x27 | node key,值为0x000000000000000057F9682D00000001 |
9 | 0x28-0x2F | target inode number,值为0x41 |
10 | 0x30 | padding1,值为0 |
11 | 0x31 | type of the target inode,值为0x02 |
12 | 0x32-0x33 | name length,值为0x08 |
13 | 0x34-0x37 | padding2,值为0 |
14 | 0x38-0x40 | name,字符串为002.link,以0x00结尾 |
最后以0xFF填充,8字节对齐。
(3)data node分析
提取0x001400F8-0x0014012F的data node数据
00000000 31 18 10 06 78 e5 c1 c1 06 00 00 00 00 00 00 00 |1...x...........|
00000010 38 00 00 00 01 00 00 00 42 00 00 00 00 00 00 20 |8.......B...... |
00000020 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 |................|
00000030 74 65 73 74 30 30 35 0a |test005.|
00000038
通过分析源码(struct ubifs_data_node),并结合文件,分析结构如下:
序号 | 偏移 | 说明 |
1 | 0x00-0x03 | UBIFS标志,值为0x06101831 |
2 | 0x04-0x07 | CRC,值为0xC1C1E578 |
3 | 0x08-0x0F | sequence number,值为0x06 |
4 | 0x10-0x13 | 块长度,值为0x38 |
5 | 0x14 | node type,值为0x01,表示data node |
6 | 0x15 | node group type,值为0x00 |
7 | 0x16-0x17 | 填充值,值为0x0000,前0x18字节为ubifs_ch结构体 |
8 | 0x18-0x27 | node key,值为0x000000000000000020000000000042 |
9 | 0x28-0x2B | uncompressed data size,值为0x08 |
10 | 0x2C-0x2D | compr_type,值为0x00,表示未压缩 |
11 | 0x2E-0x2F | padding,值为0x00 |
12 | 0x30-0x37 | data,内容为test005 |
参考链接:
https://blog.csdn.net/gy794627991/article/details/120056000
https://blog.csdn.net/jackone12347/article/details/121967478
https://blog.csdn.net/Dongsheng_Yang/article/details/47661733