Commit a7309e599dc99b2b7bf08f4b7ffb4ca4b15a6364
1 parent
238d0172
olevba: fixed MHTML format support on Python 3 (issue #106)
Showing
1 changed file
with
9 additions
and
5 deletions
oletools/olevba.py
| ... | ... | @@ -2797,12 +2797,12 @@ class VBA_Parser(object): |
| 2797 | 2797 | try: |
| 2798 | 2798 | # parse the MIME content |
| 2799 | 2799 | # remove any leading whitespace or newline (workaround for issue in email package) |
| 2800 | - stripped_data = data.lstrip('\r\n\t ') | |
| 2800 | + stripped_data = data.lstrip(b'\r\n\t ') | |
| 2801 | 2801 | # strip any junk from the beginning of the file |
| 2802 | 2802 | # (issue #31 fix by Greg C - gdigreg) |
| 2803 | 2803 | # TODO: improve keywords to avoid false positives |
| 2804 | - mime_offset = stripped_data.find('MIME') | |
| 2805 | - content_offset = stripped_data.find('Content') | |
| 2804 | + mime_offset = stripped_data.find(b'MIME') | |
| 2805 | + content_offset = stripped_data.find(b'Content') | |
| 2806 | 2806 | # if "MIME" is found, and located before "Content": |
| 2807 | 2807 | if -1 < mime_offset <= content_offset: |
| 2808 | 2808 | stripped_data = stripped_data[mime_offset:] |
| ... | ... | @@ -2811,7 +2811,11 @@ class VBA_Parser(object): |
| 2811 | 2811 | elif content_offset > -1: |
| 2812 | 2812 | stripped_data = stripped_data[content_offset:] |
| 2813 | 2813 | # TODO: quick and dirty fix: insert a standard line with MIME-Version header? |
| 2814 | - mhtml = email.message_from_string(stripped_data) | |
| 2814 | + if PYTHON2: | |
| 2815 | + mhtml = email.message_from_string(stripped_data) | |
| 2816 | + else: | |
| 2817 | + # on Python 3, need to use message_from_bytes instead: | |
| 2818 | + mhtml = email.message_from_bytes(stripped_data) | |
| 2815 | 2819 | # find all the attached files: |
| 2816 | 2820 | for part in mhtml.walk(): |
| 2817 | 2821 | content_type = part.get_content_type() # always returns a value |
| ... | ... | @@ -2824,7 +2828,7 @@ class VBA_Parser(object): |
| 2824 | 2828 | # using the ActiveMime/MSO format (zlib-compressed), and Base64 encoded. |
| 2825 | 2829 | # decompress the zlib data starting at offset 0x32, which is the OLE container: |
| 2826 | 2830 | # check ActiveMime header: |
| 2827 | - if isinstance(part_data, str) and is_mso_file(part_data): | |
| 2831 | + if isinstance(part_data, bytes) and is_mso_file(part_data): | |
| 2828 | 2832 | log.debug('Found ActiveMime header, decompressing MSO container') |
| 2829 | 2833 | try: |
| 2830 | 2834 | ole_data = mso_file_extract(part_data) | ... | ... |