Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

reconstituer médias à partir d'un flux binaire

+4 votes

Je voudrai manipuler le contenu des jpeg,png,mp4,mp3 etc. en les "sortants" de leur fichier. Un peu comme on goberait un œuf en perçant un petit trou dans la coquille.

Exemple : Quand on examine avec notepad un fichier de média, on voit un espèce de magma incompréhensible ressemblant à ça :

,/Óä[øa²ú‰»º×fk˜ÒÍúc¬¦³]ÁYFې~Çîʺ²±j†©¢jG+º™÷§m*AôøƤ«³;Û.¯Â†ME¯Åa"ù…Fï,pÿ ú1ãã?#Ç~Óÿ äÑãI)S5_ˆ"»4|«$

Plutôt que de trimballer ces fichiers de la sorte avec tkinter :

photo = PhotoImage(file="ma_photo.png")
canvas = Canvas(fenetre,width=350, height=200)
canvas.create_image(0, 0, anchor=NW, image=photo)
canvas.pack()

je mettrai le magma dans une string peut-être , ou une liste ?

Le but est ici expérimentale, mais aussi pour que les médias ne soient pas trop facilement visibles dans un répertoire.

Par exemple, si on fait un petit jeu sur pygame, je voudrai que toutes les musiques, bruitages, et toutes les images soient inconnues du joueur jusqu'à ce qu'il parvienne à un certain stade dans le déroulement du jeu.
Il pourrait être tenté de tricher et d'explorer le répertoire Medias.

Je ne souhaite pas mettre un mot de passe comme dans un 7zip protégé.
Dans les jeux Lucasart des années 90, tout était bien planqué dans les fichiers.

Comment faire ???

demandé 12-Mai-2015 par buffalo974 (2,632 points)

Yop,
t'as vu du côté de bitstring?

bitstring is a pure Python module designed to help make the creation
and analysis of binary data as simple and natural as possible.

Bitstrings can be constructed from integers (big and little endian),
hex, octal, binary, strings or files. They can be sliced, joined,
reversed, inserted into, overwritten, etc. with simple functions or
slice notation. They can also be read from, searched and replaced, and
navigated in, similar to a file or stream.

je viens de dl la doc, et ça à l'air de correspondre à ce que je recherche.
Gros cours de rattrapage en vue !

ha pas mal ça aussi ^^

merde, je le savais pourtant!

ça à l'air de correspondre à ce que je recherche.

ok j'en conclus que le post est résolu, j'passe ce com's en réponse
On espere avoir des retours ici sur tes manips x)?

2 Réponses

+2 votes
 
Meilleure réponse

Yop,
t'as vu du côté de bitstring?

bitstring is a pure Python module designed to help make the creation
and analysis of binary data as simple and natural as possible.

Bitstrings can be constructed from integers (big and little endian),
hex, octal, binary, strings or files. They can be sliced, joined,
reversed, inserted into, overwritten, etc. with simple functions or
slice notation. They can also be read from, searched and replaced, and
navigated in, similar to a file or stream.

répondu 13-Mai-2015 par boblinux (3,092 points)
sélectionné 13-Mai-2015 par buffalo974

Je retiens surtout le module bitstring qui me servira peut etre au dela de mes bidouilles lorsque je l'aurai bien integré.
L'idée de max peut me dépanner en attendant que j'ai lu la doc.
enter image description here
Une idée d'utilisation : un jeu de strip poker comme dans le temps, quand c'était en EGA, faut vraiment que les photos soient planquées sinon ça casse la motivation de gagner ^^
Je vous dirai ce que ça donne, mais j'avance à mon rythme...ça ferait un défi de codage bien fun ça !

tss pourquoi on est toujours obligé de fourrer le sexe partout? et si on veut montrer un proj à un jeune de 12 ans on fait quoi ^^

Deluxe Strip Poker ??? :) c'était sur Atari St(e/f)
Ho my gode...

@boblinux
Ben ça va le motiver plus qu'un soft de gestion de ses impôts ^^

+4 votes

Ca ne répond pas tout à fait à ta question (car ça ne regroupe pas tous les fichiers dans un seul "magma") mais du temps de ma jeunesse sur PC, quelques jeux renommaient simplement l'extension des images/sons ou changeaient le header des fichiers.

Un truc dans le genre devrait faire l'affaire sur des fichiers de moyenne taille, après tu peux améliorer. ça rend le fichier inutilisable (en modifiant le header) sauf si le mec sait se servir d'un éditeur avancé de fichiers.

PS: Cette fonction ringarde n'est bien sûr pas optimisée ni faite pour encrypter quoi que soit mais pour dissuader le quidam de base qui voudrait choper tes images/jeux/videos.
De plus pas besoin de libs (io est en standard python 2 et 3).

C'est sale mais c'est rapide et ça marche ^^

import io


def nazificator(fichier, mode=1):
    """
        nazify en modifiant le header
    """

    # charge le fichier
    fp = io.open(fichier, "rb")
    data = fp.read()
    fp.close()

    # nazify le fichier
    if mode == 1:

        if data[:2] == "00":
            print "fichier déjà naze!"
            return False

        # ajoute 2 bits dans le header
        fp = io.open(fichier, "wb")
        fp.write("00"+data)
        fp.close()

    # denazify le fichier
    elif mode == 2:

        if data[:2] != "00":
            print "ce fichier n'est pas naze!"
            return False

        # écrit le fichier denazéifié
        fp = io.open(fichier, "wb")
        fp.write(data[2:-1])
        fp.close()
répondu 13-Mai-2015 par max (892 points)

Je lit en ce moment la doc du module bitstring, et comme j'avais besoin de réviser les binaires j'ai trouvé l'article de sam:
http://sametmax.com/la-fin-du-mystere-du-binaire-nananere/

Il existe des opérateurs bitwise qui pourrait faire le job ?
Pour rebondir sur le code de max, pourrait on le simplifier avec >> ou >>> ?

...