Esta vez plantearon un reto relacionado con la entropía de los archivos.

1

Dejan caer algunas pistas y un archivo comprimido que contiene un montón de imágenes. Así que tomamos el script Python creado por Kenneth Hartman y le aplicamos algunas modificaciones. Eliminamos la información que no necesitamos y añadimos un bucle para poder recorrer todos los archivos de imágenes del directorio actual. A continuación, almacenamos el nombre de archivo con la entropía más alta y eso es todo.

Así:

#
# graph_file_entropy.py
#
# Shannon Entropy of a file
# = minimum average number of bits per character
# required for encoding (compressing) the file
#
# So the theoretical limit (in bytes) for data compression:
# Shannon Entropy of the file * file size (in bytes) / 8
# (Assuming the file is a string of byte-size (UTF-8?) characters
# because if not then the Shannon Entropy value would be different.)
# FB - 201011291
import sys
import math
from os import listdir
from os.path import isfile, join

if len(sys.argv) != 2:
    print "Usage: entropy.py extension"
    sys.exit()

onlyfiles = [f for f in listdir("./") if isfile(join("./", f))]
highest=0
winner=''
for eachfile in onlyfiles:
    if sys.argv[1] in eachfile:

# read the whole file into a byte array
        f = open(eachfile, "rb")
        byteArr = map(ord, f.read())
        f.close()
        fileSize = len(byteArr)

# calculate the frequency of each byte value in the file
        freqList = []
        for b in range(256):
            ctr = 0
            for byte in byteArr:
                if byte == b:
                    ctr += 1
            freqList.append(float(ctr) / fileSize)
# print 'Frequencies of each byte-character:'
# print freqList
# print

    # Shannon entropy
        ent = 0.0
        for freq in freqList:
            if freq > 0:
                ent = ent + freq * math.log(freq, 2)
        ent = -ent
        if ent > highest:
            highest=ent
            winner=eachfile
        print 'Shannon entropy (min bits per byte-character) for ' + eachfile + ' : ' + str(ent)
print 'Winner is: ' + winner

Ejecútalo y aplícale la suma MD5:

2

Y así de fácil conseguimos nuestra bandera.