PROJET AUTOBLOG


Sam & Max: Python, Django, Git et du cul

Site original : Sam & Max: Python, Django, Git et du cul

⇐ retour index

Solution de l’exo la modif de flash

vendredi 21 mars 2014 à 17:25

L’exercice d’hier était plus un prétexte pour faire un peu de Python 3 avec manipulation de bytes qu’un vrai défi, mais c’est toujours marrant.

"""
    Kick flash bin ass so it stop giving us trouble will full screen
    vids on a dual screen.
"""
 
import sys
import argparse
 
# On déclare un argument positionnel obligatoire.
# Ce doit être un fichier que l'on veut
# ouvrir en lecture et mode binaire.
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('bin', type=argparse.FileType('rb'), help="Path to flash bin, man")
args = parser.parse_args()
 
# On charge le contenu du fichier en mémoire.
# Un peu bourrin, mais tellement plus simple
# que de chercher directement dans le fichier.
flash_oh_oooooooh = bytearray(args.bin.read())
# On chercher la chaîne binaire qui correspond à la constante
# qu'on veut écorcher.
if b"_NET_ACTIVE_WINDOW" not in flash_oh_oooooooh:
    print("Flash est déjà défoncé")
    sys.exit(0)
# On remplace juste un bit 
flash_oh_oooooooh[flash_oh_oooooooh.find(b"_NET_ACTIVE_WINDOW") + 1] = 42
 
# On écrit le résultat dans dans le fichier final.
try:
    with open(args.bin.name, 'wb') as news_flash:
        news_flash.write(flash_oh_oooooooh)
except PermissionError:
    sys.exit("Fozzy says you don't have right to write in '%s', man..." % args.bin.name)
 
print("Rosebud")

Voilà, rien d’incroyable, mais on trouve deux choses intéressantes : l’utilisation de FileType pour gérer un paramètre de type chemin de fichier sans se prendre la tête, et celle de bytesarray qui nous permet d’avoir un array mutable et donc de tout charger en mémoire comme un porc sans avoir à dupliquer tout le contenu lors de la modification.

J’ai vu certains ouvrir le fichier sans le flag binaire (‘b’), attention Python peut vous bousiller tout le contenu du fichier puisqu’il va interpréter les caractères spéciaux et faire du décodage sur un contenu sur lequel ça n’a pas de sens.

La vraie question, c’est : combien y a-t-il de références pop culturelles dans ce code ?


Télécharger le code de l’article.

flattr this!