Skip to content

Commit

Permalink
Clarify fields in D-Link ROMFS entries
Browse files Browse the repository at this point in the history
  • Loading branch information
syschmod authored Apr 24, 2020
1 parent fb4fc6a commit 3417573
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions src/binwalk/plugins/dlromfsextract.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@

class RomFSCommon(object):

def _read_next_halfword(self):
value = struct.unpack("%sH" % self.endianness, self.data[self.index:self.index + 2])[0]
self.index += 2
return value

def _read_next_word(self):
value = struct.unpack("%sL" % self.endianness, self.data[self.index:self.index + 4])[0]
self.index += 4
Expand Down Expand Up @@ -48,20 +53,21 @@ class RomFSEntry(RomFSCommon):

DIR_STRUCT_MASK = 0x00000001
DATA_MASK = 0x00000008
COMPRESSED_MASK = 0x005B0000
COMPRESSED_MASK = 0x005B0000 # wrong - probably some permissions

def __init__(self, data, endianness="<"):
self.data = data
self.endianness = endianness
self.index = 0

self.type = self._read_next_word()
self.unknown2 = self._read_next_word()
self.unknown3 = self._read_next_word()
self.nlink = self._read_next_word()
self.user_id = self._read_next_halfword()
self.group_id = self._read_next_halfword()
self.size = self._read_next_word()
self.unknown4 = self._read_next_word()
self.ctime = self._read_next_word()
self.offset = self._read_next_word()
self.unknown5 = self._read_next_word()
self.size_decompressed = self._read_next_word() # 0 means no compression
self.uid = self._read_next_uid()


Expand Down Expand Up @@ -167,6 +173,9 @@ def _process_all_entries(self):
entries[entry.uid].offset = entry.offset
entries[entry.uid].size = entry.size
entries[entry.uid].type = entry.type
entries[entry.uid].size_decompressed = entry.size_decompressed
entries[entry.uid].ctime = entry.ctime
entries[entry.uid].nlink = entry.nlink
if entry.uid == 0:
entries[entry.uid].name = os.path.sep

Expand Down Expand Up @@ -200,7 +209,7 @@ def _process_all_entries(self):
class DlinkROMFSExtractPlugin(binwalk.core.plugin.Plugin):

'''
Gzip extractor plugin.
D-link ROMFS extractor plugin.
'''
MODULES = ['Signature']
BLOCK_SIZE = 10 * 1024
Expand Down

0 comments on commit 3417573

Please sign in to comment.