Commit e07a649f95969697e7d0fd10ece15f8267bb534f

Authored by Christian Herdtweck
1 parent a60d9f3e

created PptParser.read_vba_storage for uncompressed data storages

oletools/olevba.py
@@ -2218,8 +2218,7 @@ class VBA_Parser(object): @@ -2218,8 +2218,7 @@ class VBA_Parser(object):
2218 storage_decomp = ppt.decompress_vba_storage(storage) 2218 storage_decomp = ppt.decompress_vba_storage(storage)
2219 n_compressed += 1 2219 n_compressed += 1
2220 else: 2220 else:
2221 - log.warning('just guessing here: decompressed storage = storage?')  
2222 - storage_decomp = storage.read_all() # not implemented yet 2221 + storage_decomp = ppt.read_vba_storage_data(storage)
2223 self.ole_subfiles.append(VBA_Parser(None, storage_decomp, 2222 self.ole_subfiles.append(VBA_Parser(None, storage_decomp,
2224 container='PptParser')) 2223 container='PptParser'))
2225 log.info('File is PPT with {} vba infos ({} with macros) and {} ' 2224 log.info('File is PPT with {} vba infos ({} with macros) and {} '
oletools/ppt_parser.py
@@ -1490,6 +1490,28 @@ class PptParser(object): @@ -1490,6 +1490,28 @@ class PptParser(object):
1490 stream.close() 1490 stream.close()
1491 1491
1492 1492
  1493 + def read_vba_storage_data(self, storage):
  1494 + """ return data pointed to by uncompressed storage """
  1495 +
  1496 + log.debug('reading uncompressed VBA OLE data stream')
  1497 + stream = None
  1498 + try:
  1499 + log.debug('opening stream')
  1500 + stream = self.ole.openstream(MAIN_STREAM_NAME)
  1501 +
  1502 + log.debug('reading {} bytes starting at {}'
  1503 + .format(storage.data_size, storage.data_offset))
  1504 + stream.seek(storage.data_offset, os.SEEK_SET)
  1505 + data = stream.read(storage.data_size)
  1506 +
  1507 + return data
  1508 +
  1509 + finally:
  1510 + if stream is not None:
  1511 + log.debug('closing stream')
  1512 + stream.close()
  1513 +
  1514 +
1493 def iterative_decompress(stream, size, chunk_size=4096): 1515 def iterative_decompress(stream, size, chunk_size=4096):
1494 """ decompress data from stream chunk-wise """ 1516 """ decompress data from stream chunk-wise """
1495 1517