(self, report)
return status
Process private sample report information focused on file meta data
        from VirusTotal. This includes the section:
            - Developer Data
            - PE Language
            - Signature Check
        Args:
            report (dict): unprocessed main json report information from VT.

        Return: dict with keys:
            'success' (boolean),
            'message' (str),
Process private sample report information focused on file meta data
        from VirusTotal. This includes the section:
            - Developer Data
            - PE Language
            - Signature Check
        Args:
            report (dict): unprocessed main json report information from VT.
Process private sample report information focused on file meta data from VirusTotal . This includes the section : - Developer Data - PE Language - Signature Check Args : report ( dict ) : unprocessed main json report information from VT .
def _process_private_sample_metadata(self, report):
        """
        Process private sample report information focused on file meta data
        from VirusTotal. This includes the section:
            - Developer Data
            - PE Language
            - Signature Check
        Args:
            report (dict): unprocessed main json report information from VT.

        Return: dict with keys:
            'success' (boolean),
            'message' (str),
        """
        status = {
            'success':  False,
            'message':  []
        }
        additional_info_dict = report.get('additional_info', {})
        exiftool_dict = additional_info_dict.get('exiftool', {})
        sigcheck_dict = additional_info_dict.get('sigcheck', {})

        # Developer Metadata
        if exiftool_dict:
            developerdata = {
                'Product Name': exiftool_dict.get('ProductName', ''),
                'Product Version': exiftool_dict.get('ProductVersionNumber', ''),
                'File Version': exiftool_dict.get('FileVersionNumber', ''),
                'File Description': exiftool_dict.get('FileDescription', ''),
                'InternalName': exiftool_dict.get('InternalName', ''),
            }
            # Make sure at least one of the keys is set with a value.
            for v in developerdata.values():
                if v != '':
                    self._add_result('Developer Metadata', exiftool_dict.get('CompanyName', ''), developerdata)
                    break
        else:
            status['message'].append("Exiftool data not included in VT response.")

        # Signature Information
        if sigcheck_dict:
            sigcheck = {
                'Copyright': sigcheck_dict.get('copyright', ''),
                'Description': sigcheck_dict.get('description', ''),
                'File Version': sigcheck_dict.get('file version', ''),
                'Internal Name': sigcheck_dict.get('internal name', ''),
                'Original Name': sigcheck_dict.get('original name', ''),
                'Product': sigcheck_dict.get('product', ''),
                'Link Date': sigcheck_dict.get('link date', ''),
                'Publisher': sigcheck_dict.get('publisher', ''),
                'Signers': sigcheck_dict.get('signers', ''),
                'Signing Date': sigcheck_dict.get('signing date', '')
            }
            # Make sure at least one of the keys is set with a value.
            for v in sigcheck.values():
                if v != '':
                    self._add_result('Signature Information', sigcheck_dict.get('publisher', ''), sigcheck)
                    break
        else:
            status['message'].append("Signature data not included in VT response.")

        # PE Language Informaton
        pe_lang = additional_info_dict.get('pe-resource-langs', {})
        if pe_lang:
            for k, v in pe_lang.iteritems():
                self._add_result('Language Information', k, {'Value': v})
        else:
            status['message'].append("PE Language data not included in VT response.")

        # Updating status information and returning
        if not status['message']:
            status['success'] =  True
            status['message'] = "Processed private sample metadata."
        else:
            status['message'] = "\n".join(status['message'])

        return status
def _process_private_sample_metadata ( self , report ) : status = { 'success' : False , 'message' : [ ] } additional_info_dict = report . get ( 'additional_info' , { } ) exiftool_dict = additional_info_dict . get ( 'exiftool' , { } ) sigcheck_dict = additional_info_dict . get ( 'sigcheck' , { } ) # Developer Metadata if exiftool_dict : developerdata = { 'Product Name' : exiftool_dict . get ( 'ProductName' , '' ) , 'Product Version' : exiftool_dict . get ( 'ProductVersionNumber' , '' ) , 'File Version' : exiftool_dict . get ( 'FileVersionNumber' , '' ) , 'File Description' : exiftool_dict . get ( 'FileDescription' , '' ) , 'InternalName' : exiftool_dict . get ( 'InternalName' , '' ) , } # Make sure at least one of the keys is set with a value. for v in developerdata . values ( ) : if v != '' : self . _add_result ( 'Developer Metadata' , exiftool_dict . get ( 'CompanyName' , '' ) , developerdata ) break else : status [ 'message' ] . append ( "Exiftool data not included in VT response." ) # Signature Information if sigcheck_dict : sigcheck = { 'Copyright' : sigcheck_dict . get ( 'copyright' , '' ) , 'Description' : sigcheck_dict . get ( 'description' , '' ) , 'File Version' : sigcheck_dict . get ( 'file version' , '' ) , 'Internal Name' : sigcheck_dict . get ( 'internal name' , '' ) , 'Original Name' : sigcheck_dict . get ( 'original name' , '' ) , 'Product' : sigcheck_dict . get ( 'product' , '' ) , 'Link Date' : sigcheck_dict . get ( 'link date' , '' ) , 'Publisher' : sigcheck_dict . get ( 'publisher' , '' ) , 'Signers' : sigcheck_dict . get ( 'signers' , '' ) , 'Signing Date' : sigcheck_dict . get ( 'signing date' , '' ) } # Make sure at least one of the keys is set with a value. for v in sigcheck . values ( ) : if v != '' : self . _add_result ( 'Signature Information' , sigcheck_dict . get ( 'publisher' , '' ) , sigcheck ) break else : status [ 'message' ] . append ( "Signature data not included in VT response." ) # PE Language Informaton pe_lang = additional_info_dict . get ( 'pe-resource-langs' , { } ) if pe_lang : for k , v in pe_lang . iteritems ( ) : self . _add_result ( 'Language Information' , k , { 'Value' : v } ) else : status [ 'message' ] . append ( "PE Language data not included in VT response." ) # Updating status information and returning if not status [ 'message' ] : status [ 'success' ] = True status [ 'message' ] = "Processed private sample metadata." else : status [ 'message' ] = "\n" . join ( status [ 'message' ] ) return status