Annonce

Réduire
Aucune annonce.

Script Python Cacher une image dans une archive pyhide.py

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • #16
    Pourquoi cat/cp : open (binaire) > seek(2) > un write de readlines.
    Récupérer ? Ben oui, il suffit de mettre un flag avant le write ci dessu. Pour récupérer ce qui est cacher un split(flag).
    >>> v = 'abc'
    >>> v.split('b')
    ['a', 'c']
    >>> v = 'abcd'
    >>> v.split('bc')[1]
    'd'

    @+

    Commentaire


    • #17
      Envoyé par PauseKawa Voir le message
      Pourquoi cat/cp
      cat parce-que c'est la méthode employée à la base de l'algo au tout début. cp, c'est ce sur quoi je suis tombé en premier sur google. Je ne voulais pas modifier l'image d'origine. N'étant pas linuxien, j'igniore l'équivalent du ">>" (win32 append).

      Envoyé par PauseKawa Voir le message
      open (binaire) > seek(2) > un write de readlines.
      Ouais dit ainsi c'est clair, mais avant il me fallait savoir qu'on devait "seeker" 2 fois et puis pourquoi 2 fois? C'est pas plutôt open(binaire)>bourrer le truc à cacher>balancer le fichier image?
      Envoyé par PauseKawa Voir le message
      Récupérer ? Ben oui, il suffit de mettre un flag avant le write ci dessu. Pour récupérer ce qui est cacher un split(flag).
      Dans ce cas, on pourrait également y balancer l'extension et le nom du fichier qui a été caché. Mais j'ai pas très bien compris sinon

      Commentaire


      • #18
        source.seek(2) se place en fin du fichier.
        Oui, il est possible de créer un flag avec le nom du fichier
        source<flag>nomfichier<flag>fichier
        resultat = fichier.split(flag) resultat[1] est le nom du fichier et resultat[2] le fichier lui même

        Commentaire


        • #19
          Envoyé par PauseKawa Voir le message
          source.seek(2)
          Exact, mais ca produit une "image" non affichable.
          Envoyé par PauseKawa Voir le message
          Oui, il est possible de créer un flag avec le nom du fichier
          source<flag>nomfichier<flag>fichier
          resultat = fichier.split(flag) resultat[1] est le nom du fichier et resultat[2] le fichier lui même
          Ok, donc on a à présent un
          <Hider>:
          Code:
          #!/usr/bin/env python
          # -*- coding: iso-8859-1 -*-
          #fichier py_hide.py
          tag = "<<<<<PY_HIDE_HACKED_TAG>>>>"
          
          #----- imports
          
          import tkFileDialog    #Import du gestionnaire des dialogues de fichier
          import os    #Import du module os pour os.path et os.system
          import sys   #Import du module sys pour la plateform et le exit
          from Tkinter import Tk
          
          #Construction de la fenêtre principale(facultatif pour les FileDialog)
          root = Tk()
          root.title('PyHide-hacker')
          #Recuperation d'une image avec les extensions demandées
          image = tkFileDialog.askopenfilename(parent=root, title="Selection de l'image", filetypes=((("Images gif",".gif"), ("Images jpg", ".jpg"), ("Images png", ".png"), ("Images bmp", ".bmp"), ("Toutes Images",(".gif", ".jpg", ".png", ".xpm", ".bmp", )))))
          if image=="":
              root.destroy()
              sys.exit("Image failed!")
          #Recuperation d'une archive avec les extensions demandées
          archive = tkFileDialog.askopenfilename(parent=root, title="Selection de l'archive", filetypes=(("Archive Zip", ".zip"),("Archive cab",".cab"), ("Archive rar", ".rar"), ("Archive .7z", ".7z"),("Tous les fichiers",""), ("Toutes Archives", (".zip", ",cab", ".rar", ".7z", ".jar"))))
          if archive=="":
              root.destroy()
              sys.exit("Archive failed!")
          root.destroy()
          #compiler(image, archive)
          
          image = os.path.realpath(image)     #Sans ceci, ca ne le fait pas pour les donnés du réseau
          archive = os.path.realpath(archive)     #Sans ceci, ca ne le fait pas pour les données du réseau
          fimg = open(image,"rb")
          farch = open(archive, "rb")
          ficOut, ext = os.path.splitext(image)
          fout = open("%s_hacked%s" %(ficOut, ext),"wb")
          fout.write(fimg.read())
          fout.write(tag + os.path.split(archive)[1] + tag)
          fout.write(farch.read())
          fout.close()
          fimg.close()
          farch.close()
          sys.exit("Merci d'avoir utilisé...'PyHide-hacker'")
          et un UnHider:
          Code:
          #!/usr/bin/env python
          # -*- coding: iso-8859-1 -*-
          #fichier py_Unhide.py
          tag = "<<<<<PY_HIDE_HACKED_TAG>>>>"
          
          #----- imports
          
          import tkFileDialog    #Import du gestionnaire des dialogues de fichier
          import os    #Import du module os pour os.path et os.system
          import sys   #Import du module sys pour la plateform et le exit
          from Tkinter import Tk
          
          #Construction de la fenêtre principale(facultatif pour les FileDialog)
          root = Tk()
          root.title('PyHide-hacker')
          #Recuperation d'une image avec les extensions demandées
          image = tkFileDialog.askopenfilename(parent=root, title="Selection de l'image", filetypes=((("Images gif",".gif"), ("Images jpg", ".jpg"), ("Images png", ".png"), ("Images bmp", ".bmp"), ("Toutes Images",(".gif", ".jpg", ".png", ".xpm", ".bmp", )))))
          if image=="":
              root.destroy()
              sys.exit("Image failed!")
          
          image = os.path.realpath(image)     #Sans ceci, ca ne le fait pas pour les donnés du réseau
          fimg = open(image,"rb")
          try:
              img, fname, dataOut = fimg.read().split(tag)    #récupération des données, et du nom du fichier caché
          except:
              root.destroy()
              sys.exit("Not a py_hide hacked image")
          root.destroy()
          fpath = os.path.join(os.path.split(image)[0], fname)
          ficOut, ext = os.path.splitext(fpath)
          print ficOut, fname, fpath
          fout = open("%s_unHacked%s" %(ficOut, ext),"wb")
          fout.write(dataOut)
          fout.close()
          fimg.close()
          sys.exit("Merci d'avoir utilisé...'PyUnHide-hacker'")
          En gros, il faut juste copier l'image en premier, et moyennant une ou deux modification on niveau de la récupération du fichier, et de la sauvegarde il serait possible d'en faire une "ARCHIVE" (On se croirait faire du XML en binaire :aie: )

          Commentaire


          • #20
            Cela marche avec ce tag ? Il me semble que l'image n'est pas lisible avec.
            J'aurais plutot fais un truc du style
            Code:
            import os
            import binascii 
            
            flag = binascii.a2b_uu("FLAG")
            
            def ecrire(out, ftocacher):
                with open(out, 'rb') as output:
                    with open(ftocacher, 'rb') as cacher:
                        with open('new.jpg', 'wb') as nouveau:
                            name, ext = ftocacher.split('.')
                            name = binascii.a2b_qp(name)
                            ext = binascii.a2b_qp(ext)
                            nouveau.write(output.read()+flag+name+flag+ext+flag+cacher.read())
            
            def lire(infile):
                with open(infile, 'rb') as filein:
                    result = filein.read().split(flag)
                filename = binascii.b2a_qp(result[1])
                ext = binascii.b2a_qp(result[2])
                with open(filename+'.'+ext, 'wb') as output:
                    output.write(result[3])
            
            ecrire('Coucher de soleil.jpg', 'testcomp.py')
            os.remove('testcomp.py')
            lire('new.jpg')
            Dernière modification par PauseKawa, 28 décembre 2011, 16h41.

            Commentaire


            • #21
              Envoyé par PauseKawa Voir le message
              Cela marche avec ce tag ? Il me semble que l'image n'est pas lisible avec.
              Si, parfaitement. J'ai moi aussi au départ cru qu'elle serait illisible après un coup d'oeil(Notepad++) dans celle produite par la première version, je me suis rendu compte qu'elle contenait même déjà le nom du fichier "caché" alors un autre nom ou texte après l'<IMAGE>, ca devait pas lui faire de mal.
              Et puis, vu que c'est dans un but de "cacher", le TAG/FLAG, pourrait être récupérer chez l'utilisateur, ca jouerai le rôle de clé
              Dernière modification par afranck64, 28 décembre 2011, 16h56.

              Commentaire


              • #22
                Envoyé par afranck64 Voir le message
                Je me pose à présent une question. Il doit bien y avoir un moyen pour récupérer ce qui a été concatené dans l'image pas vrai ? Alors comment le faire ?

                "uncat imagehacked originalimage outputfile" ?

                Spécialement sous win32 (les chats(cat) je les aime pas)
                unzip image.jpg
                WITHOUT DEVIATION FROM THE NORM, PROGRESS IS NOT POSSIBLE
                -Frank Zappa

                Commentaire


                • #23
                  Salut afranck64 et PauseKawa,

                  @afranck64
                  Code:
                  if image=="":     
                      root.destroy()     
                      sys.exit("Image failed!")
                  On pourrait pas éviter de sortir brutalement, sachant que le bouton annuler est existant?

                  L'ouverture des fichiers avec with open est plus safe et permet d'éviter les oublis close()

                  @PauseKawa

                  Je préfère largement cette solution car beaucoup plus portable évidemment.

                  binascii, si j'ai bien compris c'est pour transformer ton "FLAG" en binaire et le rajouter dans ton texte binaire?

                  Si oui j'aurais pensé à tout sauf ça

                  Commentaire


                  • #24
                    Envoyé par fred Voir le message
                    On pourrait pas éviter de sortir brutalement, sachant que le bouton annuler est existant?
                    Si, bien entendu (Mais il m'a pas laissé le choix ).
                    Envoyé par fred Voir le message
                    L'ouverture des fichiers avec with open est plus safe et permet d'éviter les oublis close()
                    Je m'éfforcerai de le rappeler à mon cerveau
                    Envoyé par fred Voir le message
                    @PauseKawa

                    Je préfère largement cette solution car beaucoup plus portable évidemment.

                    binascii, si j'ai bien compris c'est pour transformer ton "FLAG" en binaire et le rajouter dans ton texte binaire?

                    Si oui j'aurais pensé à tout sauf ça
                    Faut dire que moins non plus j'y avait pas pensé.

                    Commentaire


                    • #25
                      un simple pass et tu résouds celà, même si c'est écris dans son code, c'est inutile sachant qu'il y a le bouton annuler.

                      Code:
                      if not image: pass

                      Commentaire


                      • #26
                        Envoyé par fred Voir le message
                        un simple pass et tu résouds celà, même si c'est écris dans son code, c'est inutile sachant qu'il y a le bouton annuler.
                        Bah, s'il n'y a pas d'image, c'est comme une FATAL_ERROR, le programme n'a rien à se mettre sous alors, je pense que c'est pas la peine d'encombrer le UO un peu plus.

                        Commentaire


                        • #27
                          Bah, s'il n'y a pas d'image, c'est comme une FATAL_ERROR, le programme n'a rien à se mettre sous alors, je pense que c'est pas la peine d'encombrer le UO un peu plus.
                          Il faut une image! Donc tant qu'il en met pas, rien ne se passe. Sinon à quoi sert le bouton annuler pour sortir de la fenêtre de sélection?

                          Commentaire


                          • #28
                            Envoyé par fred Voir le message
                            Il faut une image! Donc tant qu'il en met pas, rien ne se passe. Sinon à quoi sert le bouton annuler pour sortir de la fenêtre de sélection?
                            Au risque de passer pour le Z-des-Z, j'ai toujours pas compris où tu voulais en venir

                            Commentaire


                            • #29
                              Au risque de passer pour le Z-des-Z, j'ai toujours pas compris où tu voulais en venir
                              ça risque pas

                              Bah, s'il n'y a pas d'image, c'est comme une FATAL_ERROR, le programme n'a rien à se mettre sous alors, je pense que c'est pas la peine d'encombrer le UO un peu plus.
                              C'est là que je ne comprend pas ton point de vue, car en fait tu demandes une image.

                              Si t'en as pas --> tu annules en cliquant sur le bouton annuler (sort de la sélection de fichier) puis click sur la croix pour sortir du prog proprement

                              Si tu en as --> déplacement de l'archive vers l'image

                              Voilà comment je vois les choses, mais bon est-ce vraiment important sur le principe, je doute, mais bon cela me semblait plus naturel.

                              Commentaire

                              Chargement...
                              X