¿Cómo puedo adivinar si una carga útil está ofuscada o encriptada? en otras palabras, ¿puedo aplicar el algoritmo de Shannon Entropy a una carga binaria?
cualquier consejo será apreciado, gracias de antemano
ecuación de entropía de Shannon es el método estándar de cálculo. Aquí hay una implementación simple en Python, copiada de la base de códigos Revelation :
def entropy(string):
"Calculates the Shannon entropy of a string"
# get probability of chars in string
prob = [ float(string.count(c)) / len(string) for c in dict.fromkeys(list(string)) ]
# calculate the entropy
entropy = - sum([ p * math.log(p) / math.log(2.0) for p in prob ])
return entropy
def entropy_ideal(length):
"Calculates the ideal Shannon entropy of a string with given length"
prob = 1.0 / length
return -1.0 * length * prob * math.log(prob) / math.log(2.0)
Tenga en cuenta que esta implementación asume que su flujo de bits de entrada se representa mejor como bytes. Este puede o no ser el caso de su dominio de problema.
Lea otras preguntas en las etiquetas obfuscation encryption entropy packet