diff --git a/pyOneNote/FileNode.py b/pyOneNote/FileNode.py index a5f04d0..4a86bdf 100644 --- a/pyOneNote/FileNode.py +++ b/pyOneNote/FileNode.py @@ -544,7 +544,9 @@ def __str__(self): class FileDataStoreObject: def __init__(self, file, fileNodeChunkReference): - self.guidHeader, self.cbLength, self.unused, self.reserved = struct.unpack('<16sQ4s8s', file.read(36)) + size_of_header = 36 + self.guidHeader, self.cbLength, self.unused, self.reserved = struct.unpack('<16sQ4s8s', file.read(size_of_header)) + self.FileOffset = fileNodeChunkReference.stp + size_of_header self.FileData, = struct.unpack('{}s'.format(self.cbLength), file.read(self.cbLength)) file.seek(fileNodeChunkReference.stp + fileNodeChunkReference.cb - 16) self.guidFooter, = struct.unpack('16s', file.read(16)) diff --git a/pyOneNote/Main.py b/pyOneNote/Main.py index 6189d2e..9e55935 100644 --- a/pyOneNote/Main.py +++ b/pyOneNote/Main.py @@ -55,6 +55,7 @@ def process_onenote_file(file, output_dir, extension, json_output): for name, file in data['files'].items(): print('{}{} ({}):'.format(indent, name, file['identity'])) print('\t{}Extension: {}'.format(indent, file['extension'])) + print('\t{}At offset: {} ({} bytes)'.format(indent, file['offset'], len(file['content']))) if(file['identity'] in file_metadata): for property_name, property_val in file_metadata[file['identity']].items(): print('{}{}: {}'.format(indent+'\t', property_name, str(property_val))) diff --git a/pyOneNote/OneDocument.py b/pyOneNote/OneDocument.py index 906a606..50f200e 100644 --- a/pyOneNote/OneDocument.py +++ b/pyOneNote/OneDocument.py @@ -51,13 +51,14 @@ def get_files(self): if hasattr(node, "data") and node.data: if isinstance(node.data, FileDataStoreObjectReferenceFND): if not str(node.data.guidReference) in self._files: - self._files[str(node.data.guidReference)] = {"extension": "", "content": "", "identity": ""} + self._files[str(node.data.guidReference)] = {"extension": "", "content": "", "identity": "", "offset": 0} self._files[str(node.data.guidReference)]["content"] = node.data.fileDataStoreObject.FileData + self._files[str(node.data.guidReference)]["offset"] = node.data.fileDataStoreObject.FileOffset elif isinstance(node.data, ObjectDeclarationFileData3RefCountFND): guid = node.data.FileDataReference.StringData.replace("{", "").replace("}", "") guid = guid.lower() if not guid in self._files: - self._files[guid] = {"extension": "", "content": "", "identity": ""} + self._files[guid] = {"extension": "", "content": "", "identity": "", "offset": 0} self._files[guid]["extension"] = node.data.Extension.StringData self._files[guid]["identity"] = str(node.data.oid) return self._files @@ -71,6 +72,7 @@ def get_json(self): for key, file in self.get_files().items(): files_in_hex[key] = {'extension': file['extension'], 'content': file['content'].hex(), + 'offset': file['offset'], 'identity': file['identity']} res = {