Commit 66347e8e0062405e6300c627c8310499b13b3375
1 parent
d03c8683
updated readme and doc for v0.54
Showing
26 changed files
with
258 additions
and
120 deletions
oletools/README.html
| @@ -17,13 +17,27 @@ | @@ -17,13 +17,27 @@ | ||
| 17 | </head> | 17 | </head> |
| 18 | <body> | 18 | <body> |
| 19 | <h1 id="python-oletools">python-oletools</h1> | 19 | <h1 id="python-oletools">python-oletools</h1> |
| 20 | -<p><a href="https://pypi.org/project/oletools/"><img src="https://img.shields.io/pypi/v/oletools.svg" alt="PyPI" /></a> <a href="https://travis-ci.org/decalage2/oletools"><img src="https://travis-ci.org/decalage2/oletools.svg?branch=master" alt="Build Status" /></a></p> | 20 | +<p><a href="https://pypi.org/project/oletools/"><img src="https://img.shields.io/pypi/v/oletools.svg" alt="PyPI" /></a> <a href="https://travis-ci.org/decalage2/oletools"><img src="https://travis-ci.org/decalage2/oletools.svg?branch=master" alt="Build Status" /></a> <a href="https://saythanks.io/to/decalage2"><img src="https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg" alt="Say Thanks!" /></a></p> |
| 21 | <p><a href="http://www.decalage.info/python/oletools">oletools</a> is a package of python tools to analyze <a href="http://en.wikipedia.org/wiki/Compound_File_Binary_Format">Microsoft OLE2 files</a> (also called Structured Storage, Compound File Binary Format or Compound Document File Format), such as Microsoft Office documents or Outlook messages, mainly for malware analysis, forensics and debugging. It is based on the <a href="http://www.decalage.info/olefile">olefile</a> parser. See <a href="http://www.decalage.info/python/oletools" class="uri">http://www.decalage.info/python/oletools</a> for more info.</p> | 21 | <p><a href="http://www.decalage.info/python/oletools">oletools</a> is a package of python tools to analyze <a href="http://en.wikipedia.org/wiki/Compound_File_Binary_Format">Microsoft OLE2 files</a> (also called Structured Storage, Compound File Binary Format or Compound Document File Format), such as Microsoft Office documents or Outlook messages, mainly for malware analysis, forensics and debugging. It is based on the <a href="http://www.decalage.info/olefile">olefile</a> parser. See <a href="http://www.decalage.info/python/oletools" class="uri">http://www.decalage.info/python/oletools</a> for more info.</p> |
| 22 | <p><strong>Quick links:</strong> <a href="http://www.decalage.info/python/oletools">Home page</a> - <a href="https://github.com/decalage2/oletools/wiki/Install">Download/Install</a> - <a href="https://github.com/decalage2/oletools/wiki">Documentation</a> - <a href="https://github.com/decalage2/oletools/issues">Report Issues/Suggestions/Questions</a> - <a href="http://decalage.info/contact">Contact the Author</a> - <a href="https://github.com/decalage2/oletools">Repository</a> - <a href="https://twitter.com/decalage2">Updates on Twitter</a> <a href="https://github.com/decalage2/oletools/blob/master/cheatsheet/oletools_cheatsheet.pdf">Cheatsheet</a></p> | 22 | <p><strong>Quick links:</strong> <a href="http://www.decalage.info/python/oletools">Home page</a> - <a href="https://github.com/decalage2/oletools/wiki/Install">Download/Install</a> - <a href="https://github.com/decalage2/oletools/wiki">Documentation</a> - <a href="https://github.com/decalage2/oletools/issues">Report Issues/Suggestions/Questions</a> - <a href="http://decalage.info/contact">Contact the Author</a> - <a href="https://github.com/decalage2/oletools">Repository</a> - <a href="https://twitter.com/decalage2">Updates on Twitter</a> <a href="https://github.com/decalage2/oletools/blob/master/cheatsheet/oletools_cheatsheet.pdf">Cheatsheet</a></p> |
| 23 | <p>Note: python-oletools is not related to OLETools published by BeCubed Software.</p> | 23 | <p>Note: python-oletools is not related to OLETools published by BeCubed Software.</p> |
| 24 | <h2 id="news">News</h2> | 24 | <h2 id="news">News</h2> |
| 25 | <ul> | 25 | <ul> |
| 26 | -<li><strong>2018-05-30 v0.53</strong>: | 26 | +<li><strong>2019-04-04 v0.54</strong>: |
| 27 | +<ul> | ||
| 28 | +<li>olevba, msodde: added support for encrypted MS Office files</li> | ||
| 29 | +<li>olevba: added detection and extraction of XLM/XLF Excel 4 macros (thanks to plugin_biff from Didier Stevens' oledump)</li> | ||
| 30 | +<li>olevba, mraptor: added detection of VBA running Excel 4 macros</li> | ||
| 31 | +<li>olevba: detect and display special characters such as backspace</li> | ||
| 32 | +<li>olevba: colorized output showing suspicious keywords in the VBA code</li> | ||
| 33 | +<li>olevba, mraptor: full Python 3 compatibility, no separate olevba3/mraptor3 anymore</li> | ||
| 34 | +<li>olevba: improved handling of code pages and unicode</li> | ||
| 35 | +<li>olevba: fixed a false-positive in VBA macro detection</li> | ||
| 36 | +<li>rtfobj: improved OLE Package handling, improved Equation object detection</li> | ||
| 37 | +<li>oleobj: added detection of external links to objects in OpenXML</li> | ||
| 38 | +<li>replaced third party packages by PyPI dependencies</li> | ||
| 39 | +</ul></li> | ||
| 40 | +<li>2018-05-30 v0.53: | ||
| 27 | <ul> | 41 | <ul> |
| 28 | <li>olevba and mraptor can now parse Word/PowerPoint 2007+ pure XML files (aka Flat OPC format)</li> | 42 | <li>olevba and mraptor can now parse Word/PowerPoint 2007+ pure XML files (aka Flat OPC format)</li> |
| 29 | <li>improved support for VBA forms in olevba (oleform)</li> | 43 | <li>improved support for VBA forms in olevba (oleform)</li> |
| @@ -66,7 +80,7 @@ | @@ -66,7 +80,7 @@ | ||
| 66 | <li><a href="https://github.com/decalage2/oletools/wiki/olemap">olemap</a>: to display a map of all the sectors in an OLE file.</li> | 80 | <li><a href="https://github.com/decalage2/oletools/wiki/olemap">olemap</a>: to display a map of all the sectors in an OLE file.</li> |
| 67 | </ul> | 81 | </ul> |
| 68 | <h2 id="projects-using-oletools">Projects using oletools:</h2> | 82 | <h2 id="projects-using-oletools">Projects using oletools:</h2> |
| 69 | -<p>oletools are used by a number of projects and online malware analysis services, including <a href="http://viper.li/">Viper</a>, <a href="https://remnux.org/">REMnux</a>, <a href="https://certsocietegenerale.github.io/fame/">FAME</a>, <a href="https://www.hybrid-analysis.com/">Hybrid-analysis.com</a>, <a href="https://www.document-analyzer.net/">Joe Sandbox</a>, <a href="https://sandbox.deepviz.com/">Deepviz</a>, <a href="https://github.com/lmco/laikaboss">Laika BOSS</a>, <a href="https://github.com/cuckoosandbox/cuckoo">Cuckoo Sandbox</a>, <a href="https://sandbox.anlyz.io/">Anlyz.io</a>, <a href="https://github.com/decalage2/ViperMonkey">ViperMonkey</a>, <a href="https://github.com/bontchev/pcodedmp">pcodedmp</a>, <a href="https://dridex.malwareconfig.com">dridex.malwareconfig.com</a>, <a href="https://github.com/countercept/snake">Snake</a>, <a href="https://github.com/cryps1s/DARKSURGEON">DARKSURGEON</a>, and probably <a href="https://www.virustotal.com">VirusTotal</a>. (Please <a href="(http://decalage.info/contact)">contact me</a> if you have or know a project using oletools)</p> | 83 | +<p>oletools are used by a number of projects and online malware analysis services, including <a href="http://viper.li/">Viper</a>, <a href="https://remnux.org/">REMnux</a>, <a href="https://github.com/fireeye/flare-vm">FLARE-VM</a>, <a href="https://certsocietegenerale.github.io/fame/">FAME</a>, <a href="https://www.hybrid-analysis.com/">Hybrid-analysis.com</a>, <a href="https://www.document-analyzer.net/">Joe Sandbox</a>, <a href="https://sandbox.deepviz.com/">Deepviz</a>, <a href="https://github.com/lmco/laikaboss">Laika BOSS</a>, <a href="https://github.com/cuckoosandbox/cuckoo">Cuckoo Sandbox</a>, <a href="https://sandbox.anlyz.io/">Anlyz.io</a>, <a href="https://github.com/decalage2/ViperMonkey">ViperMonkey</a>, <a href="https://github.com/bontchev/pcodedmp">pcodedmp</a>, <a href="https://dridex.malwareconfig.com">dridex.malwareconfig.com</a>, <a href="https://github.com/countercept/snake">Snake</a>, <a href="https://github.com/cryps1s/DARKSURGEON">DARKSURGEON</a>, <a href="https://github.com/ctxis/CAPE">CAPE</a>, <a href="https://www.cse-cst.gc.ca/en/assemblyline">AssemblyLine</a>, <a href="https://malshare.io">malshare.io</a>, <a href="https://www.adlice.com/download/mrf/">Malware Repository Framework (MRF)</a>, <a href="https://github.com/Tigzy/malware-repo">malware-repo</a>, <a href="https://github.com/MalwareCantFly/Vba2Graph">Vba2Graph</a>, <a href="https://github.com/target/strelka">Strelka</a>, <a href="https://stoq.punchcyber.com/">stoQ</a>, and probably <a href="https://www.virustotal.com">VirusTotal</a>. And quite a few <a href="https://github.com/search?q=oletools&type=Repositories">other projects on GitHub</a>. (Please <a href="(http://decalage.info/contact)">contact me</a> if you have or know a project using oletools)</p> |
| 70 | <h2 id="download-and-install">Download and Install:</h2> | 84 | <h2 id="download-and-install">Download and Install:</h2> |
| 71 | <p>The recommended way to download and install/update the <strong>latest stable release</strong> of oletools is to use <a href="https://pip.pypa.io/en/stable/installing/">pip</a>:</p> | 85 | <p>The recommended way to download and install/update the <strong>latest stable release</strong> of oletools is to use <a href="https://pip.pypa.io/en/stable/installing/">pip</a>:</p> |
| 72 | <ul> | 86 | <ul> |
| @@ -89,7 +103,7 @@ | @@ -89,7 +103,7 @@ | ||
| 89 | <p>The code is available in <a href="https://github.com/decalage2/oletools">a GitHub repository</a>. You may use it to submit enhancements using forks and pull requests.</p> | 103 | <p>The code is available in <a href="https://github.com/decalage2/oletools">a GitHub repository</a>. You may use it to submit enhancements using forks and pull requests.</p> |
| 90 | <h2 id="license">License</h2> | 104 | <h2 id="license">License</h2> |
| 91 | <p>This license applies to the python-oletools package, apart from the thirdparty folder which contains third-party files published with their own license.</p> | 105 | <p>This license applies to the python-oletools package, apart from the thirdparty folder which contains third-party files published with their own license.</p> |
| 92 | -<p>The python-oletools package is copyright (c) 2012-2018 Philippe Lagadec (http://www.decalage.info)</p> | 106 | +<p>The python-oletools package is copyright (c) 2012-2019 Philippe Lagadec (http://www.decalage.info)</p> |
| 93 | <p>All rights reserved.</p> | 107 | <p>All rights reserved.</p> |
| 94 | <p>Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:</p> | 108 | <p>Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:</p> |
| 95 | <ul> | 109 | <ul> |
oletools/README.rst
| 1 | python-oletools | 1 | python-oletools |
| 2 | =============== | 2 | =============== |
| 3 | 3 | ||
| 4 | -|PyPI| |Build Status| | 4 | +|PyPI| |Build Status| |Say Thanks!| |
| 5 | 5 | ||
| 6 | `oletools <http://www.decalage.info/python/oletools>`__ is a package of | 6 | `oletools <http://www.decalage.info/python/oletools>`__ is a package of |
| 7 | python tools to analyze `Microsoft OLE2 | 7 | python tools to analyze `Microsoft OLE2 |
| @@ -29,7 +29,25 @@ Software. | @@ -29,7 +29,25 @@ Software. | ||
| 29 | News | 29 | News |
| 30 | ---- | 30 | ---- |
| 31 | 31 | ||
| 32 | -- **2018-05-30 v0.53**: | 32 | +- **2019-04-04 v0.54**: |
| 33 | + | ||
| 34 | + - olevba, msodde: added support for encrypted MS Office files | ||
| 35 | + - olevba: added detection and extraction of XLM/XLF Excel 4 macros | ||
| 36 | + (thanks to plugin_biff from Didier Stevens' oledump) | ||
| 37 | + - olevba, mraptor: added detection of VBA running Excel 4 macros | ||
| 38 | + - olevba: detect and display special characters such as backspace | ||
| 39 | + - olevba: colorized output showing suspicious keywords in the VBA | ||
| 40 | + code | ||
| 41 | + - olevba, mraptor: full Python 3 compatibility, no separate | ||
| 42 | + olevba3/mraptor3 anymore | ||
| 43 | + - olevba: improved handling of code pages and unicode | ||
| 44 | + - olevba: fixed a false-positive in VBA macro detection | ||
| 45 | + - rtfobj: improved OLE Package handling, improved Equation object | ||
| 46 | + detection | ||
| 47 | + - oleobj: added detection of external links to objects in OpenXML | ||
| 48 | + - replaced third party packages by PyPI dependencies | ||
| 49 | + | ||
| 50 | +- 2018-05-30 v0.53: | ||
| 33 | 51 | ||
| 34 | - olevba and mraptor can now parse Word/PowerPoint 2007+ pure XML | 52 | - olevba and mraptor can now parse Word/PowerPoint 2007+ pure XML |
| 35 | files (aka Flat OPC format) | 53 | files (aka Flat OPC format) |
| @@ -115,6 +133,7 @@ Projects using oletools: | @@ -115,6 +133,7 @@ Projects using oletools: | ||
| 115 | oletools are used by a number of projects and online malware analysis | 133 | oletools are used by a number of projects and online malware analysis |
| 116 | services, including `Viper <http://viper.li/>`__, | 134 | services, including `Viper <http://viper.li/>`__, |
| 117 | `REMnux <https://remnux.org/>`__, | 135 | `REMnux <https://remnux.org/>`__, |
| 136 | +`FLARE-VM <https://github.com/fireeye/flare-vm>`__, | ||
| 118 | `FAME <https://certsocietegenerale.github.io/fame/>`__, | 137 | `FAME <https://certsocietegenerale.github.io/fame/>`__, |
| 119 | `Hybrid-analysis.com <https://www.hybrid-analysis.com/>`__, `Joe | 138 | `Hybrid-analysis.com <https://www.hybrid-analysis.com/>`__, `Joe |
| 120 | Sandbox <https://www.document-analyzer.net/>`__, | 139 | Sandbox <https://www.document-analyzer.net/>`__, |
| @@ -126,10 +145,20 @@ Sandbox <https://github.com/cuckoosandbox/cuckoo>`__, | @@ -126,10 +145,20 @@ Sandbox <https://github.com/cuckoosandbox/cuckoo>`__, | ||
| 126 | `pcodedmp <https://github.com/bontchev/pcodedmp>`__, | 145 | `pcodedmp <https://github.com/bontchev/pcodedmp>`__, |
| 127 | `dridex.malwareconfig.com <https://dridex.malwareconfig.com>`__, | 146 | `dridex.malwareconfig.com <https://dridex.malwareconfig.com>`__, |
| 128 | `Snake <https://github.com/countercept/snake>`__, | 147 | `Snake <https://github.com/countercept/snake>`__, |
| 129 | -`DARKSURGEON <https://github.com/cryps1s/DARKSURGEON>`__, and probably | ||
| 130 | -`VirusTotal <https://www.virustotal.com>`__. (Please `contact | ||
| 131 | -me <(http://decalage.info/contact)>`__ if you have or know a project | ||
| 132 | -using oletools) | 148 | +`DARKSURGEON <https://github.com/cryps1s/DARKSURGEON>`__, |
| 149 | +`CAPE <https://github.com/ctxis/CAPE>`__, | ||
| 150 | +`AssemblyLine <https://www.cse-cst.gc.ca/en/assemblyline>`__, | ||
| 151 | +`malshare.io <https://malshare.io>`__, `Malware Repository Framework | ||
| 152 | +(MRF) <https://www.adlice.com/download/mrf/>`__, | ||
| 153 | +`malware-repo <https://github.com/Tigzy/malware-repo>`__, | ||
| 154 | +`Vba2Graph <https://github.com/MalwareCantFly/Vba2Graph>`__, | ||
| 155 | +`Strelka <https://github.com/target/strelka>`__, | ||
| 156 | +`stoQ <https://stoq.punchcyber.com/>`__, and probably | ||
| 157 | +`VirusTotal <https://www.virustotal.com>`__. And quite a few `other | ||
| 158 | +projects on | ||
| 159 | +GitHub <https://github.com/search?q=oletools&type=Repositories>`__. | ||
| 160 | +(Please `contact me <(http://decalage.info/contact)>`__ if you have or | ||
| 161 | +know a project using oletools) | ||
| 133 | 162 | ||
| 134 | Download and Install: | 163 | Download and Install: |
| 135 | --------------------- | 164 | --------------------- |
| @@ -186,7 +215,7 @@ This license applies to the python-oletools package, apart from the | @@ -186,7 +215,7 @@ This license applies to the python-oletools package, apart from the | ||
| 186 | thirdparty folder which contains third-party files published with their | 215 | thirdparty folder which contains third-party files published with their |
| 187 | own license. | 216 | own license. |
| 188 | 217 | ||
| 189 | -The python-oletools package is copyright (c) 2012-2018 Philippe Lagadec | 218 | +The python-oletools package is copyright (c) 2012-2019 Philippe Lagadec |
| 190 | (http://www.decalage.info) | 219 | (http://www.decalage.info) |
| 191 | 220 | ||
| 192 | All rights reserved. | 221 | All rights reserved. |
| @@ -243,3 +272,5 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -243,3 +272,5 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 243 | :target: https://pypi.org/project/oletools/ | 272 | :target: https://pypi.org/project/oletools/ |
| 244 | .. |Build Status| image:: https://travis-ci.org/decalage2/oletools.svg?branch=master | 273 | .. |Build Status| image:: https://travis-ci.org/decalage2/oletools.svg?branch=master |
| 245 | :target: https://travis-ci.org/decalage2/oletools | 274 | :target: https://travis-ci.org/decalage2/oletools |
| 275 | +.. |Say Thanks!| image:: https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg | ||
| 276 | + :target: https://saythanks.io/to/decalage2 |
oletools/doc/Home.html
| @@ -16,7 +16,7 @@ | @@ -16,7 +16,7 @@ | ||
| 16 | <![endif]--> | 16 | <![endif]--> |
| 17 | </head> | 17 | </head> |
| 18 | <body> | 18 | <body> |
| 19 | -<h1 id="python-oletools-v0.53-documentation">python-oletools v0.53 documentation</h1> | 19 | +<h1 id="python-oletools-v0.54-documentation">python-oletools v0.54 documentation</h1> |
| 20 | <p>This is the home page of the documentation for python-oletools. The latest version can be found <a href="https://github.com/decalage2/oletools/wiki">online</a>, otherwise a copy is provided in the doc subfolder of the package.</p> | 20 | <p>This is the home page of the documentation for python-oletools. The latest version can be found <a href="https://github.com/decalage2/oletools/wiki">online</a>, otherwise a copy is provided in the doc subfolder of the package.</p> |
| 21 | <p><a href="http://www.decalage.info/python/oletools">python-oletools</a> is a package of python tools to analyze <a href="http://en.wikipedia.org/wiki/Compound_File_Binary_Format">Microsoft OLE2 files</a> (also called Structured Storage, Compound File Binary Format or Compound Document File Format), such as Microsoft Office documents or Outlook messages, mainly for malware analysis, forensics and debugging. It is based on the <a href="http://www.decalage.info/olefile">olefile</a> parser. See <a href="http://www.decalage.info/python/oletools" class="uri">http://www.decalage.info/python/oletools</a> for more info.</p> | 21 | <p><a href="http://www.decalage.info/python/oletools">python-oletools</a> is a package of python tools to analyze <a href="http://en.wikipedia.org/wiki/Compound_File_Binary_Format">Microsoft OLE2 files</a> (also called Structured Storage, Compound File Binary Format or Compound Document File Format), such as Microsoft Office documents or Outlook messages, mainly for malware analysis, forensics and debugging. It is based on the <a href="http://www.decalage.info/olefile">olefile</a> parser. See <a href="http://www.decalage.info/python/oletools" class="uri">http://www.decalage.info/python/oletools</a> for more info.</p> |
| 22 | <p><strong>Quick links:</strong> <a href="http://www.decalage.info/python/oletools">Home page</a> - <a href="https://github.com/decalage2/oletools/wiki/Install">Download/Install</a> - <a href="https://github.com/decalage2/oletools/wiki">Documentation</a> - <a href="https://github.com/decalage2/oletools/issues">Report Issues/Suggestions/Questions</a> - <a href="http://decalage.info/contact">Contact the Author</a> - <a href="https://github.com/decalage2/oletools">Repository</a> - <a href="https://twitter.com/decalage2">Updates on Twitter</a></p> | 22 | <p><strong>Quick links:</strong> <a href="http://www.decalage.info/python/oletools">Home page</a> - <a href="https://github.com/decalage2/oletools/wiki/Install">Download/Install</a> - <a href="https://github.com/decalage2/oletools/wiki">Documentation</a> - <a href="https://github.com/decalage2/oletools/issues">Report Issues/Suggestions/Questions</a> - <a href="http://decalage.info/contact">Contact the Author</a> - <a href="https://github.com/decalage2/oletools">Repository</a> - <a href="https://twitter.com/decalage2">Updates on Twitter</a></p> |
oletools/doc/Home.md
| 1 | -python-oletools v0.53 documentation | 1 | +python-oletools v0.54 documentation |
| 2 | =================================== | 2 | =================================== |
| 3 | 3 | ||
| 4 | This is the home page of the documentation for python-oletools. The latest version can be found | 4 | This is the home page of the documentation for python-oletools. The latest version can be found |
oletools/doc/Install.html
| @@ -16,28 +16,43 @@ | @@ -16,28 +16,43 @@ | ||
| 16 | <![endif]--> | 16 | <![endif]--> |
| 17 | </head> | 17 | </head> |
| 18 | <body> | 18 | <body> |
| 19 | -<h1 id="how-to-download-and-install-python-oletools">How to Download and Install python-oletools</h1> | 19 | +<h1 id="how-to-download-and-install-oletools">How to Download and Install oletools</h1> |
| 20 | <h2 id="pre-requisites">Pre-requisites</h2> | 20 | <h2 id="pre-requisites">Pre-requisites</h2> |
| 21 | -<p>The recommended Python version to run oletools is <strong>Python 2.7</strong>. Python 2.6 is also supported, but as it is not tested as often as 2.7, some features might not work as expected.</p> | ||
| 22 | -<p>Since oletools v0.50, thanks to contributions by <span class="citation" data-cites="Sebdraven">[@Sebdraven]</span>(https://twitter.com/Sebdraven), most tools can also run with <strong>Python 3.x</strong>. As this is quite new, please <a href="(https://github.com/decalage2/oletools/issues)">report any issue</a> you may encounter.</p> | 21 | +<p>The recommended Python version to run oletools is the latest <strong>Python 3.x</strong> (3.7 for now). Python 2.7 is still supported, but as it will become end of life in 2020 (see https://pythonclock.org/), it is highly recommended to switch to Python 3 now.</p> |
| 23 | <h2 id="recommended-way-to-downloadinstallupdate-oletools-pip">Recommended way to Download+Install/Update oletools: pip</h2> | 22 | <h2 id="recommended-way-to-downloadinstallupdate-oletools-pip">Recommended way to Download+Install/Update oletools: pip</h2> |
| 24 | <p>Pip is included with Python since version 2.7.9 and 3.4. If it is not installed on your system, either upgrade Python or see https://pip.pypa.io/en/stable/installing/</p> | 23 | <p>Pip is included with Python since version 2.7.9 and 3.4. If it is not installed on your system, either upgrade Python or see https://pip.pypa.io/en/stable/installing/</p> |
| 25 | <h3 id="linux-mac-osx-unix">Linux, Mac OSX, Unix</h3> | 24 | <h3 id="linux-mac-osx-unix">Linux, Mac OSX, Unix</h3> |
| 26 | <p>To download and install/update the latest release version of oletools, run the following command in a shell:</p> | 25 | <p>To download and install/update the latest release version of oletools, run the following command in a shell:</p> |
| 27 | <pre class="text"><code>sudo -H pip install -U oletools</code></pre> | 26 | <pre class="text"><code>sudo -H pip install -U oletools</code></pre> |
| 27 | +<p>Replace <code>pip</code> by <code>pip3</code> or <code>pip2</code> to install on a specific Python version.</p> | ||
| 28 | +<p><strong>New in v0.54:</strong> To enable the decryption of encrypted documents, you also need to install the msoffcrypto-tool package:</p> | ||
| 29 | +<pre class="text"><code>sudo -H pip install -U msoffcrypto-tool</code></pre> | ||
| 28 | <p><strong>Important</strong>: Since version 0.50, pip will automatically create convenient command-line scripts in /usr/local/bin to run all the oletools from any directory.</p> | 30 | <p><strong>Important</strong>: Since version 0.50, pip will automatically create convenient command-line scripts in /usr/local/bin to run all the oletools from any directory.</p> |
| 29 | <h3 id="windows">Windows</h3> | 31 | <h3 id="windows">Windows</h3> |
| 30 | <p>To download and install/update the latest release version of oletools, run the following command in a cmd window:</p> | 32 | <p>To download and install/update the latest release version of oletools, run the following command in a cmd window:</p> |
| 31 | <pre class="text"><code>pip install -U oletools</code></pre> | 33 | <pre class="text"><code>pip install -U oletools</code></pre> |
| 34 | +<p>Replace <code>pip</code> by <code>pip3</code> or <code>pip2</code> to install on a specific Python version.</p> | ||
| 35 | +<p><strong>Note</strong>: with Python 3, you may need to open a cmd window with Administrator privileges in order to run pip and install for all users. If that is not possible, you may also install only for the current user by adding the <code>--user</code> option:</p> | ||
| 36 | +<pre class="text"><code>pip3 install -U --user oletools</code></pre> | ||
| 37 | +<p><strong>New in v0.54:</strong> To enable the decryption of encrypted documents, you also need to install the msoffcrypto-tool package:</p> | ||
| 38 | +<pre class="text"><code>pip install -U msoffcrypto-tool</code></pre> | ||
| 32 | <p><strong>Important</strong>: Since version 0.50, pip will automatically create convenient command-line scripts to run all the oletools from any directory: olevba, mraptor, oleid, rtfobj, etc.</p> | 39 | <p><strong>Important</strong>: Since version 0.50, pip will automatically create convenient command-line scripts to run all the oletools from any directory: olevba, mraptor, oleid, rtfobj, etc.</p> |
| 33 | <h2 id="how-to-install-the-latest-development-version">How to install the latest development version</h2> | 40 | <h2 id="how-to-install-the-latest-development-version">How to install the latest development version</h2> |
| 34 | <p>If you want to benefit from the latest improvements in the development version, you may also use pip:</p> | 41 | <p>If you want to benefit from the latest improvements in the development version, you may also use pip:</p> |
| 35 | <h3 id="linux-mac-osx-unix-1">Linux, Mac OSX, Unix</h3> | 42 | <h3 id="linux-mac-osx-unix-1">Linux, Mac OSX, Unix</h3> |
| 36 | <pre class="text"><code>sudo -H pip install -U https://github.com/decalage2/oletools/archive/master.zip</code></pre> | 43 | <pre class="text"><code>sudo -H pip install -U https://github.com/decalage2/oletools/archive/master.zip</code></pre> |
| 44 | +<p>Replace <code>pip</code> by <code>pip3</code> or <code>pip2</code> to install on a specific Python version.</p> | ||
| 45 | +<p><strong>New in v0.54:</strong> To enable the decryption of encrypted documents, you also need to install the msoffcrypto-tool package:</p> | ||
| 46 | +<pre class="text"><code>sudo -H pip install -U msoffcrypto-tool</code></pre> | ||
| 37 | <h3 id="windows-1">Windows</h3> | 47 | <h3 id="windows-1">Windows</h3> |
| 38 | <pre class="text"><code>pip install -U https://github.com/decalage2/oletools/archive/master.zip</code></pre> | 48 | <pre class="text"><code>pip install -U https://github.com/decalage2/oletools/archive/master.zip</code></pre> |
| 49 | +<p>Replace <code>pip</code> by <code>pip3</code> or <code>pip2</code> to install on a specific Python version.</p> | ||
| 50 | +<p><strong>Note</strong>: with Python 3, you may need to open a cmd window with Administrator privileges in order to run pip and install for all users. If that is not possible, you may also install only for the current user by adding the <code>--user</code> option:</p> | ||
| 51 | +<pre class="text"><code>pip3 install -U --user https://github.com/decalage2/oletools/archive/master.zip</code></pre> | ||
| 52 | +<p><strong>New in v0.54:</strong> To enable the decryption of encrypted documents, you also need to install the msoffcrypto-tool package:</p> | ||
| 53 | +<pre class="text"><code>pip install -U msoffcrypto-tool</code></pre> | ||
| 39 | <h2 id="how-to-install-offline---computer-without-internet-access">How to install offline - Computer without Internet access</h2> | 54 | <h2 id="how-to-install-offline---computer-without-internet-access">How to install offline - Computer without Internet access</h2> |
| 40 | -<p>First, download the oletools archive on a computer with Internet access: * Latest stable version: from https://github.com/decalage2/oletools/releases * Development version: https://github.com/decalage2/oletools/archive/master.zip</p> | 55 | +<p>First, download the oletools archive on a computer with Internet access: * Latest stable version: from https://pypi.org/project/oletools/ or https://github.com/decalage2/oletools/releases * Development version: https://github.com/decalage2/oletools/archive/master.zip</p> |
| 41 | <p>Copy the archive file to the target computer.</p> | 56 | <p>Copy the archive file to the target computer.</p> |
| 42 | <p>On Linux, Mac OSX, Unix, run the following command using the filename of the archive that you downloaded:</p> | 57 | <p>On Linux, Mac OSX, Unix, run the following command using the filename of the archive that you downloaded:</p> |
| 43 | <pre class="text"><code>sudo -H pip install -U oletools.zip</code></pre> | 58 | <pre class="text"><code>sudo -H pip install -U oletools.zip</code></pre> |
oletools/doc/Install.md
| 1 | -How to Download and Install python-oletools | ||
| 2 | -=========================================== | 1 | +How to Download and Install oletools |
| 2 | +==================================== | ||
| 3 | 3 | ||
| 4 | Pre-requisites | 4 | Pre-requisites |
| 5 | -------------- | 5 | -------------- |
| 6 | 6 | ||
| 7 | -The recommended Python version to run oletools is **Python 2.7**. | ||
| 8 | -Python 2.6 is also supported, but as it is not tested as often as 2.7, some features | ||
| 9 | -might not work as expected. | ||
| 10 | - | ||
| 11 | -Since oletools v0.50, thanks to contributions by [@Sebdraven](https://twitter.com/Sebdraven), | ||
| 12 | -most tools can also run with **Python 3.x**. As this is quite new, please | ||
| 13 | -[report any issue]((https://github.com/decalage2/oletools/issues)) you may encounter. | ||
| 14 | - | ||
| 15 | - | 7 | +The recommended Python version to run oletools is the latest **Python 3.x** (3.7 for now). |
| 8 | +Python 2.7 is still supported, but as it will become end of life in 2020 (see https://pythonclock.org/), it is highly | ||
| 9 | +recommended to switch to Python 3 now. | ||
| 16 | 10 | ||
| 17 | Recommended way to Download+Install/Update oletools: pip | 11 | Recommended way to Download+Install/Update oletools: pip |
| 18 | -------------------------------------------------------- | 12 | -------------------------------------------------------- |
| @@ -29,6 +23,14 @@ run the following command in a shell: | @@ -29,6 +23,14 @@ run the following command in a shell: | ||
| 29 | sudo -H pip install -U oletools | 23 | sudo -H pip install -U oletools |
| 30 | ``` | 24 | ``` |
| 31 | 25 | ||
| 26 | +Replace `pip` by `pip3` or `pip2` to install on a specific Python version. | ||
| 27 | + | ||
| 28 | +**New in v0.54:** To enable the decryption of encrypted documents, you also need to install the msoffcrypto-tool package: | ||
| 29 | +```text | ||
| 30 | +sudo -H pip install -U msoffcrypto-tool | ||
| 31 | +``` | ||
| 32 | + | ||
| 33 | + | ||
| 32 | **Important**: Since version 0.50, pip will automatically create convenient command-line scripts | 34 | **Important**: Since version 0.50, pip will automatically create convenient command-line scripts |
| 33 | in /usr/local/bin to run all the oletools from any directory. | 35 | in /usr/local/bin to run all the oletools from any directory. |
| 34 | 36 | ||
| @@ -41,6 +43,21 @@ run the following command in a cmd window: | @@ -41,6 +43,21 @@ run the following command in a cmd window: | ||
| 41 | pip install -U oletools | 43 | pip install -U oletools |
| 42 | ``` | 44 | ``` |
| 43 | 45 | ||
| 46 | +Replace `pip` by `pip3` or `pip2` to install on a specific Python version. | ||
| 47 | + | ||
| 48 | +**Note**: with Python 3, you may need to open a cmd window with Administrator privileges in order to run pip | ||
| 49 | +and install for all users. If that is not possible, you may also install only for the current user | ||
| 50 | +by adding the `--user` option: | ||
| 51 | + | ||
| 52 | +```text | ||
| 53 | +pip3 install -U --user oletools | ||
| 54 | +``` | ||
| 55 | + | ||
| 56 | +**New in v0.54:** To enable the decryption of encrypted documents, you also need to install the msoffcrypto-tool package: | ||
| 57 | +```text | ||
| 58 | +pip install -U msoffcrypto-tool | ||
| 59 | +``` | ||
| 60 | + | ||
| 44 | **Important**: Since version 0.50, pip will automatically create convenient command-line scripts | 61 | **Important**: Since version 0.50, pip will automatically create convenient command-line scripts |
| 45 | to run all the oletools from any directory: olevba, mraptor, oleid, rtfobj, etc. | 62 | to run all the oletools from any directory: olevba, mraptor, oleid, rtfobj, etc. |
| 46 | 63 | ||
| @@ -57,17 +74,40 @@ you may also use pip: | @@ -57,17 +74,40 @@ you may also use pip: | ||
| 57 | sudo -H pip install -U https://github.com/decalage2/oletools/archive/master.zip | 74 | sudo -H pip install -U https://github.com/decalage2/oletools/archive/master.zip |
| 58 | ``` | 75 | ``` |
| 59 | 76 | ||
| 77 | +Replace `pip` by `pip3` or `pip2` to install on a specific Python version. | ||
| 78 | + | ||
| 79 | +**New in v0.54:** To enable the decryption of encrypted documents, you also need to install the msoffcrypto-tool package: | ||
| 80 | +```text | ||
| 81 | +sudo -H pip install -U msoffcrypto-tool | ||
| 82 | +``` | ||
| 83 | + | ||
| 60 | ### Windows | 84 | ### Windows |
| 61 | 85 | ||
| 62 | ```text | 86 | ```text |
| 63 | pip install -U https://github.com/decalage2/oletools/archive/master.zip | 87 | pip install -U https://github.com/decalage2/oletools/archive/master.zip |
| 64 | ``` | 88 | ``` |
| 65 | 89 | ||
| 90 | +Replace `pip` by `pip3` or `pip2` to install on a specific Python version. | ||
| 91 | + | ||
| 92 | +**Note**: with Python 3, you may need to open a cmd window with Administrator privileges in order to run pip | ||
| 93 | +and install for all users. If that is not possible, you may also install only for the current user | ||
| 94 | +by adding the `--user` option: | ||
| 95 | + | ||
| 96 | +```text | ||
| 97 | +pip3 install -U --user https://github.com/decalage2/oletools/archive/master.zip | ||
| 98 | +``` | ||
| 99 | + | ||
| 100 | +**New in v0.54:** To enable the decryption of encrypted documents, you also need to install the msoffcrypto-tool package: | ||
| 101 | +```text | ||
| 102 | +pip install -U msoffcrypto-tool | ||
| 103 | +``` | ||
| 104 | + | ||
| 105 | + | ||
| 66 | How to install offline - Computer without Internet access | 106 | How to install offline - Computer without Internet access |
| 67 | --------------------------------------------------------- | 107 | --------------------------------------------------------- |
| 68 | 108 | ||
| 69 | First, download the oletools archive on a computer with Internet access: | 109 | First, download the oletools archive on a computer with Internet access: |
| 70 | -* Latest stable version: from https://github.com/decalage2/oletools/releases | 110 | +* Latest stable version: from https://pypi.org/project/oletools/ or https://github.com/decalage2/oletools/releases |
| 71 | * Development version: https://github.com/decalage2/oletools/archive/master.zip | 111 | * Development version: https://github.com/decalage2/oletools/archive/master.zip |
| 72 | 112 | ||
| 73 | Copy the archive file to the target computer. | 113 | Copy the archive file to the target computer. |
oletools/doc/License.html
| @@ -18,7 +18,7 @@ | @@ -18,7 +18,7 @@ | ||
| 18 | <body> | 18 | <body> |
| 19 | <h1 id="license-for-python-oletools">License for python-oletools</h1> | 19 | <h1 id="license-for-python-oletools">License for python-oletools</h1> |
| 20 | <p>This license applies to the <a href="http://www.decalage.info/python/oletools">python-oletools</a> package, apart from the thirdparty folder which contains third-party files published with their own license.</p> | 20 | <p>This license applies to the <a href="http://www.decalage.info/python/oletools">python-oletools</a> package, apart from the thirdparty folder which contains third-party files published with their own license.</p> |
| 21 | -<p>The python-oletools package is copyright (c) 2012-2018 Philippe Lagadec (<a href="http://www.decalage.info" class="uri">http://www.decalage.info</a>)</p> | 21 | +<p>The python-oletools package is copyright (c) 2012-2019 Philippe Lagadec (<a href="http://www.decalage.info" class="uri">http://www.decalage.info</a>)</p> |
| 22 | <p>All rights reserved.</p> | 22 | <p>All rights reserved.</p> |
| 23 | <p>Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:</p> | 23 | <p>Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:</p> |
| 24 | <ul> | 24 | <ul> |
oletools/doc/License.md
| @@ -4,7 +4,7 @@ License for python-oletools | @@ -4,7 +4,7 @@ License for python-oletools | ||
| 4 | This license applies to the [python-oletools](http://www.decalage.info/python/oletools) package, apart from the | 4 | This license applies to the [python-oletools](http://www.decalage.info/python/oletools) package, apart from the |
| 5 | thirdparty folder which contains third-party files published with their own license. | 5 | thirdparty folder which contains third-party files published with their own license. |
| 6 | 6 | ||
| 7 | -The python-oletools package is copyright (c) 2012-2018 Philippe Lagadec ([http://www.decalage.info](http://www.decalage.info)) | 7 | +The python-oletools package is copyright (c) 2012-2019 Philippe Lagadec ([http://www.decalage.info](http://www.decalage.info)) |
| 8 | 8 | ||
| 9 | All rights reserved. | 9 | All rights reserved. |
| 10 | 10 |
oletools/doc/mraptor.html
| @@ -24,7 +24,7 @@ | @@ -24,7 +24,7 @@ | ||
| 24 | <p>mraptor can be used either as a command-line tool, or as a python module from your own applications.</p> | 24 | <p>mraptor can be used either as a command-line tool, or as a python module from your own applications.</p> |
| 25 | <p>It is part of the <a href="http://www.decalage.info/python/oletools">python-oletools</a> package.</p> | 25 | <p>It is part of the <a href="http://www.decalage.info/python/oletools">python-oletools</a> package.</p> |
| 26 | <h2 id="usage">Usage</h2> | 26 | <h2 id="usage">Usage</h2> |
| 27 | -<pre class="text"><code>Usage: mraptor.py [options] <filename> [filename2 ...] | 27 | +<pre class="text"><code>Usage: mraptor [options] <filename> [filename2 ...] |
| 28 | 28 | ||
| 29 | Options: | 29 | Options: |
| 30 | -h, --help show this help message and exit | 30 | -h, --help show this help message and exit |
| @@ -49,15 +49,15 @@ An exit code is returned based on the analysis result: | @@ -49,15 +49,15 @@ An exit code is returned based on the analysis result: | ||
| 49 | - 20: SUSPICIOUS</code></pre> | 49 | - 20: SUSPICIOUS</code></pre> |
| 50 | <h3 id="examples">Examples</h3> | 50 | <h3 id="examples">Examples</h3> |
| 51 | <p>Scan a single file:</p> | 51 | <p>Scan a single file:</p> |
| 52 | -<pre class="text"><code>mraptor.py file.doc</code></pre> | 52 | +<pre class="text"><code>mraptor file.doc</code></pre> |
| 53 | <p>Scan a single file, stored in a Zip archive with password โinfectedโ:</p> | 53 | <p>Scan a single file, stored in a Zip archive with password โinfectedโ:</p> |
| 54 | -<pre class="text"><code>mraptor.py malicious_file.xls.zip -z infected</code></pre> | 54 | +<pre class="text"><code>mraptor malicious_file.xls.zip -z infected</code></pre> |
| 55 | <p>Scan a collection of files stored in a folder:</p> | 55 | <p>Scan a collection of files stored in a folder:</p> |
| 56 | -<pre class="text"><code>mraptor.py "MalwareZoo/VBA/*"</code></pre> | 56 | +<pre class="text"><code>mraptor "MalwareZoo/VBA/*"</code></pre> |
| 57 | <p><strong>Important</strong>: on Linux/MacOSX, always add double quotes around a file name when you use wildcards such as <code>*</code> and <code>?</code>. Otherwise, the shell may replace the argument with the actual list of files matching the wildcards before starting the script.</p> | 57 | <p><strong>Important</strong>: on Linux/MacOSX, always add double quotes around a file name when you use wildcards such as <code>*</code> and <code>?</code>. Otherwise, the shell may replace the argument with the actual list of files matching the wildcards before starting the script.</p> |
| 58 | <p><img src="mraptor1.png" /></p> | 58 | <p><img src="mraptor1.png" /></p> |
| 59 | <h2 id="python-3-support---mraptor3">Python 3 support - mraptor3</h2> | 59 | <h2 id="python-3-support---mraptor3">Python 3 support - mraptor3</h2> |
| 60 | -<p>As of v0.50, mraptor has been ported to Python 3 thanks to <span class="citation" data-cites="sebdraven">@sebdraven</span>. However, the differences between Python 2 and 3 are significant and for now there is a separate version of mraptor named mraptor3 to be used with Python 3.</p> | 60 | +<p>Since v0.54, mraptor is fully compatible with both Python 2 and 3. There is no need to use mraptor3 anymore, however it is still present for backward compatibility.</p> |
| 61 | <hr /> | 61 | <hr /> |
| 62 | <h2 id="how-to-use-mraptor-in-python-applications">How to use mraptor in Python applications</h2> | 62 | <h2 id="how-to-use-mraptor-in-python-applications">How to use mraptor in Python applications</h2> |
| 63 | <p>TODO</p> | 63 | <p>TODO</p> |
oletools/doc/mraptor.md
| @@ -24,7 +24,7 @@ It is part of the [python-oletools](http://www.decalage.info/python/oletools) pa | @@ -24,7 +24,7 @@ It is part of the [python-oletools](http://www.decalage.info/python/oletools) pa | ||
| 24 | ## Usage | 24 | ## Usage |
| 25 | 25 | ||
| 26 | ```text | 26 | ```text |
| 27 | -Usage: mraptor.py [options] <filename> [filename2 ...] | 27 | +Usage: mraptor [options] <filename> [filename2 ...] |
| 28 | 28 | ||
| 29 | Options: | 29 | Options: |
| 30 | -h, --help show this help message and exit | 30 | -h, --help show this help message and exit |
| @@ -54,19 +54,19 @@ An exit code is returned based on the analysis result: | @@ -54,19 +54,19 @@ An exit code is returned based on the analysis result: | ||
| 54 | Scan a single file: | 54 | Scan a single file: |
| 55 | 55 | ||
| 56 | ```text | 56 | ```text |
| 57 | -mraptor.py file.doc | 57 | +mraptor file.doc |
| 58 | ``` | 58 | ``` |
| 59 | 59 | ||
| 60 | Scan a single file, stored in a Zip archive with password "infected": | 60 | Scan a single file, stored in a Zip archive with password "infected": |
| 61 | 61 | ||
| 62 | ```text | 62 | ```text |
| 63 | -mraptor.py malicious_file.xls.zip -z infected | 63 | +mraptor malicious_file.xls.zip -z infected |
| 64 | ``` | 64 | ``` |
| 65 | 65 | ||
| 66 | Scan a collection of files stored in a folder: | 66 | Scan a collection of files stored in a folder: |
| 67 | 67 | ||
| 68 | ```text | 68 | ```text |
| 69 | -mraptor.py "MalwareZoo/VBA/*" | 69 | +mraptor "MalwareZoo/VBA/*" |
| 70 | ``` | 70 | ``` |
| 71 | 71 | ||
| 72 | **Important**: on Linux/MacOSX, always add double quotes around a file name when you use | 72 | **Important**: on Linux/MacOSX, always add double quotes around a file name when you use |
| @@ -77,10 +77,8 @@ list of files matching the wildcards before starting the script. | @@ -77,10 +77,8 @@ list of files matching the wildcards before starting the script. | ||
| 77 | 77 | ||
| 78 | ## Python 3 support - mraptor3 | 78 | ## Python 3 support - mraptor3 |
| 79 | 79 | ||
| 80 | -As of v0.50, mraptor has been ported to Python 3 thanks to @sebdraven. | ||
| 81 | -However, the differences between Python 2 and 3 are significant and for now | ||
| 82 | -there is a separate version of mraptor named mraptor3 to be used with | ||
| 83 | -Python 3. | 80 | +Since v0.54, mraptor is fully compatible with both Python 2 and 3. |
| 81 | +There is no need to use mraptor3 anymore, however it is still present for backward compatibility. | ||
| 84 | 82 | ||
| 85 | 83 | ||
| 86 | -------------------------------------------------------------------------- | 84 | -------------------------------------------------------------------------- |
oletools/doc/olebrowse.html
| @@ -26,7 +26,7 @@ | @@ -26,7 +26,7 @@ | ||
| 26 | <p>And for Python 3:</p> | 26 | <p>And for Python 3:</p> |
| 27 | <pre><code>sudo apt-get install python3-tk</code></pre> | 27 | <pre><code>sudo apt-get install python3-tk</code></pre> |
| 28 | <h2 id="usage">Usage</h2> | 28 | <h2 id="usage">Usage</h2> |
| 29 | -<pre><code>olebrowse.py [file]</code></pre> | 29 | +<pre><code>olebrowse [file]</code></pre> |
| 30 | <p>If you provide a file it will be opened, else a dialog will allow you to browse folders to open a file. Then if it is a valid OLE file, the list of data streams will be displayed. You can select a stream, and then either view its content in a builtin hexadecimal viewer, or save it to a file for further analysis.</p> | 30 | <p>If you provide a file it will be opened, else a dialog will allow you to browse folders to open a file. Then if it is a valid OLE file, the list of data streams will be displayed. You can select a stream, and then either view its content in a builtin hexadecimal viewer, or save it to a file for further analysis.</p> |
| 31 | <h2 id="screenshots">Screenshots</h2> | 31 | <h2 id="screenshots">Screenshots</h2> |
| 32 | <p>Main menu, showing all streams in the OLE file:</p> | 32 | <p>Main menu, showing all streams in the OLE file:</p> |
oletools/doc/olebrowse.md
| @@ -30,9 +30,9 @@ sudo apt-get install python3-tk | @@ -30,9 +30,9 @@ sudo apt-get install python3-tk | ||
| 30 | 30 | ||
| 31 | Usage | 31 | Usage |
| 32 | ----- | 32 | ----- |
| 33 | - | ||
| 34 | - olebrowse.py [file] | ||
| 35 | - | 33 | +``` |
| 34 | +olebrowse [file] | ||
| 35 | +``` | ||
| 36 | If you provide a file it will be opened, else a dialog will allow you to browse | 36 | If you provide a file it will be opened, else a dialog will allow you to browse |
| 37 | folders to open a file. Then if it is a valid OLE file, the list of data streams | 37 | folders to open a file. Then if it is a valid OLE file, the list of data streams |
| 38 | will be displayed. You can select a stream, and then either view its content | 38 | will be displayed. You can select a stream, and then either view its content |
oletools/doc/oledir.html
| @@ -21,10 +21,21 @@ | @@ -21,10 +21,21 @@ | ||
| 21 | <p>It can be used either as a command-line tool, or as a python module from your own applications.</p> | 21 | <p>It can be used either as a command-line tool, or as a python module from your own applications.</p> |
| 22 | <p>It is part of the <a href="http://www.decalage.info/python/oletools">python-oletools</a> package.</p> | 22 | <p>It is part of the <a href="http://www.decalage.info/python/oletools">python-oletools</a> package.</p> |
| 23 | <h2 id="usage">Usage</h2> | 23 | <h2 id="usage">Usage</h2> |
| 24 | -<pre class="text"><code>Usage: oledir.py <filename></code></pre> | 24 | +<pre class="text"><code>Usage: oledir [options] <filename> [filename2 ...] |
| 25 | + | ||
| 26 | +Options: | ||
| 27 | + -h, --help show this help message and exit | ||
| 28 | + -r find files recursively in subdirectories. | ||
| 29 | + -z ZIP_PASSWORD, --zip=ZIP_PASSWORD | ||
| 30 | + if the file is a zip archive, open all files from it, | ||
| 31 | + using the provided password (requires Python 2.6+) | ||
| 32 | + -f ZIP_FNAME, --zipfname=ZIP_FNAME | ||
| 33 | + if the file is a zip archive, file(s) to be opened | ||
| 34 | + within the zip. Wildcards * and ? are supported. | ||
| 35 | + (default:*)</code></pre> | ||
| 25 | <h3 id="examples">Examples</h3> | 36 | <h3 id="examples">Examples</h3> |
| 26 | <p>Scan a single file:</p> | 37 | <p>Scan a single file:</p> |
| 27 | -<pre class="text"><code>oledir.py file.doc</code></pre> | 38 | +<pre class="text"><code>oledir file.doc</code></pre> |
| 28 | <p><img src="oledir.png" /></p> | 39 | <p><img src="oledir.png" /></p> |
| 29 | <hr /> | 40 | <hr /> |
| 30 | <h2 id="how-to-use-oledir-in-python-applications">How to use oledir in Python applications</h2> | 41 | <h2 id="how-to-use-oledir-in-python-applications">How to use oledir in Python applications</h2> |
oletools/doc/oledir.md
| @@ -11,7 +11,18 @@ It is part of the [python-oletools](http://www.decalage.info/python/oletools) pa | @@ -11,7 +11,18 @@ It is part of the [python-oletools](http://www.decalage.info/python/oletools) pa | ||
| 11 | ## Usage | 11 | ## Usage |
| 12 | 12 | ||
| 13 | ```text | 13 | ```text |
| 14 | -Usage: oledir.py <filename> | 14 | +Usage: oledir [options] <filename> [filename2 ...] |
| 15 | + | ||
| 16 | +Options: | ||
| 17 | + -h, --help show this help message and exit | ||
| 18 | + -r find files recursively in subdirectories. | ||
| 19 | + -z ZIP_PASSWORD, --zip=ZIP_PASSWORD | ||
| 20 | + if the file is a zip archive, open all files from it, | ||
| 21 | + using the provided password (requires Python 2.6+) | ||
| 22 | + -f ZIP_FNAME, --zipfname=ZIP_FNAME | ||
| 23 | + if the file is a zip archive, file(s) to be opened | ||
| 24 | + within the zip. Wildcards * and ? are supported. | ||
| 25 | + (default:*) | ||
| 15 | ``` | 26 | ``` |
| 16 | 27 | ||
| 17 | ### Examples | 28 | ### Examples |
| @@ -19,7 +30,7 @@ Usage: oledir.py <filename> | @@ -19,7 +30,7 @@ Usage: oledir.py <filename> | ||
| 19 | Scan a single file: | 30 | Scan a single file: |
| 20 | 31 | ||
| 21 | ```text | 32 | ```text |
| 22 | -oledir.py file.doc | 33 | +oledir file.doc |
| 23 | ``` | 34 | ``` |
| 24 | 35 | ||
| 25 |  | 36 |  |
oletools/doc/oleid.html
| @@ -107,10 +107,10 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni | @@ -107,10 +107,10 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni | ||
| 107 | <li>CSV output</li> | 107 | <li>CSV output</li> |
| 108 | </ul> | 108 | </ul> |
| 109 | <h2 id="usage">Usage</h2> | 109 | <h2 id="usage">Usage</h2> |
| 110 | -<pre class="text"><code>oleid.py <file></code></pre> | 110 | +<pre class="text"><code>oleid <file></code></pre> |
| 111 | <h3 id="example">Example</h3> | 111 | <h3 id="example">Example</h3> |
| 112 | <p>Analyzing a Word document containing a Flash object and VBA macros:</p> | 112 | <p>Analyzing a Word document containing a Flash object and VBA macros:</p> |
| 113 | -<pre class="text"><code>C:\oletools>oleid.py word_flash_vba.doc | 113 | +<pre class="text"><code>C:\oletools>oleid word_flash_vba.doc |
| 114 | 114 | ||
| 115 | Filename: word_flash_vba.doc | 115 | Filename: word_flash_vba.doc |
| 116 | +-------------------------------+-----------------------+ | 116 | +-------------------------------+-----------------------+ |
oletools/doc/oleid.md
| @@ -32,7 +32,7 @@ Planned improvements: | @@ -32,7 +32,7 @@ Planned improvements: | ||
| 32 | ## Usage | 32 | ## Usage |
| 33 | 33 | ||
| 34 | ```text | 34 | ```text |
| 35 | -oleid.py <file> | 35 | +oleid <file> |
| 36 | ``` | 36 | ``` |
| 37 | 37 | ||
| 38 | ### Example | 38 | ### Example |
| @@ -40,7 +40,7 @@ oleid.py <file> | @@ -40,7 +40,7 @@ oleid.py <file> | ||
| 40 | Analyzing a Word document containing a Flash object and VBA macros: | 40 | Analyzing a Word document containing a Flash object and VBA macros: |
| 41 | 41 | ||
| 42 | ```text | 42 | ```text |
| 43 | -C:\oletools>oleid.py word_flash_vba.doc | 43 | +C:\oletools>oleid word_flash_vba.doc |
| 44 | 44 | ||
| 45 | Filename: word_flash_vba.doc | 45 | Filename: word_flash_vba.doc |
| 46 | +-------------------------------+-----------------------+ | 46 | +-------------------------------+-----------------------+ |
oletools/doc/olemap.html
| @@ -21,10 +21,10 @@ | @@ -21,10 +21,10 @@ | ||
| 21 | <p>It can be used either as a command-line tool, or as a python module from your own applications.</p> | 21 | <p>It can be used either as a command-line tool, or as a python module from your own applications.</p> |
| 22 | <p>It is part of the <a href="http://www.decalage.info/python/oletools">python-oletools</a> package.</p> | 22 | <p>It is part of the <a href="http://www.decalage.info/python/oletools">python-oletools</a> package.</p> |
| 23 | <h2 id="usage">Usage</h2> | 23 | <h2 id="usage">Usage</h2> |
| 24 | -<pre class="text"><code>Usage: olemap.py <filename></code></pre> | 24 | +<pre class="text"><code>Usage: olemap <filename></code></pre> |
| 25 | <h3 id="examples">Examples</h3> | 25 | <h3 id="examples">Examples</h3> |
| 26 | <p>Scan a single file:</p> | 26 | <p>Scan a single file:</p> |
| 27 | -<pre class="text"><code>olemap.py file.doc</code></pre> | 27 | +<pre class="text"><code>olemap file.doc</code></pre> |
| 28 | <p><img src="olemap1.png" /></p> | 28 | <p><img src="olemap1.png" /></p> |
| 29 | <p><img src="olemap2.png" /></p> | 29 | <p><img src="olemap2.png" /></p> |
| 30 | <hr /> | 30 | <hr /> |
oletools/doc/olemap.md
| @@ -10,7 +10,7 @@ It is part of the [python-oletools](http://www.decalage.info/python/oletools) pa | @@ -10,7 +10,7 @@ It is part of the [python-oletools](http://www.decalage.info/python/oletools) pa | ||
| 10 | ## Usage | 10 | ## Usage |
| 11 | 11 | ||
| 12 | ```text | 12 | ```text |
| 13 | -Usage: olemap.py <filename> | 13 | +Usage: olemap <filename> |
| 14 | ``` | 14 | ``` |
| 15 | 15 | ||
| 16 | ### Examples | 16 | ### Examples |
| @@ -18,7 +18,7 @@ Usage: olemap.py <filename> | @@ -18,7 +18,7 @@ Usage: olemap.py <filename> | ||
| 18 | Scan a single file: | 18 | Scan a single file: |
| 19 | 19 | ||
| 20 | ```text | 20 | ```text |
| 21 | -olemap.py file.doc | 21 | +olemap file.doc |
| 22 | ``` | 22 | ``` |
| 23 | 23 | ||
| 24 |  | 24 |  |
oletools/doc/olemeta.html
| @@ -20,7 +20,7 @@ | @@ -20,7 +20,7 @@ | ||
| 20 | <p>olemeta is a script to parse OLE files such as MS Office documents (e.g.ย Word, Excel), to extract all standard properties present in the OLE file.</p> | 20 | <p>olemeta is a script to parse OLE files such as MS Office documents (e.g.ย Word, Excel), to extract all standard properties present in the OLE file.</p> |
| 21 | <p>It is part of the <a href="http://www.decalage.info/python/oletools">python-oletools</a> package.</p> | 21 | <p>It is part of the <a href="http://www.decalage.info/python/oletools">python-oletools</a> package.</p> |
| 22 | <h2 id="usage">Usage</h2> | 22 | <h2 id="usage">Usage</h2> |
| 23 | -<pre class="text"><code>olemeta.py <file></code></pre> | 23 | +<pre class="text"><code>olemeta <file></code></pre> |
| 24 | <h3 id="example">Example</h3> | 24 | <h3 id="example">Example</h3> |
| 25 | <p><img src="olemeta1.png" /></p> | 25 | <p><img src="olemeta1.png" /></p> |
| 26 | <h2 id="how-to-use-olemeta-in-python-applications">How to use olemeta in Python applications</h2> | 26 | <h2 id="how-to-use-olemeta-in-python-applications">How to use olemeta in Python applications</h2> |
oletools/doc/olemeta.md
| @@ -9,7 +9,7 @@ It is part of the [python-oletools](http://www.decalage.info/python/oletools) pa | @@ -9,7 +9,7 @@ It is part of the [python-oletools](http://www.decalage.info/python/oletools) pa | ||
| 9 | ## Usage | 9 | ## Usage |
| 10 | 10 | ||
| 11 | ```text | 11 | ```text |
| 12 | -olemeta.py <file> | 12 | +olemeta <file> |
| 13 | ``` | 13 | ``` |
| 14 | 14 | ||
| 15 | ### Example | 15 | ### Example |
oletools/doc/oletimes.html
| @@ -20,10 +20,10 @@ | @@ -20,10 +20,10 @@ | ||
| 20 | <p>oletimes is a script to parse OLE files such as MS Office documents (e.g.ย Word, Excel), to extract creation and modification times of all streams and storages in the OLE file.</p> | 20 | <p>oletimes is a script to parse OLE files such as MS Office documents (e.g.ย Word, Excel), to extract creation and modification times of all streams and storages in the OLE file.</p> |
| 21 | <p>It is part of the <a href="http://www.decalage.info/python/oletools">python-oletools</a> package.</p> | 21 | <p>It is part of the <a href="http://www.decalage.info/python/oletools">python-oletools</a> package.</p> |
| 22 | <h2 id="usage">Usage</h2> | 22 | <h2 id="usage">Usage</h2> |
| 23 | -<pre class="text"><code>oletimes.py <file></code></pre> | 23 | +<pre class="text"><code>oletimes <file></code></pre> |
| 24 | <h3 id="example">Example</h3> | 24 | <h3 id="example">Example</h3> |
| 25 | <p>Checking the malware sample <a href="https://malwr.com/analysis/M2I4YWRhM2IwY2QwNDljN2E3ZWFjYTg3ODk4NmZhYmE/">DIAN_caso-5415.doc</a>:</p> | 25 | <p>Checking the malware sample <a href="https://malwr.com/analysis/M2I4YWRhM2IwY2QwNDljN2E3ZWFjYTg3ODk4NmZhYmE/">DIAN_caso-5415.doc</a>:</p> |
| 26 | -<pre class="text"><code>>oletimes.py DIAN_caso-5415.doc | 26 | +<pre class="text"><code>>oletimes DIAN_caso-5415.doc |
| 27 | 27 | ||
| 28 | +----------------------------+---------------------+---------------------+ | 28 | +----------------------------+---------------------+---------------------+ |
| 29 | | Stream/Storage name | Modification Time | Creation Time | | 29 | | Stream/Storage name | Modification Time | Creation Time | |
oletools/doc/oletimes.md
| @@ -10,7 +10,7 @@ It is part of the [python-oletools](http://www.decalage.info/python/oletools) pa | @@ -10,7 +10,7 @@ It is part of the [python-oletools](http://www.decalage.info/python/oletools) pa | ||
| 10 | ## Usage | 10 | ## Usage |
| 11 | 11 | ||
| 12 | ```text | 12 | ```text |
| 13 | -oletimes.py <file> | 13 | +oletimes <file> |
| 14 | ``` | 14 | ``` |
| 15 | 15 | ||
| 16 | ### Example | 16 | ### Example |
| @@ -18,7 +18,7 @@ oletimes.py <file> | @@ -18,7 +18,7 @@ oletimes.py <file> | ||
| 18 | Checking the malware sample [DIAN_caso-5415.doc](https://malwr.com/analysis/M2I4YWRhM2IwY2QwNDljN2E3ZWFjYTg3ODk4NmZhYmE/): | 18 | Checking the malware sample [DIAN_caso-5415.doc](https://malwr.com/analysis/M2I4YWRhM2IwY2QwNDljN2E3ZWFjYTg3ODk4NmZhYmE/): |
| 19 | 19 | ||
| 20 | ```text | 20 | ```text |
| 21 | ->oletimes.py DIAN_caso-5415.doc | 21 | +>oletimes DIAN_caso-5415.doc |
| 22 | 22 | ||
| 23 | +----------------------------+---------------------+---------------------+ | 23 | +----------------------------+---------------------+---------------------+ |
| 24 | | Stream/Storage name | Modification Time | Creation Time | | 24 | | Stream/Storage name | Modification Time | Creation Time | |
oletools/doc/olevba.html
| @@ -127,56 +127,65 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni | @@ -127,56 +127,65 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni | ||
| 127 | <li>olevba scans the macro source code and the deobfuscated strings to find suspicious keywords, auto-executable macros and potential IOCs (URLs, IP addresses, e-mail addresses, executable filenames, etc).</li> | 127 | <li>olevba scans the macro source code and the deobfuscated strings to find suspicious keywords, auto-executable macros and potential IOCs (URLs, IP addresses, e-mail addresses, executable filenames, etc).</li> |
| 128 | </ol> | 128 | </ol> |
| 129 | <h2 id="usage">Usage</h2> | 129 | <h2 id="usage">Usage</h2> |
| 130 | -<pre class="text"><code>Usage: olevba.py [options] <filename> [filename2 ...] | ||
| 131 | - | 130 | +<pre class="text"><code>Usage: olevba [options] <filename> [filename2 ...] |
| 131 | + | ||
| 132 | Options: | 132 | Options: |
| 133 | -h, --help show this help message and exit | 133 | -h, --help show this help message and exit |
| 134 | -r find files recursively in subdirectories. | 134 | -r find files recursively in subdirectories. |
| 135 | -z ZIP_PASSWORD, --zip=ZIP_PASSWORD | 135 | -z ZIP_PASSWORD, --zip=ZIP_PASSWORD |
| 136 | if the file is a zip archive, open all files from it, | 136 | if the file is a zip archive, open all files from it, |
| 137 | - using the provided password (requires Python 2.6+) | 137 | + using the provided password. |
| 138 | + -p PASSWORD, --password=PASSWORD | ||
| 139 | + if encrypted office files are encountered, try | ||
| 140 | + decryption with this password. May be repeated. | ||
| 138 | -f ZIP_FNAME, --zipfname=ZIP_FNAME | 141 | -f ZIP_FNAME, --zipfname=ZIP_FNAME |
| 139 | if the file is a zip archive, file(s) to be opened | 142 | if the file is a zip archive, file(s) to be opened |
| 140 | within the zip. Wildcards * and ? are supported. | 143 | within the zip. Wildcards * and ? are supported. |
| 141 | (default:*) | 144 | (default:*) |
| 142 | - -t, --triage triage mode, display results as a summary table | ||
| 143 | - (default for multiple files) | ||
| 144 | - -d, --detailed detailed mode, display full results (default for | ||
| 145 | - single file) | ||
| 146 | -a, --analysis display only analysis results, not the macro source | 145 | -a, --analysis display only analysis results, not the macro source |
| 147 | code | 146 | code |
| 148 | -c, --code display only VBA source code, do not analyze it | 147 | -c, --code display only VBA source code, do not analyze it |
| 149 | - -i INPUT, --input=INPUT | ||
| 150 | - input file containing VBA source code to be analyzed | ||
| 151 | - (no parsing) | ||
| 152 | --decode display all the obfuscated strings with their decoded | 148 | --decode display all the obfuscated strings with their decoded |
| 153 | content (Hex, Base64, StrReverse, Dridex, VBA). | 149 | content (Hex, Base64, StrReverse, Dridex, VBA). |
| 154 | --attr display the attribute lines at the beginning of VBA | 150 | --attr display the attribute lines at the beginning of VBA |
| 155 | source code | 151 | source code |
| 156 | --reveal display the macro source code after replacing all the | 152 | --reveal display the macro source code after replacing all the |
| 157 | - obfuscated strings by their decoded content.</code></pre> | 153 | + obfuscated strings by their decoded content. |
| 154 | + -l LOGLEVEL, --loglevel=LOGLEVEL | ||
| 155 | + logging level debug/info/warning/error/critical | ||
| 156 | + (default=warning) | ||
| 157 | + --deobf Attempt to deobfuscate VBA expressions (slow) | ||
| 158 | + --relaxed Do not raise errors if opening of substream fails | ||
| 159 | + | ||
| 160 | + Output mode (mutually exclusive): | ||
| 161 | + -t, --triage triage mode, display results as a summary table | ||
| 162 | + (default for multiple files) | ||
| 163 | + -d, --detailed detailed mode, display full results (default for | ||
| 164 | + single file) | ||
| 165 | + -j, --json json mode, detailed in json format (never default)</code></pre> | ||
| 166 | +<p><strong>New in v0.54:</strong> the -p option can now be used to decrypt encrypted documents using the provided password(s).</p> | ||
| 158 | <h3 id="examples">Examples</h3> | 167 | <h3 id="examples">Examples</h3> |
| 159 | <p>Scan a single file:</p> | 168 | <p>Scan a single file:</p> |
| 160 | -<pre class="text"><code>olevba.py file.doc</code></pre> | 169 | +<pre class="text"><code>olevba file.doc</code></pre> |
| 161 | <p>Scan a single file, stored in a Zip archive with password โinfectedโ:</p> | 170 | <p>Scan a single file, stored in a Zip archive with password โinfectedโ:</p> |
| 162 | -<pre class="text"><code>olevba.py malicious_file.xls.zip -z infected</code></pre> | 171 | +<pre class="text"><code>olevba malicious_file.xls.zip -z infected</code></pre> |
| 163 | <p>Scan a single file, showing all obfuscated strings decoded:</p> | 172 | <p>Scan a single file, showing all obfuscated strings decoded:</p> |
| 164 | -<pre class="text"><code>olevba.py file.doc --decode</code></pre> | 173 | +<pre class="text"><code>olevba file.doc --decode</code></pre> |
| 165 | <p>Scan a single file, showing the macro source code with VBA strings deobfuscated:</p> | 174 | <p>Scan a single file, showing the macro source code with VBA strings deobfuscated:</p> |
| 166 | -<pre class="text"><code>olevba.py file.doc --reveal</code></pre> | 175 | +<pre class="text"><code>olevba file.doc --reveal</code></pre> |
| 167 | <p>Scan VBA source code extracted into a text file:</p> | 176 | <p>Scan VBA source code extracted into a text file:</p> |
| 168 | -<pre class="text"><code>olevba.py source_code.vba</code></pre> | 177 | +<pre class="text"><code>olevba source_code.vba</code></pre> |
| 169 | <p>Scan a collection of files stored in a folder:</p> | 178 | <p>Scan a collection of files stored in a folder:</p> |
| 170 | -<pre class="text"><code>olevba.py "MalwareZoo/VBA/*"</code></pre> | 179 | +<pre class="text"><code>olevba "MalwareZoo/VBA/*"</code></pre> |
| 171 | <p>NOTE: On Linux, MacOSX and other Unix variants, it is required to add double quotes around wildcards. Otherwise, they will be expanded by the shell instead of olevba.</p> | 180 | <p>NOTE: On Linux, MacOSX and other Unix variants, it is required to add double quotes around wildcards. Otherwise, they will be expanded by the shell instead of olevba.</p> |
| 172 | <p>Scan all .doc and .xls files, recursively in all subfolders:</p> | 181 | <p>Scan all .doc and .xls files, recursively in all subfolders:</p> |
| 173 | -<pre class="text"><code>olevba.py "MalwareZoo/VBA/*.doc" "MalwareZoo/VBA/*.xls" -r</code></pre> | 182 | +<pre class="text"><code>olevba "MalwareZoo/VBA/*.doc" "MalwareZoo/VBA/*.xls" -r</code></pre> |
| 174 | <p>Scan all .doc files within all .zip files with password, recursively:</p> | 183 | <p>Scan all .doc files within all .zip files with password, recursively:</p> |
| 175 | -<pre class="text"><code>olevba.py "MalwareZoo/VBA/*.zip" -r -z infected -f "*.doc"</code></pre> | 184 | +<pre class="text"><code>olevba "MalwareZoo/VBA/*.zip" -r -z infected -f "*.doc"</code></pre> |
| 176 | <h3 id="detailed-analysis-mode-default-for-single-file">Detailed analysis mode (default for single file)</h3> | 185 | <h3 id="detailed-analysis-mode-default-for-single-file">Detailed analysis mode (default for single file)</h3> |
| 177 | <p>When a single file is scanned, or when using the option -d, all details of the analysis are displayed.</p> | 186 | <p>When a single file is scanned, or when using the option -d, all details of the analysis are displayed.</p> |
| 178 | <p>For example, checking the malware sample <a href="https://malwr.com/analysis/M2I4YWRhM2IwY2QwNDljN2E3ZWFjYTg3ODk4NmZhYmE/">DIAN_caso-5415.doc</a>:</p> | 187 | <p>For example, checking the malware sample <a href="https://malwr.com/analysis/M2I4YWRhM2IwY2QwNDljN2E3ZWFjYTg3ODk4NmZhYmE/">DIAN_caso-5415.doc</a>:</p> |
| 179 | -<pre class="text"><code>>olevba.py c:\MalwareZoo\VBA\DIAN_caso-5415.doc.zip -z infected | 188 | +<pre class="text"><code>>olevba c:\MalwareZoo\VBA\DIAN_caso-5415.doc.zip -z infected |
| 180 | =============================================================================== | 189 | =============================================================================== |
| 181 | FILE: DIAN_caso-5415.doc.malware in c:\MalwareZoo\VBA\DIAN_caso-5415.doc.zip | 190 | FILE: DIAN_caso-5415.doc.malware in c:\MalwareZoo\VBA\DIAN_caso-5415.doc.zip |
| 182 | Type: OLE | 191 | Type: OLE |
| @@ -246,7 +255,7 @@ ANALYSIS: | @@ -246,7 +255,7 @@ ANALYSIS: | ||
| 246 | <li><strong>V</strong>: VBA string expressions (potential obfuscation)</li> | 255 | <li><strong>V</strong>: VBA string expressions (potential obfuscation)</li> |
| 247 | </ul> | 256 | </ul> |
| 248 | <p>Here is an example:</p> | 257 | <p>Here is an example:</p> |
| 249 | -<pre class="text"><code>c:\>olevba.py \MalwareZoo\VBA\samples\* | 258 | +<pre class="text"><code>c:\>olevba \MalwareZoo\VBA\samples\* |
| 250 | Flags Filename | 259 | Flags Filename |
| 251 | ----------- ----------------------------------------------------------------- | 260 | ----------- ----------------------------------------------------------------- |
| 252 | OLE:MASI--- \MalwareZoo\VBA\samples\DIAN_caso-5415.doc.malware | 261 | OLE:MASI--- \MalwareZoo\VBA\samples\DIAN_caso-5415.doc.malware |
| @@ -266,7 +275,7 @@ OpX:MASI--- \MalwareZoo\VBA\samples\RottenKitten.xlsb.malware | @@ -266,7 +275,7 @@ OpX:MASI--- \MalwareZoo\VBA\samples\RottenKitten.xlsb.malware | ||
| 266 | OLE:MASI-B- \MalwareZoo\VBA\samples\ROVNIX.doc.malware | 275 | OLE:MASI-B- \MalwareZoo\VBA\samples\ROVNIX.doc.malware |
| 267 | OLE:MA----- \MalwareZoo\VBA\samples\Word within Word macro auto.doc</code></pre> | 276 | OLE:MA----- \MalwareZoo\VBA\samples\Word within Word macro auto.doc</code></pre> |
| 268 | <h2 id="python-3-support---olevba3">Python 3 support - olevba3</h2> | 277 | <h2 id="python-3-support---olevba3">Python 3 support - olevba3</h2> |
| 269 | -<p>As of v0.50, olevba has been ported to Python 3 thanks to <span class="citation" data-cites="sebdraven">@sebdraven</span>. However, the differences between Python 2 and 3 are significant and for now there is a separate version of olevba named olevba3 to be used with Python 3.</p> | 278 | +<p>Since v0.54, olevba is fully compatible with both Python 2 and 3. There is no need to use olevba3 anymore, however it is still present for backward compatibility.</p> |
| 270 | <hr /> | 279 | <hr /> |
| 271 | <h2 id="how-to-use-olevba-in-python-applications">How to use olevba in Python applications</h2> | 280 | <h2 id="how-to-use-olevba-in-python-applications">How to use olevba in Python applications</h2> |
| 272 | <p>olevba may be used to open a MS Office file, detect if it contains VBA macros, extract and analyze the VBA source code from your own python applications.</p> | 281 | <p>olevba may be used to open a MS Office file, detect if it contains VBA macros, extract and analyze the VBA source code from your own python applications.</p> |
oletools/doc/olevba.md
| @@ -67,85 +67,95 @@ and potential IOCs (URLs, IP addresses, e-mail addresses, executable filenames, | @@ -67,85 +67,95 @@ and potential IOCs (URLs, IP addresses, e-mail addresses, executable filenames, | ||
| 67 | ## Usage | 67 | ## Usage |
| 68 | 68 | ||
| 69 | ```text | 69 | ```text |
| 70 | -Usage: olevba.py [options] <filename> [filename2 ...] | ||
| 71 | - | 70 | +Usage: olevba [options] <filename> [filename2 ...] |
| 71 | + | ||
| 72 | Options: | 72 | Options: |
| 73 | -h, --help show this help message and exit | 73 | -h, --help show this help message and exit |
| 74 | -r find files recursively in subdirectories. | 74 | -r find files recursively in subdirectories. |
| 75 | -z ZIP_PASSWORD, --zip=ZIP_PASSWORD | 75 | -z ZIP_PASSWORD, --zip=ZIP_PASSWORD |
| 76 | if the file is a zip archive, open all files from it, | 76 | if the file is a zip archive, open all files from it, |
| 77 | - using the provided password (requires Python 2.6+) | 77 | + using the provided password. |
| 78 | + -p PASSWORD, --password=PASSWORD | ||
| 79 | + if encrypted office files are encountered, try | ||
| 80 | + decryption with this password. May be repeated. | ||
| 78 | -f ZIP_FNAME, --zipfname=ZIP_FNAME | 81 | -f ZIP_FNAME, --zipfname=ZIP_FNAME |
| 79 | if the file is a zip archive, file(s) to be opened | 82 | if the file is a zip archive, file(s) to be opened |
| 80 | within the zip. Wildcards * and ? are supported. | 83 | within the zip. Wildcards * and ? are supported. |
| 81 | (default:*) | 84 | (default:*) |
| 82 | - -t, --triage triage mode, display results as a summary table | ||
| 83 | - (default for multiple files) | ||
| 84 | - -d, --detailed detailed mode, display full results (default for | ||
| 85 | - single file) | ||
| 86 | -a, --analysis display only analysis results, not the macro source | 85 | -a, --analysis display only analysis results, not the macro source |
| 87 | code | 86 | code |
| 88 | -c, --code display only VBA source code, do not analyze it | 87 | -c, --code display only VBA source code, do not analyze it |
| 89 | - -i INPUT, --input=INPUT | ||
| 90 | - input file containing VBA source code to be analyzed | ||
| 91 | - (no parsing) | ||
| 92 | --decode display all the obfuscated strings with their decoded | 88 | --decode display all the obfuscated strings with their decoded |
| 93 | content (Hex, Base64, StrReverse, Dridex, VBA). | 89 | content (Hex, Base64, StrReverse, Dridex, VBA). |
| 94 | --attr display the attribute lines at the beginning of VBA | 90 | --attr display the attribute lines at the beginning of VBA |
| 95 | source code | 91 | source code |
| 96 | --reveal display the macro source code after replacing all the | 92 | --reveal display the macro source code after replacing all the |
| 97 | obfuscated strings by their decoded content. | 93 | obfuscated strings by their decoded content. |
| 94 | + -l LOGLEVEL, --loglevel=LOGLEVEL | ||
| 95 | + logging level debug/info/warning/error/critical | ||
| 96 | + (default=warning) | ||
| 97 | + --deobf Attempt to deobfuscate VBA expressions (slow) | ||
| 98 | + --relaxed Do not raise errors if opening of substream fails | ||
| 99 | + | ||
| 100 | + Output mode (mutually exclusive): | ||
| 101 | + -t, --triage triage mode, display results as a summary table | ||
| 102 | + (default for multiple files) | ||
| 103 | + -d, --detailed detailed mode, display full results (default for | ||
| 104 | + single file) | ||
| 105 | + -j, --json json mode, detailed in json format (never default) | ||
| 98 | ``` | 106 | ``` |
| 99 | 107 | ||
| 108 | +**New in v0.54:** the -p option can now be used to decrypt encrypted documents using the provided password(s). | ||
| 109 | + | ||
| 100 | ### Examples | 110 | ### Examples |
| 101 | 111 | ||
| 102 | Scan a single file: | 112 | Scan a single file: |
| 103 | 113 | ||
| 104 | ```text | 114 | ```text |
| 105 | -olevba.py file.doc | 115 | +olevba file.doc |
| 106 | ``` | 116 | ``` |
| 107 | 117 | ||
| 108 | Scan a single file, stored in a Zip archive with password "infected": | 118 | Scan a single file, stored in a Zip archive with password "infected": |
| 109 | 119 | ||
| 110 | ```text | 120 | ```text |
| 111 | -olevba.py malicious_file.xls.zip -z infected | 121 | +olevba malicious_file.xls.zip -z infected |
| 112 | ``` | 122 | ``` |
| 113 | 123 | ||
| 114 | Scan a single file, showing all obfuscated strings decoded: | 124 | Scan a single file, showing all obfuscated strings decoded: |
| 115 | 125 | ||
| 116 | ```text | 126 | ```text |
| 117 | -olevba.py file.doc --decode | 127 | +olevba file.doc --decode |
| 118 | ``` | 128 | ``` |
| 119 | 129 | ||
| 120 | Scan a single file, showing the macro source code with VBA strings deobfuscated: | 130 | Scan a single file, showing the macro source code with VBA strings deobfuscated: |
| 121 | 131 | ||
| 122 | ```text | 132 | ```text |
| 123 | -olevba.py file.doc --reveal | 133 | +olevba file.doc --reveal |
| 124 | ``` | 134 | ``` |
| 125 | 135 | ||
| 126 | Scan VBA source code extracted into a text file: | 136 | Scan VBA source code extracted into a text file: |
| 127 | 137 | ||
| 128 | ```text | 138 | ```text |
| 129 | -olevba.py source_code.vba | 139 | +olevba source_code.vba |
| 130 | ``` | 140 | ``` |
| 131 | 141 | ||
| 132 | Scan a collection of files stored in a folder: | 142 | Scan a collection of files stored in a folder: |
| 133 | 143 | ||
| 134 | ```text | 144 | ```text |
| 135 | -olevba.py "MalwareZoo/VBA/*" | 145 | +olevba "MalwareZoo/VBA/*" |
| 136 | ``` | 146 | ``` |
| 137 | NOTE: On Linux, MacOSX and other Unix variants, it is required to add double quotes around wildcards. Otherwise, they will be expanded by the shell instead of olevba. | 147 | NOTE: On Linux, MacOSX and other Unix variants, it is required to add double quotes around wildcards. Otherwise, they will be expanded by the shell instead of olevba. |
| 138 | 148 | ||
| 139 | Scan all .doc and .xls files, recursively in all subfolders: | 149 | Scan all .doc and .xls files, recursively in all subfolders: |
| 140 | 150 | ||
| 141 | ```text | 151 | ```text |
| 142 | -olevba.py "MalwareZoo/VBA/*.doc" "MalwareZoo/VBA/*.xls" -r | 152 | +olevba "MalwareZoo/VBA/*.doc" "MalwareZoo/VBA/*.xls" -r |
| 143 | ``` | 153 | ``` |
| 144 | 154 | ||
| 145 | Scan all .doc files within all .zip files with password, recursively: | 155 | Scan all .doc files within all .zip files with password, recursively: |
| 146 | 156 | ||
| 147 | ```text | 157 | ```text |
| 148 | -olevba.py "MalwareZoo/VBA/*.zip" -r -z infected -f "*.doc" | 158 | +olevba "MalwareZoo/VBA/*.zip" -r -z infected -f "*.doc" |
| 149 | ``` | 159 | ``` |
| 150 | 160 | ||
| 151 | 161 | ||
| @@ -156,7 +166,7 @@ When a single file is scanned, or when using the option -d, all details of the a | @@ -156,7 +166,7 @@ When a single file is scanned, or when using the option -d, all details of the a | ||
| 156 | For example, checking the malware sample [DIAN_caso-5415.doc](https://malwr.com/analysis/M2I4YWRhM2IwY2QwNDljN2E3ZWFjYTg3ODk4NmZhYmE/): | 166 | For example, checking the malware sample [DIAN_caso-5415.doc](https://malwr.com/analysis/M2I4YWRhM2IwY2QwNDljN2E3ZWFjYTg3ODk4NmZhYmE/): |
| 157 | 167 | ||
| 158 | ```text | 168 | ```text |
| 159 | ->olevba.py c:\MalwareZoo\VBA\DIAN_caso-5415.doc.zip -z infected | 169 | +>olevba c:\MalwareZoo\VBA\DIAN_caso-5415.doc.zip -z infected |
| 160 | =============================================================================== | 170 | =============================================================================== |
| 161 | FILE: DIAN_caso-5415.doc.malware in c:\MalwareZoo\VBA\DIAN_caso-5415.doc.zip | 171 | FILE: DIAN_caso-5415.doc.malware in c:\MalwareZoo\VBA\DIAN_caso-5415.doc.zip |
| 162 | Type: OLE | 172 | Type: OLE |
| @@ -233,7 +243,7 @@ The following flags show the results of the analysis: | @@ -233,7 +243,7 @@ The following flags show the results of the analysis: | ||
| 233 | Here is an example: | 243 | Here is an example: |
| 234 | 244 | ||
| 235 | ```text | 245 | ```text |
| 236 | -c:\>olevba.py \MalwareZoo\VBA\samples\* | 246 | +c:\>olevba \MalwareZoo\VBA\samples\* |
| 237 | Flags Filename | 247 | Flags Filename |
| 238 | ----------- ----------------------------------------------------------------- | 248 | ----------- ----------------------------------------------------------------- |
| 239 | OLE:MASI--- \MalwareZoo\VBA\samples\DIAN_caso-5415.doc.malware | 249 | OLE:MASI--- \MalwareZoo\VBA\samples\DIAN_caso-5415.doc.malware |
| @@ -256,10 +266,9 @@ OLE:MA----- \MalwareZoo\VBA\samples\Word within Word macro auto.doc | @@ -256,10 +266,9 @@ OLE:MA----- \MalwareZoo\VBA\samples\Word within Word macro auto.doc | ||
| 256 | 266 | ||
| 257 | ## Python 3 support - olevba3 | 267 | ## Python 3 support - olevba3 |
| 258 | 268 | ||
| 259 | -As of v0.50, olevba has been ported to Python 3 thanks to @sebdraven. | ||
| 260 | -However, the differences between Python 2 and 3 are significant and for now | ||
| 261 | -there is a separate version of olevba named olevba3 to be used with | ||
| 262 | -Python 3. | 269 | +Since v0.54, olevba is fully compatible with both Python 2 and 3. |
| 270 | +There is no need to use olevba3 anymore, however it is still present for backward compatibility. | ||
| 271 | + | ||
| 263 | 272 | ||
| 264 | -------------------------------------------------------------------------- | 273 | -------------------------------------------------------------------------- |
| 265 | 274 |
oletools/doc/pyxswf.html
| @@ -24,7 +24,7 @@ | @@ -24,7 +24,7 @@ | ||
| 24 | <p>It can also extract Flash objects from RTF documents, by parsing embedded objects encoded in hexadecimal format (-f option).</p> | 24 | <p>It can also extract Flash objects from RTF documents, by parsing embedded objects encoded in hexadecimal format (-f option).</p> |
| 25 | <p>For this, simply add the -o option to work on OLE streams rather than raw files, or the -f option to work on RTF files.</p> | 25 | <p>For this, simply add the -o option to work on OLE streams rather than raw files, or the -f option to work on RTF files.</p> |
| 26 | <h2 id="usage">Usage</h2> | 26 | <h2 id="usage">Usage</h2> |
| 27 | -<pre class="text"><code>Usage: pyxswf.py [options] <file.bad> | 27 | +<pre class="text"><code>Usage: pyxswf [options] <file.bad> |
| 28 | 28 | ||
| 29 | Options: | 29 | Options: |
| 30 | -o, --ole Parse an OLE file (e.g. Word, Excel) to look for SWF | 30 | -o, --ole Parse an OLE file (e.g. Word, Excel) to look for SWF |
| @@ -46,18 +46,18 @@ Options: | @@ -46,18 +46,18 @@ Options: | ||
| 46 | contain SWFs. Must provide path in quotes | 46 | contain SWFs. Must provide path in quotes |
| 47 | -c, --compress Compresses the SWF using Zlib</code></pre> | 47 | -c, --compress Compresses the SWF using Zlib</code></pre> |
| 48 | <h3 id="example-1---detecting-and-extracting-a-swf-file-from-a-word-document-on-windows">Example 1 - detecting and extracting a SWF file from a Word document on Windows:</h3> | 48 | <h3 id="example-1---detecting-and-extracting-a-swf-file-from-a-word-document-on-windows">Example 1 - detecting and extracting a SWF file from a Word document on Windows:</h3> |
| 49 | -<pre class="text"><code>C:\oletools>pyxswf.py -o word_flash.doc | 49 | +<pre class="text"><code>C:\oletools>pyxswf -o word_flash.doc |
| 50 | OLE stream: 'Contents' | 50 | OLE stream: 'Contents' |
| 51 | [SUMMARY] 1 SWF(s) in MD5:993664cc86f60d52d671b6610813cfd1:Contents | 51 | [SUMMARY] 1 SWF(s) in MD5:993664cc86f60d52d671b6610813cfd1:Contents |
| 52 | [ADDR] SWF 1 at 0x8 - FWS Header | 52 | [ADDR] SWF 1 at 0x8 - FWS Header |
| 53 | 53 | ||
| 54 | -C:\oletools>pyxswf.py -xo word_flash.doc | 54 | +C:\oletools>pyxswf -xo word_flash.doc |
| 55 | OLE stream: 'Contents' | 55 | OLE stream: 'Contents' |
| 56 | [SUMMARY] 1 SWF(s) in MD5:993664cc86f60d52d671b6610813cfd1:Contents | 56 | [SUMMARY] 1 SWF(s) in MD5:993664cc86f60d52d671b6610813cfd1:Contents |
| 57 | [ADDR] SWF 1 at 0x8 - FWS Header | 57 | [ADDR] SWF 1 at 0x8 - FWS Header |
| 58 | [FILE] Carved SWF MD5: 2498e9c0701dc0e461ab4358f9102bc5.swf</code></pre> | 58 | [FILE] Carved SWF MD5: 2498e9c0701dc0e461ab4358f9102bc5.swf</code></pre> |
| 59 | <h3 id="example-2---detecting-and-extracting-a-swf-file-from-a-rtf-document-on-windows">Example 2 - detecting and extracting a SWF file from a RTF document on Windows:</h3> | 59 | <h3 id="example-2---detecting-and-extracting-a-swf-file-from-a-rtf-document-on-windows">Example 2 - detecting and extracting a SWF file from a RTF document on Windows:</h3> |
| 60 | -<pre class="text"><code>C:\oletools>pyxswf.py -xf "rtf_flash.rtf" | 60 | +<pre class="text"><code>C:\oletools>pyxswf -xf "rtf_flash.rtf" |
| 61 | RTF embedded object size 1498557 at index 000036DD | 61 | RTF embedded object size 1498557 at index 000036DD |
| 62 | [SUMMARY] 1 SWF(s) in MD5:46a110548007e04f4043785ac4184558:RTF_embedded_object_0 | 62 | [SUMMARY] 1 SWF(s) in MD5:46a110548007e04f4043785ac4184558:RTF_embedded_object_0 |
| 63 | 00036DD | 63 | 00036DD |
oletools/doc/pyxswf.md
| @@ -21,7 +21,7 @@ For this, simply add the -o option to work on OLE streams rather than raw files, | @@ -21,7 +21,7 @@ For this, simply add the -o option to work on OLE streams rather than raw files, | ||
| 21 | ## Usage | 21 | ## Usage |
| 22 | 22 | ||
| 23 | ```text | 23 | ```text |
| 24 | -Usage: pyxswf.py [options] <file.bad> | 24 | +Usage: pyxswf [options] <file.bad> |
| 25 | 25 | ||
| 26 | Options: | 26 | Options: |
| 27 | -o, --ole Parse an OLE file (e.g. Word, Excel) to look for SWF | 27 | -o, --ole Parse an OLE file (e.g. Word, Excel) to look for SWF |
| @@ -47,12 +47,12 @@ Options: | @@ -47,12 +47,12 @@ Options: | ||
| 47 | ### Example 1 - detecting and extracting a SWF file from a Word document on Windows: | 47 | ### Example 1 - detecting and extracting a SWF file from a Word document on Windows: |
| 48 | 48 | ||
| 49 | ```text | 49 | ```text |
| 50 | -C:\oletools>pyxswf.py -o word_flash.doc | 50 | +C:\oletools>pyxswf -o word_flash.doc |
| 51 | OLE stream: 'Contents' | 51 | OLE stream: 'Contents' |
| 52 | [SUMMARY] 1 SWF(s) in MD5:993664cc86f60d52d671b6610813cfd1:Contents | 52 | [SUMMARY] 1 SWF(s) in MD5:993664cc86f60d52d671b6610813cfd1:Contents |
| 53 | [ADDR] SWF 1 at 0x8 - FWS Header | 53 | [ADDR] SWF 1 at 0x8 - FWS Header |
| 54 | 54 | ||
| 55 | -C:\oletools>pyxswf.py -xo word_flash.doc | 55 | +C:\oletools>pyxswf -xo word_flash.doc |
| 56 | OLE stream: 'Contents' | 56 | OLE stream: 'Contents' |
| 57 | [SUMMARY] 1 SWF(s) in MD5:993664cc86f60d52d671b6610813cfd1:Contents | 57 | [SUMMARY] 1 SWF(s) in MD5:993664cc86f60d52d671b6610813cfd1:Contents |
| 58 | [ADDR] SWF 1 at 0x8 - FWS Header | 58 | [ADDR] SWF 1 at 0x8 - FWS Header |
| @@ -62,7 +62,7 @@ OLE stream: 'Contents' | @@ -62,7 +62,7 @@ OLE stream: 'Contents' | ||
| 62 | ### Example 2 - detecting and extracting a SWF file from a RTF document on Windows: | 62 | ### Example 2 - detecting and extracting a SWF file from a RTF document on Windows: |
| 63 | 63 | ||
| 64 | ```text | 64 | ```text |
| 65 | -C:\oletools>pyxswf.py -xf "rtf_flash.rtf" | 65 | +C:\oletools>pyxswf -xf "rtf_flash.rtf" |
| 66 | RTF embedded object size 1498557 at index 000036DD | 66 | RTF embedded object size 1498557 at index 000036DD |
| 67 | [SUMMARY] 1 SWF(s) in MD5:46a110548007e04f4043785ac4184558:RTF_embedded_object_0 | 67 | [SUMMARY] 1 SWF(s) in MD5:46a110548007e04f4043785ac4184558:RTF_embedded_object_0 |
| 68 | 00036DD | 68 | 00036DD |