Commit 1009dda58dd7f0d6a210510fe5cfcf517b915ed0
1 parent
a299cc6d
olevba: improved filter_vba to detect colons
Showing
1 changed file
with
10 additions
and
4 deletions
oletools/olevba.py
| ... | ... | @@ -22,7 +22,7 @@ https://github.com/unixfreak0037/officeparser |
| 22 | 22 | |
| 23 | 23 | #=== LICENSE ================================================================== |
| 24 | 24 | |
| 25 | -# olevba is copyright (c) 2014 Philippe Lagadec (http://www.decalage.info) | |
| 25 | +# olevba is copyright (c) 2014-2015 Philippe Lagadec (http://www.decalage.info) | |
| 26 | 26 | # All rights reserved. |
| 27 | 27 | # |
| 28 | 28 | # Redistribution and use in source and binary forms, with or without modification, |
| ... | ... | @@ -90,8 +90,9 @@ https://github.com/unixfreak0037/officeparser |
| 90 | 90 | # - uses xglob to scan several files with wildcards |
| 91 | 91 | # - option -r to recurse subdirectories |
| 92 | 92 | # - option -z to scan files in password-protected zips |
| 93 | +# 2015-01-02 v0.11 PL: - improved filter_vba to detect colons | |
| 93 | 94 | |
| 94 | -__version__ = '0.10' | |
| 95 | +__version__ = '0.11' | |
| 95 | 96 | |
| 96 | 97 | #------------------------------------------------------------------------------ |
| 97 | 98 | # TODO: |
| ... | ... | @@ -723,7 +724,12 @@ def _extract_vba (ole, vba_root, project_path, dir_path): |
| 723 | 724 | |
| 724 | 725 | def filter_vba(vba_code): |
| 725 | 726 | """ |
| 726 | - Filter VBA source code to remove the first lines starting with "Attribute VB_" | |
| 727 | + Filter VBA source code to remove the first lines starting with "Attribute VB_", | |
| 728 | + which are automatically added by MS Office and not displayed in the VBA Editor. | |
| 729 | + This should only be used when displaying source code for human analysis. | |
| 730 | + | |
| 731 | + Note: lines are not filtered if they contain a colon, because it could be | |
| 732 | + used to hide malicious instructions. | |
| 727 | 733 | |
| 728 | 734 | :param vba_code: str, VBA source code |
| 729 | 735 | :return: str, filtered VBA source code |
| ... | ... | @@ -731,7 +737,7 @@ def filter_vba(vba_code): |
| 731 | 737 | vba_lines = vba_code.splitlines() |
| 732 | 738 | start = 0 |
| 733 | 739 | for line in vba_lines: |
| 734 | - if line.startswith("Attribute VB_"): | |
| 740 | + if line.startswith("Attribute VB_") and not ':' in line: | |
| 735 | 741 | start += 1 |
| 736 | 742 | else: |
| 737 | 743 | break | ... | ... |