Commit e70b9d8f94b9d34e3ce90a4698c2ef60d9b4a97f

Authored by Philippe Lagadec
1 parent fa510be7

bumped version and license date for 0.60.2

MANIFEST.in
@@ -8,7 +8,7 @@ include oletools/LICENSE.txt @@ -8,7 +8,7 @@ include oletools/LICENSE.txt
8 include oletools/DocVarDump.vba 8 include oletools/DocVarDump.vba
9 recursive-include oletools/thirdparty *.* 9 recursive-include oletools/thirdparty *.*
10 prune oletools/thirdparty/oledump/old 10 prune oletools/thirdparty/oledump/old
11 -recursive-include cheatsheet *.* 11 +recursive-include cheatsheet *.pdf
12 global-exclude *.pyc 12 global-exclude *.pyc
13 13
14 recursive-include tests *.py 14 recursive-include tests *.py
README.md
@@ -7,8 +7,15 @@ python-oletools @@ -7,8 +7,15 @@ python-oletools
7 [oletools](http://www.decalage.info/python/oletools) is a package of python tools to analyze 7 [oletools](http://www.decalage.info/python/oletools) is a package of python tools to analyze
8 [Microsoft OLE2 files](http://en.wikipedia.org/wiki/Compound_File_Binary_Format) 8 [Microsoft OLE2 files](http://en.wikipedia.org/wiki/Compound_File_Binary_Format)
9 (also called Structured Storage, Compound File Binary Format or Compound Document File Format), 9 (also called Structured Storage, Compound File Binary Format or Compound Document File Format),
10 -such as Microsoft Office documents or Outlook messages, mainly for malware analysis, forensics and debugging. 10 +such as Microsoft Office 97-2003 documents, MSI files or Outlook messages, mainly for malware analysis,
  11 +forensics and debugging.
11 It is based on the [olefile](http://www.decalage.info/olefile) parser. 12 It is based on the [olefile](http://www.decalage.info/olefile) parser.
  13 +
  14 +It also provides tools to analyze RTF files and files based on the [OpenXML format](https://en.wikipedia.org/wiki/Office_Open_XML)
  15 +(aka OOXML) such as MS Office 2007+ documents, XPS or MSIX files.
  16 +
  17 +For example, oletools can detect, extract and analyse VBA macros, OLE objects, Excel 4 macros (XLM) and DDE links.
  18 +
12 See [http://www.decalage.info/python/oletools](http://www.decalage.info/python/oletools) for more info. 19 See [http://www.decalage.info/python/oletools](http://www.decalage.info/python/oletools) for more info.
13 20
14 **Quick links:** 21 **Quick links:**
@@ -26,6 +33,16 @@ Note: python-oletools is not related to OLETools published by BeCubed Software. @@ -26,6 +33,16 @@ Note: python-oletools is not related to OLETools published by BeCubed Software.
26 News 33 News
27 ---- 34 ----
28 35
  36 +- **2024-06-27 v0.60.2**:
  37 + - olevba:
  38 + - fixed a bug in open_slk (issue #797, PR #769)
  39 + - fixed a bug due to new PROJECTCOMPATVERSION record in dir stream (PR #723, issues #700, #701, #725, #791, #808, #811, #833)
  40 + - oleobj: fixed SyntaxError with Python 3.12 (PR #855), SyntaxWarning (PR #774)
  41 + - rtfobj: fixed SyntaxError with Python 3.12 (PR #854)
  42 + - clsid: added CLSIDs for MSI, Zed
  43 + - ftguess: added MSI, PNG and OneNote formats
  44 + - pyxswf: fixed python 3.12 compatibility (PR #841, issue #813)
  45 + - setup/requirements: allow pyparsing 3 to solve install issues (PR #812, issue #762)
29 - **2022-05-09 v0.60.1**: 46 - **2022-05-09 v0.60.1**:
30 - olevba: 47 - olevba:
31 - fixed a bug when calling XLMMacroDeobfuscator (PR #737) 48 - fixed a bug when calling XLMMacroDeobfuscator (PR #737)
@@ -54,63 +71,6 @@ News @@ -54,63 +71,6 @@ News
54 - fixed bug in re_executable_extensions 71 - fixed bug in re_executable_extensions
55 - crypto: added PowerPoint transparent password '/01Hannes Ruescher/01' (issue #627) 72 - crypto: added PowerPoint transparent password '/01Hannes Ruescher/01' (issue #627)
56 - setup: XLMMacroDeobfuscator, xlrd2 and pyxlsb2 added as optional dependencies 73 - setup: XLMMacroDeobfuscator, xlrd2 and pyxlsb2 added as optional dependencies
57 -- **2021-05-07 v0.56.2**:  
58 - - olevba:  
59 - - updated plugin_biff to v0.0.22 to fix a bug (issues #647, #674)  
60 - - olevba, mraptor:  
61 - - added detection of Workbook_BeforeClose (issue #518)  
62 - - rtfobj:  
63 - - fixed bug when OLE package class name ends with null characters (issue #507, PR #648)  
64 - - oleid:  
65 - - fixed bug in check_excel (issue #584, PR #585)  
66 - - clsid:  
67 - - added several CLSIDs related to MS Office click-to-run issue CVE-2021-27058  
68 - - added checks to ensure that all CLSIDs are uppercase (PR #678)  
69 -- **2021-04-02 v0.56.1**:  
70 - - olevba:  
71 - - fixed bug when parsing some malformed files (issue #629)  
72 - - oleobj:  
73 - - fixed bug preventing detection of links 'externalReference', 'frame',  
74 - 'hyperlink' (issue #641, PR #670)  
75 - - setup:  
76 - - avoid installing msoffcrypto-tool when platform is PyPy+Windows (issue #473)  
77 - - PyPI version is now a wheel package to improve installation and avoid antivirus  
78 - false positives due to test files (issues #215, #398)  
79 -- **2020-09-28 v0.56**:  
80 - - olevba/mraptor:  
81 - - added detection of trigger _OnConnecting  
82 - - olevba:  
83 - - updated plugin_biff to v0.0.17 to improve Excel 4/XLM macros parsing  
84 - - added simple analysis of Excel 4/XLM macros in XLSM files (PR #569)  
85 - - added detection of template injection (PR #569)  
86 - - added detection of many suspicious keywords (PR #591 and #569, see https://www.certego.net/en/news/advanced-vba-macros/)  
87 - - improved MHT detection (PR #532)  
88 - - added --no-xlm option to disable Excel 4/XLM macros parsing (PR #532)  
89 - - fixed bug when decompressing raw chunks in VBA (issue #575)  
90 - - fixed bug with email package due to monkeypatch for MHT parsing (issue #602, PR #604)  
91 - - fixed option --relaxed (issue #596, PR #595)  
92 - - enabled relaxed mode by default (issues #477, #593)  
93 - - fixed detect_vba_macros to always return VBA code as  
94 - unicode on Python 3 (issues #455, #477, #587, #593)  
95 - - replaced option --pcode by --show-pcode and --no-pcode,  
96 - replaced optparse by argparse (PR #479)  
97 - - oleform: improved form parsing (PR #532)  
98 - - oleobj: "Ole10Native" is now case insensitive (issue #541)  
99 - - clsid: added PDF (issue #552), Microsoft Word Picture (issue #571)  
100 - - ppt_parser: fixed bug on Python 3 (issues #177, #607, PR #450)  
101 -- **2019-12-03 v0.55**:  
102 - - olevba:  
103 - - added support for SLK files and XLM macro extraction from SLK  
104 - - VBA Stomping detection  
105 - - integrated pcodedmp to extract and disassemble P-code  
106 - - detection of suspicious keywords and IOCs in P-code  
107 - - new option --pcode to display P-code disassembly  
108 - - improved detection of auto execution triggers  
109 - - rtfobj: added URL carver for CVE-2017-0199  
110 - - better handling of unicode for systems with locale that does not support UTF-8, e.g. LANG=C (PR #365)  
111 - - tests:  
112 - - test files can now be encrypted, to avoid antivirus alerts (PR #217, issue #215)  
113 - - tests that trigger antivirus alerts have been temporarily disabled (issue #215)  
114 74
115 See the [full changelog](https://github.com/decalage2/oletools/wiki/Changelog) for more information. 75 See the [full changelog](https://github.com/decalage2/oletools/wiki/Changelog) for more information.
116 76
oletools/LICENSE.txt
@@ -3,7 +3,7 @@ LICENSE for the python-oletools package: @@ -3,7 +3,7 @@ LICENSE for the python-oletools package:
3 This license applies to the python-oletools package, apart from the thirdparty 3 This license applies to the python-oletools package, apart from the thirdparty
4 folder which contains third-party files published with their own license. 4 folder which contains third-party files published with their own license.
5 5
6 -The python-oletools package is copyright (c) 2012-2022 Philippe Lagadec (http://www.decalage.info) 6 +The python-oletools package is copyright (c) 2012-2024 Philippe Lagadec (http://www.decalage.info)
7 7
8 All rights reserved. 8 All rights reserved.
9 9
oletools/ftguess.py
@@ -17,7 +17,7 @@ http://www.decalage.info/python/oletools @@ -17,7 +17,7 @@ http://www.decalage.info/python/oletools
17 17
18 #=== LICENSE ================================================================= 18 #=== LICENSE =================================================================
19 19
20 -# ftguess is copyright (c) 2018-2023, Philippe Lagadec (http://www.decalage.info) 20 +# ftguess is copyright (c) 2018-2024, Philippe Lagadec (http://www.decalage.info)
21 # All rights reserved. 21 # All rights reserved.
22 # 22 #
23 # Redistribution and use in source and binary forms, with or without modification, 23 # Redistribution and use in source and binary forms, with or without modification,
@@ -47,7 +47,7 @@ from __future__ import print_function @@ -47,7 +47,7 @@ from __future__ import print_function
47 # 2018-07-04 v0.54 PL: - first version 47 # 2018-07-04 v0.54 PL: - first version
48 # 2021-05-09 v0.60 PL: - 48 # 2021-05-09 v0.60 PL: -
49 49
50 -__version__ = '0.60.2dev3' 50 +__version__ = '0.60.2'
51 51
52 # ------------------------------------------------------------------------------ 52 # ------------------------------------------------------------------------------
53 # TODO: 53 # TODO:
oletools/msodde.py
@@ -103,7 +103,7 @@ from oletools.common.log_helper import log_helper @@ -103,7 +103,7 @@ from oletools.common.log_helper import log_helper
103 # 2019-07-17 v0.55 CH: - fixed issue #267, unicode error on Python 2 103 # 2019-07-17 v0.55 CH: - fixed issue #267, unicode error on Python 2
104 104
105 105
106 -__version__ = '0.55' 106 +__version__ = '0.60.2'
107 107
108 # ----------------------------------------------------------------------------- 108 # -----------------------------------------------------------------------------
109 # TODO: field codes can be in headers/footers/comments - parse these 109 # TODO: field codes can be in headers/footers/comments - parse these
@@ -435,6 +435,8 @@ def process_doc(ole): @@ -435,6 +435,8 @@ def process_doc(ole):
435 if is_stream: 435 if is_stream:
436 new_parts = process_doc_stream( 436 new_parts = process_doc_stream(
437 ole._open(direntry.isectStart, direntry.size)) 437 ole._open(direntry.isectStart, direntry.size))
  438 + if new_parts:
  439 + logger.debug("stream %r: %r" % (direntry.name, new_parts))
438 links.extend(new_parts) 440 links.extend(new_parts)
439 441
440 # mimic behaviour of process_docx: combine links to single text string 442 # mimic behaviour of process_docx: combine links to single text string
@@ -646,7 +648,7 @@ def process_xlsx(filepath): @@ -646,7 +648,7 @@ def process_xlsx(filepath):
646 """ process an OOXML excel file (e.g. .xlsx or .xlsb or .xlsm) """ 648 """ process an OOXML excel file (e.g. .xlsx or .xlsb or .xlsm) """
647 dde_links = [] 649 dde_links = []
648 parser = ooxml.XmlParser(filepath) 650 parser = ooxml.XmlParser(filepath)
649 - for _, elem, _ in parser.iter_xml(): 651 + for subfilename, elem, _ in parser.iter_xml():
650 tag = elem.tag.lower() 652 tag = elem.tag.lower()
651 if tag == 'ddelink' or tag.endswith('}ddelink'): 653 if tag == 'ddelink' or tag.endswith('}ddelink'):
652 # we have found a dde link. Try to get more info about it 654 # we have found a dde link. Try to get more info about it
@@ -656,6 +658,7 @@ def process_xlsx(filepath): @@ -656,6 +658,7 @@ def process_xlsx(filepath):
656 if 'ddeTopic' in elem.attrib: 658 if 'ddeTopic' in elem.attrib:
657 link_info.append(elem.attrib['ddeTopic']) 659 link_info.append(elem.attrib['ddeTopic'])
658 dde_links.append(u' '.join(link_info)) 660 dde_links.append(u' '.join(link_info))
  661 + logger.debug('Found tag "%s" in file %s: %s' % (tag, subfilename, repr(link_info)))
659 662
660 # binary parts, e.g. contained in .xlsb 663 # binary parts, e.g. contained in .xlsb
661 for subfile, content_type, handle in parser.iter_non_xml(): 664 for subfile, content_type, handle in parser.iter_non_xml():
oletools/olevba.py
@@ -236,7 +236,7 @@ from __future__ import print_function @@ -236,7 +236,7 @@ from __future__ import print_function
236 # 2021-04-14 PL: - added detection of Workbook_BeforeClose (issue #518) 236 # 2021-04-14 PL: - added detection of Workbook_BeforeClose (issue #518)
237 # 2021-11-09 KJ: - added PROJECTCOMPATVERSION Record on dir Stream 237 # 2021-11-09 KJ: - added PROJECTCOMPATVERSION Record on dir Stream
238 238
239 -__version__ = '0.60.2dev5' 239 +__version__ = '0.60.2'
240 240
241 #------------------------------------------------------------------------------ 241 #------------------------------------------------------------------------------
242 # TODO: 242 # TODO:
oletools/record_base.py
@@ -10,7 +10,7 @@ ppt_record_parser.py . @@ -10,7 +10,7 @@ ppt_record_parser.py .
10 10
11 # === LICENSE ================================================================== 11 # === LICENSE ==================================================================
12 12
13 -# record_base is copyright (c) 2014-2021 Philippe Lagadec (http://www.decalage.info) 13 +# record_base is copyright (c) 2014-2024 Philippe Lagadec (http://www.decalage.info)
14 # All rights reserved. 14 # All rights reserved.
15 # 15 #
16 # Redistribution and use in source and binary forms, with or without 16 # Redistribution and use in source and binary forms, with or without
@@ -44,7 +44,7 @@ from __future__ import print_function @@ -44,7 +44,7 @@ from __future__ import print_function
44 # and dev version 44 # and dev version
45 # 2019-05-24 CH: - use log_helper 45 # 2019-05-24 CH: - use log_helper
46 46
47 -__version__ = '0.60.dev1' 47 +__version__ = '0.60.2'
48 48
49 # ----------------------------------------------------------------------------- 49 # -----------------------------------------------------------------------------
50 # TODO: 50 # TODO:
setup.py
@@ -55,12 +55,12 @@ import os, fnmatch @@ -55,12 +55,12 @@ import os, fnmatch
55 #--- METADATA ----------------------------------------------------------------- 55 #--- METADATA -----------------------------------------------------------------
56 56
57 name = "oletools" 57 name = "oletools"
58 -version = '0.60.2dev6' 58 +version = '0.60.2'
59 desc = "Python tools to analyze security characteristics of MS Office and OLE files (also called Structured Storage, Compound File Binary Format or Compound Document File Format), for Malware Analysis and Incident Response #DFIR" 59 desc = "Python tools to analyze security characteristics of MS Office and OLE files (also called Structured Storage, Compound File Binary Format or Compound Document File Format), for Malware Analysis and Incident Response #DFIR"
60 long_desc = open('oletools/README.rst').read() 60 long_desc = open('oletools/README.rst').read()
61 author = "Philippe Lagadec" 61 author = "Philippe Lagadec"
62 author_email = "nospam@decalage.info" 62 author_email = "nospam@decalage.info"
63 -url = "http://www.decalage.info/python/oletools" 63 +url = "https://github.com/decalage2/oletools"
64 license = "BSD" 64 license = "BSD"
65 download_url = "https://github.com/decalage2/oletools/releases" 65 download_url = "https://github.com/decalage2/oletools/releases"
66 66