Example #1
0
def _fit(train_malware_path,
         train_non_malware_path,
         save=True,
         fprototypes="./train_prototypes.trained",
         fmodel="./modelw2v.mm",
         ffunctions="./modelfuncts.mm"):
    """ Entrena el sistema. Obtiene el modelo word2vec, el modelo de funciones (funciones llamadas por las muestras supervisadas) y
		con ello genera los prototipos.

		Si se indica, almacena en ficheros separados el modelo word2vec, el modelo de funciones y los prototipos, si no
		simplemente los devuelve en una tupla 3-d.
    
		Parámetros:
		train_malware_path	      -- Ruta donde se encuentran las muestras malware supervisadas.
		train_non_malware_path    -- Ruta donde se encuentran las muestras no malware supervisadas.
		save			  	 	  -- Indica si se quieren almacenar los resultados del entrenamiento.
		fprototypes	  	 		  -- Ruta donde almacenar los prototipos
		fmodel			  	 	  -- Ruta donde almacenar el modelo word2vec
		ffunctions		  	 	  -- Ruta donde almacenar el modelo de funciones
		
		Excepciones:
		A implementar.
    
    """
    logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s',
                        level=logging.INFO)
    malware_files = _get_files(train_malware_path)
    non_malware_files = _get_files(train_non_malware_path)
    logging.info("Initializing training with: " +
                 str(len(malware_files) + len(non_malware_files)) + " files")
    file_features = _extract_train_programs_features(malware_files,
                                                     non_malware_files)
    func_features = _get_all_functs(file_features)
    ffmodel = _get_func_model(file_features, func_features)
    programs, dll_functs, is_packed = _get_vectors_information(
        file_features, ffmodel)
    model = _train_w2v_model(programs)
    ## Bug con las funciones, arreglar en futuras versiones #
    #(_get_program_representation(programs[i][0],model).tolist()+dll_functs[i]+[is_packed[i]],programs[i][1])
    prototypes = []
    for i in xrange(len(programs)):
        program_representation = _get_program_representation(
            programs[i][0], model)
        if type(program_representation) != int:
            prototypes.append(
                (program_representation.tolist() + [is_packed[i]],
                 programs[i][1]))

    if save == True:
        _serialize(fprototypes, prototypes)
        _serialize(fmodel, model)
        _serialize(ffunctions, func_features)
        logging.info("Saved training results. ")
    else:
        return (prototypes, model, func_features)
Example #2
0
def _fit(train_malware_path,train_non_malware_path,save=True,fprototypes="./train_prototypes.trained",fmodel="./modelw2v.mm",ffunctions="./modelfuncts.mm"): 
	""" Entrena el sistema. Obtiene el modelo word2vec, el modelo de funciones (funciones llamadas por las muestras supervisadas) y
		con ello genera los prototipos.

		Si se indica, almacena en ficheros separados el modelo word2vec, el modelo de funciones y los prototipos, si no
		simplemente los devuelve en una tupla 3-d.
    
		Parámetros:
		train_malware_path	      -- Ruta donde se encuentran las muestras malware supervisadas.
		train_non_malware_path    -- Ruta donde se encuentran las muestras no malware supervisadas.
		save			  	 	  -- Indica si se quieren almacenar los resultados del entrenamiento.
		fprototypes	  	 		  -- Ruta donde almacenar los prototipos
		fmodel			  	 	  -- Ruta donde almacenar el modelo word2vec
		ffunctions		  	 	  -- Ruta donde almacenar el modelo de funciones
		
		Excepciones:
		A implementar.
    
    """
	logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
	malware_files 	  = _get_files(train_malware_path)
	non_malware_files = _get_files(train_non_malware_path)
	logging.info("Initializing training with: "+str(len(malware_files)+len(non_malware_files))+" files")
	file_features                 = _extract_train_programs_features(malware_files,non_malware_files)
	func_features				  = _get_all_functs(file_features)
	ffmodel                       =  _get_func_model(file_features,func_features)
	programs,dll_functs,is_packed = _get_vectors_information(file_features,ffmodel)
	model 						  = _train_w2v_model(programs)
	## Bug con las funciones, arreglar en futuras versiones #
	#(_get_program_representation(programs[i][0],model).tolist()+dll_functs[i]+[is_packed[i]],programs[i][1])
	prototypes                    = []
	for i in xrange(len(programs)):
		program_representation = _get_program_representation(programs[i][0],model)
		if type(program_representation)!=int: prototypes.append((program_representation.tolist()+[is_packed[i]],programs[i][1]))
	
	if save==True:
		_serialize(fprototypes,prototypes)
		_serialize(fmodel,model)
		_serialize(ffunctions,func_features)
		logging.info("Saved training results. ")
	else: return (prototypes,model,func_features)
def _leaving_one_out(train_malware_path,train_non_malware_path,k,beta=1):
	""" Realiza exclusión individual sobre el conjunto de entrenamiento.

		Muestra por pantalla el conjunto de medidas de evaluación del sistema.
    
		Parámetros:
		file_features -- Diccionario con tantas entradas como programas, para cada programa se almacena información (cjto de instrucciones,funciones y medida de empaquetamiento)
		k             -- Número de vecinos más cercanos.
		beta          -- Parámetro beta para calcular la f-medida (1 si se pondera igual la precisión que el recall).
		Excepciones:
		A implementar.
    
    """
	malware_files                     = _get_files(train_malware_path)
	non_malware_files                 = _get_files(train_non_malware_path)
	num_programs					  = len(malware_files)+len(non_malware_files)
	act_index,act_test_sample,err = 0,None,0
	tp,tn,fp,fn,tpr,spc,ppv,npv,fpr,fnr,fdr,acc,fscore = 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
	logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
	logging.info("Initializing leaving one out with "+str(num_programs)+" programs")
	file_features                 = _extract_train_programs_features(malware_files,non_malware_files)
	name_files					  = [key for key in file_features]
	func_features				  = _get_all_functs(file_features)
	ffmodel                       = _get_func_model(file_features,func_features)
	programs,dll_functs,is_packed = _get_vectors_information(file_features,ffmodel)
	model 						  = _train_w2v_model(programs)
	while act_index < len(programs):
		correct_class   = programs[act_index][1]
		test_program    = _get_program_representation(programs[act_index][0],model)
		test_functs     = list(dll_functs[act_index])
		is_packed_test  = is_packed[act_index] 
		test_program    = [test_program.tolist()+test_functs+[is_packed_test]]
		train_programs  = [ (_get_program_representation(programs[i][0],model).tolist()+list(dll_functs[i])+[is_packed[i]],programs[i][1]) for i in xrange(len(programs)) if act_index!=i]
		logging.info("Testing file "+str(act_index)+" "+name_files[act_index]+" against "+str(len(programs)-1)+" programs")
		c_class         = _get_class(test_program[0],train_programs,model,k)
		logging.info("Computed class = "+str(c_class)+" and correct class is: "+str(correct_class))
		if   c_class==1 and correct_class==1: tp += 1
		elif c_class==1 and correct_class==0: fp += 1
		elif c_class==0 and correct_class==1: fn += 1
		elif c_class==0 and correct_class==0: tn += 1
		act_index += 1
	
	tpr = tp/(tp+fn)
	spc = tn/(tn+fp)
	ppv = tp/(tp+fp)
	npv = tn/(tn+fn)
	fpr = 1.0-spc
	fnr = 1.0-tpr
	fdr = 1.0-ppv
	acc = (tp+tn)/(tp+tn+fp+fn)
	fscore = ((1.0+beta**2)*acc*tpr)/((beta**2)*acc*tpr)
	
	logging.info("Finished leaving one out ")
	logging.info("Results: \n \
				 1) Recall = "+str(tpr)+ "\n \
				 2) True negative rate = "+str(spc)+ "\n \
				 3) Positive predictive value = "+str(ppv)+ "\n \
				 4) Negative predictive value = "+str(npv)+ "\n \
				 5) False positive rate = "+str(fpr)+ "\n \
				 6) False negative rate = "+str(fnr)+ "\n \
				 7) False discovery rate = "+str(fdr)+ "\n \
				 8) Accuracy = "+str(acc)+ "\n \
				 9) F Measure (with beta="+str(beta)+") = "+str(fscore)+"\n")