for i in range(3): # Warning : afin de tester, message non divisible par 3 peut avoir des pertes d'informations fragmentSize = int(len(message) / 3) # Découpe le message en fragments fragmentMessage = message[fragmentSize * i:fragmentSize * (i + 1)] # Calcul de l'ICV du fragment actuel icv = zlib.crc32(fragmentMessage).to_bytes(4, byteorder='little') # On chiffre le fragment + icv. seed = iv + key cipher = RC4(seed, streaming=False) encrypted_message = cipher.crypt(fragmentMessage + icv) # On crée un nouveau packet avec les bonnes valeurs. wepdata = encrypted_message[:-4] encrypted_icv = int.from_bytes(encrypted_message[-4:], byteorder='big') # Si ce n'est pas le dernier fragment (!= 2) l'on rajout MF (More Fragments) à notre frame Dot11 if i != 2: pck = RadioTap() / Dot11(type='Data', FCfield='to-DS+protected+MF') / Dot11WEP( iv=iv, wepdata=wepdata, icv=encrypted_icv) else: pck = RadioTap() / Dot11(type='Data', FCfield='to-DS+protected') / Dot11WEP( iv=iv, wepdata=wepdata, icv=encrypted_icv) pck.SC = i # On ajoute le fragment dans une capture pcap. wrpcap('ex3.cap', pck, append=True) print(pck.show())
# Calcul de l'ICV du message count = 0 for i, message in enumerate(messages): # Creation de l'ICV a l'aide d'un CRC32 icv = crc32(message).to_bytes(4, byteorder='little') # Les données a chiffrer sont le message et l'ICV message_to_encrypt = message + icv # chiffrement rc4 cipher = RC4(seed, streaming=False) encrypted_data = cipher.crypt(message_to_encrypt) # On extrait l'ICV chiffré (4 dernier byte) encrypted_icv = int.from_bytes(encrypted_data[-4:], byteorder='big') # On regarde si c'est notre dernier paquet, si c'est le cas on ne met pas le flag MF (more fragment) flags = "" if i != len(messages) - 1: flags = "to-DS+protected+MF" else: flags = "to-DS+protected" # On creer notre paquet WEP packet = RadioTap() / Dot11(type='Data', FCfield=flags) / Dot11WEP( iv=iv, wepdata=encrypted_data[:-4], icv=encrypted_icv) # On donne le numéro de paquet packet.SC = i wrpcap('task3.cap', packet, append=True)