Solution de l’exo la modif de flash


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.

4 thoughts on “Solution de l’exo la modif de flash

  • Pwet

    flash_oh_oooooooh

    Alors ça je pense que ce n’est pas de la notation hongroise :)

    (mais comme c’est du Queen je dis rien)

  • foxmask

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

    tout est dans rosebud Perso je pense à l’ordre d’attaque des Doberman dans Columbo dans “How to dial a murder” (très bon au demeurant;)) et une référence à “Citizen Kane” – mais, pour vous, je dirai que vous pensez au bijou ;)

  • Max

    @foxmax

    y a du avoir un blougou à sens giratoire inversé entre ce blog et ses protagonistes car hier justement je mattais “la classe américaine” et je me demandais quel était ce mot que pornonçait orson welles en se faisant déssouder (n’ayant pas vu citizen kayne)!

    it makes my day!

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.