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

  • Script Python Cacher une image dans une archive pyhide.py



    Code:
    #!/usr/bin/env python
    # -*- coding: iso-8859-1 -*-
    
    
    #----- imports
    
    from Tkinter import *
    import os
    
    
    
    #---------- Fonctions
    
    def compiler():
       image_ = str(nom_image.get())
       archive_ = str(nom_archive.get())
    
       os.system("cat "+archive_ + " >> "+image_)
    
    
       if image_ == "" or archive_ == "":
            fenerror = Tk()
            fenerror.title('ERROR')
            fenerror.geometry("150x80+400+400")
            fenerror.configure(bg = "black")
    
    
    
            labelerror = Label(fenerror)
           labelerror.configure(text = "L'un des 2 champs n'est\npas correctement renseigné")
            labelerror.configure(bg = "black", fg = "orange")
           labelerror.pack()
           labelerror.grid(row =1, column =1)
    
    
           espaceerror = Label(fenerror)
           espaceerror.configure(text = "")
          espaceerror.configure(bg = "black", fg = "orange")
           espaceerror.pack()
           espaceerror.grid(row =2, column =1)
       
       
           buttonerror = Button(fenerror,text='   Ok   ',command=fenerror.destroy)
          buttonerror.configure(bg = "black", fg="green")
           buttonerror.pack()
           buttonerror.grid(row =3, column =1)
       else:
    
    #------------------------------------deuxieme fenetre
            
          fen = Tk()
          fen.title('PyHide-hacker')
          fen.geometry("180x90+500+450")
          fen.configure(bg = "black")
    
    
    
          monlabel = Label(fen)
          monlabel.configure(text = "Merci d'avoir utilisé PyHideHacker\ncordialement , IceF0x")
          monlabel.configure(bg = "black", fg = "orange")
          monlabel.pack()
          monlabel.grid(row =1, column =1)
    
    
          espacemini = Label(fen)
          espacemini.configure(text = "")
          espacemini.configure(bg = "black", fg = "orange")
          espacemini.pack()
          espacemini.grid(row =2, column =1)
    
    
          button = Button(fen,text='   Ok   ',command=fen.destroy)
          button.configure(bg = "black", fg="green")
          button.pack()
          button.grid(row =3, column =1)
    
    
    #-------------fenetre
    
    root = Tk()
    root.title('PyHide-hacker')
    root.geometry("290x180+500+450")
    root.configure(bg = "black")
    
    #---------- Espacement des fenetres
    
    espace = Label(root)
    espace.configure(text = "")
    espace.configure(bg = "black", fg = "orange")
    espace.pack()
    espace.grid(row =1, column =1)
    
    
    espace2 = Label(root)
    espace2.configure(text = "")
    espace2.configure(bg = "black", fg = "orange")
    espace2.pack()
    espace2.grid(row =3, column =1)
    
    
    espace3 = Label(root)
    espace3.configure(text = "")
    espace3.configure(bg = "black", fg = "orange")
    espace3.pack()
    espace3.grid(row =5, column =1)
    
    
    espace4 = Label(root)
    espace4.configure(text = "")
    espace4.configure(bg = "black", fg = "orange")
    espace4.pack()
    espace4.grid(row =7, column =1)
    
    #--------------
    #-------------------------Labels
    label_image = Label(root)
    label_image.configure(text = "         Image :  ")
    label_image.configure(bg = "black", fg = "orange")
    label_image.pack()
    label_image.grid(row =2, column =1)
    
    
    label_archive = Label(root)
    label_archive.configure(text = "        Archive :  ")
    label_archive.configure(bg = "black", fg = "orange")
    label_archive.pack()
    label_archive.grid(row =4, column =1)
    
    
    #--------------------------------Entry
    
    nom_image = Entry(root)
    nom_image.bind("<Return>")
    nom_image.configure(bg = "black", fg = "purple")
    nom_image.pack()
    nom_image.grid(row =2, column =2)
    
    nom_archive = Entry(root)
    nom_archive.bind("<Return>")
    nom_archive.configure(bg = "black", fg = "purple")
    nom_archive.pack()
    nom_archive.grid(row =4, column =2)
    
    
    #--------------------------------Bouton
    
    
    button_compiler = Button(root,text='compresser',command=compiler)
    button_compiler.configure(bg = "black", fg="green")
    button_compiler.pack()
    button_compiler.grid(row =8, column =2)
    
    root.mainloop()
    Source : fr0g
    Dernière modification par comaX, 15 décembre 2011, 11h14.
    " Une teuf sans drogue c'est comme une levrette sans fessé, c'est quand même rare. "

    †|

  • #2
    il est possible de le rendre compatible avec Windows en modifiant quelques ligne.
    final_ = str(nom_fichier_final.get())

    code = "copy /b "+image_+" + "+archive_+" "+final_

    os.system(code)
    Et une entry dans la fenêtre tk.
    WITHOUT DEVIATION FROM THE NORM, PROGRESS IS NOT POSSIBLE
    -Frank Zappa

    Commentaire


    • #3
      En fait ce code est très très ... répétitif, je prend un exemple pour Label

      Code:
      def create_label(ligne, colonne):
               Label(root, text='', fg = 'orange', bg = 'black').pack()
               Label.grid(row=ligne, column=colonne)
      
      for i in range(1, 9, 2):
               create_label(i, 1) # crée tous les labels espace de ligne 1 à 7 par pas de 2
      C'est un exemple, mais on peut l'appliquer beaucoup de fois dans ton code

      Commentaire


      • #4
        Pour les indentions:
        Code:
        #!/usr/bin/env python
        # -*- coding: iso-8859-1 -*-
        
        
        #----- imports
        
        from Tkinter import *
        import os
        
        
        
        #---------- Fonctions
        
        def compiler():
           image_ = str(nom_image.get())
           archive_ = str(nom_archive.get())
        
           os.system("cat "+archive_ + " >> "+image_)
        
        
           if image_ == "" or archive_ == "":
                fenerror = Tk()
                fenerror.title('ERROR')
                fenerror.geometry("150x80+400+400")
                fenerror.configure(bg = "black")
        
        
        
                labelerror = Label(fenerror)
                labelerror.configure(text = "L'un des 2 champs n'est\npas correctement renseigné")
                labelerror.configure(bg = "black", fg = "orange")
                labelerror.pack()
                labelerror.grid(row =1, column =1)
        
        
                espaceerror = Label(fenerror)
                espaceerror.configure(text = "")
                espaceerror.configure(bg = "black", fg = "orange")
                espaceerror.pack()
                espaceerror.grid(row =2, column =1)
        
        
                buttonerror = Button(fenerror,text='   Ok   ',command=fenerror.destroy)
                buttonerror.configure(bg = "black", fg="green")
                buttonerror.pack()
                buttonerror.grid(row =3, column =1)
           else:
        
        #------------------------------------deuxieme fenetre
        
              fen = Tk()
              fen.title('PyHide-hacker')
              fen.geometry("180x90+500+450")
              fen.configure(bg = "black")
        
        
        
              monlabel = Label(fen)
              monlabel.configure(text = "Merci d'avoir utilisé PyHideHacker\ncordialement , IceF0x")
              monlabel.configure(bg = "black", fg = "orange")
              monlabel.pack()
              monlabel.grid(row =1, column =1)
        
        
              espacemini = Label(fen)
              espacemini.configure(text = "")
              espacemini.configure(bg = "black", fg = "orange")
              espacemini.pack()
              espacemini.grid(row =2, column =1)
        
        
              button = Button(fen,text='   Ok   ',command=fen.destroy)
              button.configure(bg = "black", fg="green")
              button.pack()
              button.grid(row =3, column =1)
        
        
        #-------------fenetre
        
        root = Tk()
        root.title('PyHide-hacker')
        root.geometry("290x180+500+450")
        root.configure(bg = "black")
        
        #---------- Espacement des fenetres
        
        espace = Label(root)
        espace.configure(text = "")
        espace.configure(bg = "black", fg = "orange")
        espace.pack()
        espace.grid(row =1, column =1)
        
        
        espace2 = Label(root)
        espace2.configure(text = "")
        espace2.configure(bg = "black", fg = "orange")
        espace2.pack()
        espace2.grid(row =3, column =1)
        
        
        espace3 = Label(root)
        espace3.configure(text = "")
        espace3.configure(bg = "black", fg = "orange")
        espace3.pack()
        espace3.grid(row =5, column =1)
        
        
        espace4 = Label(root)
        espace4.configure(text = "")
        espace4.configure(bg = "black", fg = "orange")
        espace4.pack()
        espace4.grid(row =7, column =1)
        
        #--------------
        #-------------------------Labels
        label_image = Label(root)
        label_image.configure(text = "         Image :  ")
        label_image.configure(bg = "black", fg = "orange")
        label_image.pack()
        label_image.grid(row =2, column =1)
        
        
        label_archive = Label(root)
        label_archive.configure(text = "        Archive :  ")
        label_archive.configure(bg = "black", fg = "orange")
        label_archive.pack()
        label_archive.grid(row =4, column =1)
        
        
        #--------------------------------Entry
        
        nom_image = Entry(root)
        nom_image.bind("<Return>")
        nom_image.configure(bg = "black", fg = "purple")
        nom_image.pack()
        nom_image.grid(row =2, column =2)
        
        nom_archive = Entry(root)
        nom_archive.bind("<Return>")
        nom_archive.configure(bg = "black", fg = "purple")
        nom_archive.pack()
        nom_archive.grid(row =4, column =2)
        
        
        #--------------------------------Bouton
        
        
        button_compiler = Button(root,text='compresser',command=compiler)
        button_compiler.configure(bg = "black", fg="green")
        button_compiler.pack()
        button_compiler.grid(row =8, column =2)
        
        root.mainloop()
        Ca le ferait peut-être plus cool (simple d'usage) avec des dialogues Open-File

        Commentaire


        • #5
          Envoyé par afranck64 Voir le message
          Ca le ferait peut-être plus cool (simple d'usage) avec des dialogues Open-File
          http://tkinter.unpythonic.net/wiki/tkFileDialog
          WITHOUT DEVIATION FROM THE NORM, PROGRESS IS NOT POSSIBLE
          -Frank Zappa

          Commentaire


          • #6
            Merci Iddl3,

            Mais je pense que ce que voulait dire afranck64, c'est que la boîte de dialogue semble plus adapté pour cet exercice

            Commentaire


            • #7
              Envoyé par fred Voir le message
              Merci Iddl3,

              Mais je pense que ce que voulait dire afranck64, c'est que la boîte de dialogue semble plus adapté pour cet exercice
              On dirait qu'il a fait un afranck64.getPensees().

              Commentaire


              • #8
                Envoyé par afranck64 Voir le message
                On dirait qu'il a fait un afranck64.getPensees().
                sigpic

                Cyprium Download Link

                Plus j'étudie plus j'me rends compte que je n'sais rien.

                †|

                Commentaire


                • #9
                  Pour une version avec File-Dialogs (mais sans véritable GUI cerveau en rame).
                  Code:
                  #!/usr/bin/env python
                  # -*- coding: iso-8859-1 -*-
                  
                  
                  #----- 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
                  
                  
                  #---------- Fonctions
                  def compiler(image, archive):
                      if image=="" or archive=="":
                          sys.exit("Image or Archive failed!")
                      if sys.platform == "win32":
                          fic,ext = os.path.splitext(archive)
                          cmd = "copy /b %s+%s %s_edited%s" % (archive,image, fic, ext)  #Commande propre à win32
                      else:
                          cmd = "cat %s >> %S" % (archive, archive)   #Commande propre à linux (pour les autres os j'ai aucune idée alors, on balance tout ici)
                      os.system(cmd)
                  
                  #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", )))))
                  #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"), ("Toutes Archives", (".zip", ",cab", ".rar", ".7z", ".jar"))))
                  root.destroy()
                  compiler(image, archive)
                  sys.exit("Merci d'avoir utiliser...'PyHide-hacker'")
                  Il le fait sous Linux? Moi(win32) je suis obligé de balancer les params(image, archive) à un batch(qui effectue juste la commande copy /b args[1]+args[2] args[3]) pour que ca le fasse.

                  Commentaire


                  • #10
                    Marche pas sous linux alors que le code principal fonctionne, je pense qu'il faudrait simplement rajouter l'open file dialog au premier code.
                    WITHOUT DEVIATION FROM THE NORM, PROGRESS IS NOT POSSIBLE
                    -Frank Zappa

                    Commentaire


                    • #11
                      @afranck64

                      L'idée est bien de compresser une image choisi dans une archive, n'est-ce pas?

                      Si oui, zipfile?

                      En ce qui concerne l'archive, elle doit être créée avant ou à la volée?

                      Commentaire


                      • #12
                        Envoyé par fred Voir le message
                        @afranck64

                        L'idée est bien de compresser une image choisi dans une archive, n'est-ce pas?

                        Si oui, zipfile?

                        En ce qui concerne l'archive, elle doit être créée avant ou à la volée?
                        Rien a voir, le tool cache une archive dans une image via une commande très connue de concaténation "cat"

                        cat archive.zip >> image.jpg les doubles chevrons sont important car un simple chevron remplacerait l'image par l'archive.
                        WITHOUT DEVIATION FROM THE NORM, PROGRESS IS NOT POSSIBLE
                        -Frank Zappa

                        Commentaire


                        • #13
                          Me disais bien que j'avais pas capté le bidule

                          Je ne savais pas que c'était possible ça

                          En fait c'est quoi l'intérêt de cacher une archive dans une photo?

                          Commentaire


                          • #14
                            Eh bien ça mon cher confrère, c'est l'art de la stéganographie ! Dissimuler x dans y via z

                            Ce peut être dans une image dans une image, un texte dans un fichier audio, etc.

                            Je te donne un exemple concret qui va te faire comprendre l'importance de la stégano :

                            Tu es pianiste et pond un bel album de 20 titres (mixés, masterisés, prêts à être distribués). Tu contactes une major : "êtes-vous intéressé par mon album ?" et tu leur fournis l'album en question. Ils aiment beaucoup ton travail et se l'approprient en te disant "nous ne sommes pas intéressés". Ils sortent les titres sous un pseudonyme bidon.

                            1. Tu as été malin et a mis dans chaque titre toutes les 30 secondes la phrase (sous forme audio, texte ou image) : "propriété de Fred le Python, artiste pianiste, réalisée le 28 décembre 2011". Tu les poursuis en justice et leur mets bien profond.
                            2. Tu n'as pas été très malin, tu n'as rien watermarked, et c'est toi qui l'a bien profond

                            Ceci un exemple parmi beaucoup d'autres bien entendu.

                            La stéganographie est donc l'art de "dissimuler un message", qu'importe la manière (et il y en a beaucoup). Tu auras l'occasion de comprendre cela plus sérieusement très bientôt
                            sigpic

                            Cyprium Download Link

                            Plus j'étudie plus j'me rends compte que je n'sais rien.

                            †|

                            Commentaire


                            • #15
                              Mais faudrait pouvoir récupérer les données ensuite sinon ...

                              Envoyé par Iddl3 Voir le message
                              Marche pas sous linux alors que le code principal fonctionne, je pense qu'il faudrait simplement rajouter l'open file dialog au premier code.
                              Exact, pour le else(linux et autres) j'ai fait cat "archive", "archive" dans le post précédent.
                              Voici le code remanié et fonctionnel sous win32 L'image produite est image_hacked(en attente des retour de linux_et_companic-iens pour confirmation).
                              Code:
                              #!/usr/bin/env python
                              # -*- coding: iso-8859-1 -*-
                              
                              
                              #----- 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
                              
                              #---------- Fonctions
                              def 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
                                  if sys.platform == "win32":
                                      fic,ext = os.path.splitext(image)
                                      with open("exec.bat", "w") as fExec:
                                          fExec.write("copy /b %1+%2 %3")
                                      cmd = 'exec "%s" "%s" "%s_hacked%s"' % (image, archive, fic, ext)  #Commande propre à win32
                                      os.system(cmd)
                                      os.remove("exec.bat")
                                  else:
                                      cmd = 'cat "%s" >> "%s"' % (archive, image)   #Commande propre à linux (pour les autres os j'ai aucune idée alors, on balance tout ici)
                                      os.system('cp "%s" "%s_hacked%s"' % (image, fic, ext))
                                      os.system(cmd)
                              
                              #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)
                              sys.exit("Merci d'avoir utiliser...'PyHide-hacker'")
                              La méthode est, simple, mais tout simplement géniale. 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)
                              Dernière modification par afranck64, 28 décembre 2011, 14h09.

                              Commentaire

                              Chargement...
                              X