mirror of https://github.com/MISP/PyMISP
				
				
				
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
| #!/usr/bin/env python3
 | |
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| import argparse
 | |
| import json
 | |
| 
 | |
| try:
 | |
|     from pymisp import pymisp_json_default, AbstractMISP
 | |
|     from pymisp.tools import make_binary_objects
 | |
| except ImportError:
 | |
|     pass
 | |
| 
 | |
| 
 | |
| def check():
 | |
|     missing_dependencies = {'pydeep': False, 'lief': False, 'magic': False, 'pymisp': False}
 | |
|     try:
 | |
|         import pymisp  # noqa
 | |
|     except ImportError:
 | |
|         missing_dependencies['pymisp'] = 'Please install pydeep: pip install pymisp'
 | |
|     try:
 | |
|         import pydeep  # noqa
 | |
|     except ImportError:
 | |
|         missing_dependencies['pydeep'] = 'Please install pydeep: pip install git+https://github.com/kbandla/pydeep.git'
 | |
|     try:
 | |
|         import lief  # noqa
 | |
|     except ImportError:
 | |
|         missing_dependencies['lief'] = 'Please install lief, documentation here: https://github.com/lief-project/LIEF'
 | |
|     try:
 | |
|         import magic  # noqa
 | |
|     except ImportError:
 | |
|         missing_dependencies['magic'] = 'Please install python-magic: pip install python-magic.'
 | |
|     return json.dumps(missing_dependencies)
 | |
| 
 | |
| 
 | |
| def make_objects(path):
 | |
|     to_return = {'objects': [], 'references': []}
 | |
|     fo, peo, seos = make_binary_objects(path)
 | |
| 
 | |
|     if seos:
 | |
|         for s in seos:
 | |
|             to_return['objects'].append(s)
 | |
|             if s.ObjectReference:
 | |
|                 to_return['references'] += s.ObjectReference
 | |
| 
 | |
|     if peo:
 | |
|         if hasattr(peo, 'certificates') and hasattr(peo, 'signers'):
 | |
|             # special authenticode case for PE objects
 | |
|             for c in peo.certificates:
 | |
|                 to_return['objects'].append(c)
 | |
|             for s in peo.signers:
 | |
|                 to_return['objects'].append(s)
 | |
|             del peo.certificates
 | |
|             del peo.signers
 | |
|         del peo.sections
 | |
|         to_return['objects'].append(peo)
 | |
|         if peo.ObjectReference:
 | |
|             to_return['references'] += peo.ObjectReference
 | |
| 
 | |
|     if fo:
 | |
|         to_return['objects'].append(fo)
 | |
|         if fo.ObjectReference:
 | |
|             to_return['references'] += fo.ObjectReference
 | |
|     return json.dumps(to_return, default=pymisp_json_default)
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     parser = argparse.ArgumentParser(description='Extract indicators out of binaries and returns MISP objects.')
 | |
|     group = parser.add_mutually_exclusive_group()
 | |
|     group.add_argument("-p", "--path", help="Path to process.")
 | |
|     group.add_argument("-c", "--check", action='store_true', help="Check the dependencies.")
 | |
|     args = parser.parse_args()
 | |
|     a = AbstractMISP()
 | |
| 
 | |
|     if args.check:
 | |
|         print(check())
 | |
|     if args.path:
 | |
|         obj = make_objects(args.path)
 | |
|         print(obj)
 |