Commit 1281a509688153c0f2f91c353f8900ab9d9d9678
1 parent
957ac61c
olevba: improved display for empty macros
Showing
1 changed file
with
19 additions
and
16 deletions
oletools/olevba.py
| ... | ... | @@ -85,6 +85,7 @@ Usage: olevba.py <file> |
| 85 | 85 | # - detect auto-executable macros |
| 86 | 86 | # - ignore empty macros |
| 87 | 87 | # 2014-12-14 v0.07 PL: - detect_autoexec() is now case-insensitive |
| 88 | +# 2014-12-15 v0.08 PL: - improved display for empty macros | |
| 88 | 89 | |
| 89 | 90 | __version__ = '0.07' |
| 90 | 91 | |
| ... | ... | @@ -931,6 +932,7 @@ if __name__ == '__main__': |
| 931 | 932 | print '='*79 |
| 932 | 933 | print 'File:', fname |
| 933 | 934 | try: |
| 935 | + #TODO: handle olefile errors, when an OLE file is malformed | |
| 934 | 936 | vba = VBA_Parser(fname) |
| 935 | 937 | print 'Type:', vba.type |
| 936 | 938 | if vba.detect_vba_macros(): |
| ... | ... | @@ -938,28 +940,29 @@ if __name__ == '__main__': |
| 938 | 940 | for (filename, stream_path, vba_filename, vba_code) in vba.extract_macros(): |
| 939 | 941 | # hide attribute lines: |
| 940 | 942 | vba_code = filter_vba(vba_code) |
| 941 | - # ignore empty macros: | |
| 942 | - if vba_code.strip() == '': | |
| 943 | - continue | |
| 944 | 943 | print '-'*79 |
| 945 | 944 | print 'Filename :', filename |
| 946 | 945 | print 'OLE stream :', stream_path |
| 947 | 946 | print 'VBA filename:', vba_filename |
| 948 | 947 | print '- '*39 |
| 949 | - print filter_vba(vba_code) | |
| 950 | - print '- '*39 | |
| 951 | - autoexec_keywords = detect_autoexec(vba_code) | |
| 952 | - if autoexec_keywords: | |
| 953 | - print 'Auto-executable macro keywords found:' | |
| 954 | - t = prettytable.PrettyTable(('Keyword', 'Description')) | |
| 955 | - t.align = 'l' | |
| 956 | - t.max_width['Keyword'] = 20 | |
| 957 | - t.max_width['Description'] = 59 | |
| 958 | - for keyword, description in autoexec_keywords: | |
| 959 | - t.add_row((keyword, description)) | |
| 960 | - print t | |
| 948 | + # detect empty macros: | |
| 949 | + if vba_code.strip() == '': | |
| 950 | + print '(empty macro)' | |
| 961 | 951 | else: |
| 962 | - print 'Auto-executable macro keywords: None found' | |
| 952 | + print vba_code | |
| 953 | + print '- '*39 | |
| 954 | + autoexec_keywords = detect_autoexec(vba_code) | |
| 955 | + if autoexec_keywords: | |
| 956 | + print 'Auto-executable macro keywords found:' | |
| 957 | + t = prettytable.PrettyTable(('Keyword', 'Description')) | |
| 958 | + t.align = 'l' | |
| 959 | + t.max_width['Keyword'] = 20 | |
| 960 | + t.max_width['Description'] = 59 | |
| 961 | + for keyword, description in autoexec_keywords: | |
| 962 | + t.add_row((keyword, description)) | |
| 963 | + print t | |
| 964 | + else: | |
| 965 | + print 'Auto-executable macro keywords: None found' | |
| 963 | 966 | |
| 964 | 967 | else: |
| 965 | 968 | print 'No VBA macros found.' | ... | ... |