|
11 | 11 |
|
12 | 12 | class RomFSCommon(object): |
13 | 13 |
|
| 14 | + def _read_next_halfword(self): |
| 15 | + value = struct.unpack("%sH" % self.endianness, self.data[self.index:self.index + 2])[0] |
| 16 | + self.index += 2 |
| 17 | + return value |
| 18 | + |
14 | 19 | def _read_next_word(self): |
15 | 20 | value = struct.unpack("%sL" % self.endianness, self.data[self.index:self.index + 4])[0] |
16 | 21 | self.index += 4 |
@@ -48,20 +53,21 @@ class RomFSEntry(RomFSCommon): |
48 | 53 |
|
49 | 54 | DIR_STRUCT_MASK = 0x00000001 |
50 | 55 | DATA_MASK = 0x00000008 |
51 | | - COMPRESSED_MASK = 0x005B0000 |
| 56 | + COMPRESSED_MASK = 0x005B0000 # wrong - probably some permissions |
52 | 57 |
|
53 | 58 | def __init__(self, data, endianness="<"): |
54 | 59 | self.data = data |
55 | 60 | self.endianness = endianness |
56 | 61 | self.index = 0 |
57 | 62 |
|
58 | 63 | self.type = self._read_next_word() |
59 | | - self.unknown2 = self._read_next_word() |
60 | | - self.unknown3 = self._read_next_word() |
| 64 | + self.nlink = self._read_next_word() |
| 65 | + self.user_id = self._read_next_halfword() |
| 66 | + self.group_id = self._read_next_halfword() |
61 | 67 | self.size = self._read_next_word() |
62 | | - self.unknown4 = self._read_next_word() |
| 68 | + self.ctime = self._read_next_word() |
63 | 69 | self.offset = self._read_next_word() |
64 | | - self.unknown5 = self._read_next_word() |
| 70 | + self.size_decompressed = self._read_next_word() # 0 means no compression |
65 | 71 | self.uid = self._read_next_uid() |
66 | 72 |
|
67 | 73 |
|
@@ -167,6 +173,9 @@ def _process_all_entries(self): |
167 | 173 | entries[entry.uid].offset = entry.offset |
168 | 174 | entries[entry.uid].size = entry.size |
169 | 175 | entries[entry.uid].type = entry.type |
| 176 | + entries[entry.uid].size_decompressed = entry.size_decompressed |
| 177 | + entries[entry.uid].ctime = entry.ctime |
| 178 | + entries[entry.uid].nlink = entry.nlink |
170 | 179 | if entry.uid == 0: |
171 | 180 | entries[entry.uid].name = os.path.sep |
172 | 181 |
|
@@ -200,7 +209,7 @@ def _process_all_entries(self): |
200 | 209 | class DlinkROMFSExtractPlugin(binwalk.core.plugin.Plugin): |
201 | 210 |
|
202 | 211 | ''' |
203 | | - Gzip extractor plugin. |
| 212 | + D-link ROMFS extractor plugin. |
204 | 213 | ''' |
205 | 214 | MODULES = ['Signature'] |
206 | 215 | BLOCK_SIZE = 10 * 1024 |
|
0 commit comments