Commit e87c0b102e1f98375576419e80f55468f10724a4

Authored by Philippe Lagadec
1 parent 698fabf4

olevba: hide first lines with VB attributes

Showing 1 changed file with 23 additions and 2 deletions
oletools/olevba.py
... ... @@ -81,8 +81,9 @@ Usage: olevba.py <file>
81 81 # 2014-11-29 v0.04 PL: - use olefile instead of OleFileIO_PL
82 82 # 2014-12-05 v0.05 PL: - refactored most functions into a class, new API
83 83 # - added detect_vba_macros
  84 +# 2014-12-10 v0.06 PL: - hide first lines with VB attributes
84 85  
85   -__version__ = '0.05'
  86 +__version__ = '0.06'
86 87  
87 88 #------------------------------------------------------------------------------
88 89 # TODO:
... ... @@ -644,6 +645,26 @@ def _extract_vba (ole, vba_root, project_path, dir_path):
644 645 return
645 646  
646 647  
  648 +def filter_vba(vba_code):
  649 + """
  650 + Filter VBA source code to remove the first lines starting with "Attribute VB_"
  651 +
  652 + :param vba_code: str, VBA source code
  653 + :return: str, filtered VBA source code
  654 + """
  655 + vba_lines = vba_code.splitlines()
  656 + start = 0
  657 + for line in vba_lines:
  658 + if line.startswith("Attribute VB_"):
  659 + start += 1
  660 + else:
  661 + break
  662 + #TODO: also remove empty lines?
  663 + vba = '\n'.join(vba_lines[start:])
  664 + return vba
  665 +
  666 +
  667 +
647 668 #=== CLASSES =================================================================
648 669  
649 670 class VBA_Parser(object):
... ... @@ -878,7 +899,7 @@ if __name__ == '__main__':
878 899 print 'OLE stream :', stream_path
879 900 print 'VBA filename:', vba_filename
880 901 print '- '*39
881   - print vba_code
  902 + print filter_vba(vba_code)
882 903 else:
883 904 print 'No VBA macros found.'
884 905 except TypeError:
... ...