Aide ! Récupérer le langage binaire d'un fichier.

Aide ! Récupérer le langage binaire d'un fichier. - Divers - Programmation

Marsh Posté le 05-05-2011 à 11:30:34    

Salut ! Je suis un gros newbie, donc désolé d'avance pour les termes que je vais utiliser, si ils ne sont pas corrects.
 
Je suis en école d'art et pour l'un de mes projets, j'ai besoin de récupérer les données binaires d'un fichier (jpeg, mp3, peu importe...). Je ne maîtrise que bien peu les langages de programmation (ActionScript 2 tout au plus) malheureusement.
 
J'ai trouvé un logiciel, Hexfiend, qui me permet de récupérer les données hexadécimal de mon fichier, mais je n'ai rien trouvé qui me permette de transformer ces données en binaire : les seules choses que j'ai trouvées me permettent simplement de transformer des minuscules portions du code. Je me dis que le script doit être plus ou moins le même, sauf que je veux l'appliquer sur la totalité de mon fichier hexadécimal (qui comporte, comme vous pouvez l'imaginer, une grosse quantité de chiffres et de lettres).
 
Sinon, sur des forums je suis tombé sur des lignes de code en langage Delphi 5, ou C. J'ai essayé de les trafiquer un peu avec TextMate, mais ça n'a rien donné de bien concluant, étant donné que je ne suis pas programmateur. Donc je n'ai pas réussi à compiler ça.
 
Donc ce que je cherche, concrètement, c'est un script, ou même un programme, qui me permette de récupérer sous forme de texte, le langage primaire du fichier : des 0 et des 1. Le concept me paraît simple, mais pourtant, je n'ai rien trouvé de concret sur internet à propos de cela. (Peut etre que j'ai mal cherché aussi).
 
Pour information, je suis sous Mac OSX Snow Leopard, j'ai la suite Adobe et quelques logiciels de programmation (le Apple Developer Kit, avec Dashcode, Xcode, et Quartz Composer, le seul des trois auxquels j'ai déjà un peu touchés).
 
Donc si il y en a qui sont chauds pour m'aider, c'est Hyper cool !
 
En attendant, je vous souhaite de passer une bonne après-midi !
 
bisous,
Alexis

Reply

Marsh Posté le 05-05-2011 à 11:30:34   

Reply

Marsh Posté le 05-05-2011 à 11:51:05    

Donc ce que tu veux c'est passer du code hexa au code binaire? c'est bien ça?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-05-2011 à 11:53:50    

Ouais ! Passer un gros code hexa en binaire.

Reply

Marsh Posté le 05-05-2011 à 11:57:02    

D'accord, mais t'as compris, conceptuellement parlant, quel est le lien entre l'hexa et le binaire? Parce que ça me semble couler de source ensuite..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-05-2011 à 12:02:00    

Ben en fait dans mon processus de vouloir revenir au langage le plus primitif d'un fichier, j'ai cru comprendre que l'hexadécimal était une sorte d'intermédiaire. Comme j'ai réussi à trouver un moyen de récupérer ce code hexa, je me suis dit que c'était peut-être plus facile ensuite de récupérer le binaire, étant donné que c'était déjà transformé en texte. J'ai peut-être faux.
Encore une fois, ce qui m'intéresse, c'est le binaire, l'hexadécimal ne m'intéresse pas. Si il y a une méthode (gratuite, bien sur) pour passer du fichier fini (jpeg etc.) à son langage binaire directement, je prends !

Reply

Marsh Posté le 05-05-2011 à 13:20:32    

Ton besoin n'est pas clair du tout. Tu peux être plus précis sur la finalité de l'opération ?
 
Ton fichier est déjà du binaire ! Hexfiend t'affiche son contenu sous une forme hexadécimale parce que c'est plus exploitable (comprends "lisible pour un humain" ) que des 0 et des 1 bruts.
 
Dans ton éditeur, chaque octet de ton fichier est représenté par 2 caractères en hexadécimal. Un caractère représente donc un demi octet, soit 4 bits, d'où la correspondance suivante :
car. hexa              séquence de bits
     0        ------->        0 0 0 0
     1        ------->        0 0 0 1
     2        ------->        0 0 1 0
               .
               .
               .
     e        ------->        1 1 1 0
     f        ------->        1 1 1 1
 
Je ne vois pas ce que tu veux de plus...

Reply

Marsh Posté le 05-05-2011 à 13:45:40    

La finalité de l'opération, d'avoir, en .txt, la suite de 0 et de 1 qui correspond à la photographie que j'ai prise. Le but n'est pas que ce soit "lisible pour un humain", c'est purement abstrait.

Reply

Marsh Posté le 05-05-2011 à 13:50:03    

Clair, je comprends pas le besoin final :??: Concrètement, tu veux faire quoi avec le code binaire?
 
Comme l'a dit shaoyin, un .exe est précisément du binaire (c'est pour ça du rste, que pour désigner un exécutable on parle souvent de binaire).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 05-05-2011 à 13:52:28    

C'est pour une utilisation visuelle du code et non à des issus de programmation.
 
En gros c'est comme s'il voulais avoir la matrice sous les yeux. Sauf que plutôt qu'avoir un code bidon, il veux le vrai code qui correspond au fichier, le vrai authentique.

Reply

Marsh Posté le 05-05-2011 à 13:54:59    

Voilà ! Fabz a clairement explicité la situation je pense.

Reply

Marsh Posté le 05-05-2011 à 13:54:59   

Reply

Marsh Posté le 05-05-2011 à 14:17:56    

Ah d'accord... Je vois le truc !
 
Je ne connais pas d'outil qui fasse ca et je doute qu'il en existe un... Parce que produire un fichier 8 fois plus gros que l'original et qui ne sert à rien, c'est un besoin assez spécifique tout de même !
 
Cela dit, ça n'est pas d'une grande complexité.

Reply

Marsh Posté le 05-05-2011 à 14:24:21    

Si c'est pas d'une grande complexité, c'est donc encourageant ! Alors du coup, ce serait de quelle manière ?

Reply

Marsh Posté le 05-05-2011 à 14:35:05    

Le problème est que les fichiers d'image, ou de son, sont presque tout le temps compressés.
 
Pour avoir les pixels d'une image, il est donc nécessaire de décompresser le fichier et ce n'est pas facile à faire.  
Cela dépend de la méthode de compression utilisée, et des outils à sa disposition pour le faire.
 
Bon courage !

Reply

Marsh Posté le 05-05-2011 à 14:46:20    

Et si je prends mes photos en RAW ? Ce sera quand même compressé ?

Reply

Marsh Posté le 05-05-2011 à 14:59:43    

Ah oui, j'avais oublié ce petit détail qui change toute la donne ! Enfin, peut-être pas. Tout dépend du besoin en fait.
 
Mais j'imagine que c'est le contenu décompressé que tu veux, ElaxisP ?  
 
Et si c'est le contenu pur que tu veux, j'imagine que l'entête du fichier ne doit pas être traité non plus ? Dans ce cas, ce n'est pas aussi simple que je pensais au premier abord...

Reply

Marsh Posté le 05-05-2011 à 15:13:26    

Ben suffit de faire afficher en mode binaire le contenu du fichier ou coder un petit programme qui transforme le binaire en sa représentation 0/1 sous forme de caractères...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 05-05-2011 à 15:18:10    

Dans l'idéal, j'aimerais que le code soit le plus universel possible, donc sans compression, sans métadonnées.
Peut-être qu'une solution serait le bitmap, bien sûr, mais je pense que ce serait un peu trop facile :D. Cela dit, si déjà on trouve comment faire avec un bitmap, ce sera hyper bien.

Reply

Marsh Posté le 05-05-2011 à 15:20:31    

Tu peux essayer un truc de ce genre, en perl, si tu veux juste une représentation avec des 0 et des 1 du contenu d'un fichier quelconque:
 
fichier binstring.pl

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. while (<> ) {
  6.  print unpack("B*", pack("a*", $_));
  7. }

si je l'essaie sur un fichier quelconque (ici, hello.exe, un executable qui affiche hello world)
C:\Perl>perl binstring.pl hello.exe
0100110101011010011000000000000000000001000000000000000000000000........................................
(une seule ligne assez longue)
 
Apres, si pour un fichier image comprimée, tu veux l'équivalent juste pour l'image, il faudra
1) avoir au départ une image non comprimée (donc sauvée en tiff par exemple)
2) virer les headers de l'image
3) appliquer une transformation comme précédemment au reste
A+,


Message édité par gilou le 05-05-2011 à 15:24:01

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-05-2011 à 15:29:21    

Merci gilou pour ton post !
 
Comme je n'ai pratiquement aucune notion en programmation, j'ai un peu du mal à cerner la chose, mais j'ai l'impression que ta méthode fonctionne.
 
Donc j'ai quelques questions : avec quoi peut-on faire du perl sur mac, et qu'est-ce que vous appelez "headers de l'image" (et en même temps du coup, comment les virer ?)

Reply

Marsh Posté le 05-05-2011 à 15:40:28    

Le header stocke différentes infos sur le contenu du fichier : taille, checksum, paramètres d'échantillonage, type de fichier...
 
Chaque format d'image, de son, etc. utilise un header avec une structure spécifique. Comme son nom l'indique, il est stocké en tête de fichier et ne fait pas partie de l'image ou du son lui même. Il est juste là pour permettre le décodage du fichier.
 
Pour les virer, il "suffit" de sauter les n premiers octets du fichier où n est la taille de l'entête. Mais cela sous-entend que le contenu n'est pas compressé.

Reply

Marsh Posté le 05-05-2011 à 15:49:08    

Pour le perl: Active Perl gratuit
http://www.activestate.com/activeperl/downloads
Il y a peut être déja un perl en standard sur Mac mais je n'en sais rien, à vérifier avant.
 
Les headers, ce sont des en têtes du fichier qui contiennent des données telles que Date de creation du fichier, taille de l'image, etc. La spécification tiff se trouve ici: http://partners.adobe.com/public/d [...] index.html mais en fait je pense pas trop qu'elle vous soit utile.
 
L'outil le plus courant pour manipuler les images a travers perl est ImageMagick:  http://www.imagemagick.org/script/ [...] mageMagick Une fois installé, et le module perl Image::Magick de CPAN installé, il doit y avoir moyen de récupérer uniquement la bitmap (et plus tard, avec ImageMagic, il doit y avoir moyen de faire tout ça pour des fichiers compressés en jpg aussi)
 
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-05-2011 à 15:53:47    

shaoyin a écrit :

Le header stocke différentes infos sur le contenu du fichier : taille, checksum, paramètres d'échantillonage, type de fichier...
 
Chaque format d'image, de son, etc. utilise un header avec une structure spécifique. Comme son nom l'indique, il est stocké en tête de fichier et ne fait pas partie de l'image ou du son lui même. Il est juste là pour permettre le décodage du fichier.
 
Pour les virer, il "suffit" de sauter les n premiers octets du fichier où n est la taille de l'entête. Mais cela sous-entend que le contenu n'est pas compressé.

C'est pour cela que j'ai dit de passer par du TIFF (rarement compressé dans la pratique, quoique ça doit être possible dans la spec).
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-05-2011 à 20:54:58    

sinon comme jte disais programmer une petite calculette sous flash qui converti ton code hexa :p

Reply

Marsh Posté le 06-05-2011 à 08:26:19    

Fabz49 a écrit :

sinon comme jte disais programmer une petite calculette sous flash qui converti ton code hexa :p


 
Pourquoi pas en Labview ou Matlab tant qu'à faire dans l'inutilement lourd?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-05-2011 à 10:33:01    

Salut ! Bon bah je n'arrive pas à faire fonctionner ActivePerl (il n'apparaît pas dans mon dossier Applications). Est-ce que vous pourriez m'expliquer comment ça fonctionne ?

Reply

Marsh Posté le 06-05-2011 à 10:58:53    

Normalement, perl est déjà installé sur Mac OS X. Si tu as saisi le script de gilou dans un fichier texte (par exemple "script.pl" ), il ne reste qu'à mettre des droits d'exécution dessus.
 
Pour l'exécuter, tu ouvres un terminal, et tu lances ton script en tapant :
<chemin de ton script>/script.pl <nom du fichier binaire que tu veux traiter>
 
Bon, voilà déjà une base. Tu vas sûrement rencontrer des erreurs, alors on traitera au cas par cas.

Reply

Marsh Posté le 06-05-2011 à 11:27:47    

J'ai fait un premier test. J'ai collé le code de gilou comme tel dans TextEdit, et je l'ai enregistré en UTF-8, et j'ai donné l'extension .pl
 
Ensuite, j'ai ouvert le terminal et j'ai fait un glissé déposé tu .pl dedans, pour avoir son chemin d'accès. J'ai ensuite rajouté le nom d'une image en .tiff entre les balises, comme shaoyin m'a dit de faire.
 
Voila ce que ca donne :
 
http://images.imagehotel.net/pdgyb99g95.jpg

Reply

Marsh Posté le 06-05-2011 à 11:56:54    

Heu... non ! Les balises étaient juste là pour identifier des champs à adapter selon ton cas. Ici, il faut simplement mettre 26-lennon.tiff, sans les "<" ">"

Reply

Marsh Posté le 06-05-2011 à 12:02:57    

Malheureusement ca ne marche toujours pas.
 
"Permission denied"

Reply

Marsh Posté le 06-05-2011 à 12:05:50    

As-tu mis les droits d'exécution sur ton fichier ? Dans ton terminal, tape la commande :
chmod u+x /Users/ElaxisP/Desktop/binaire.pl
 
Puis refais une tentative.

Reply

Marsh Posté le 06-05-2011 à 12:20:12    

Ca me met ça :
 
MacBook-de-Alexis-Petard:~ ElaxisP$ chmod u+x /Users/ElaxisP/Desktop/binaire.pl MacBook-de-Alexis-Petard:~ ElaxisP$ /Users/ElaxisP/Desktop/binaire.pl 26-lennon.tif
/Users/ElaxisP/Desktop/binaire.pl: line 2: use: command not found
/Users/ElaxisP/Desktop/binaire.pl: line 3: use: command not found
/Users/ElaxisP/Desktop/binaire.pl: line 5: syntax error near unexpected token `)'
/Users/ElaxisP/Desktop/binaire.pl: line 5: `    while (<> ) {'
MacBook-de-Alexis-Petard:~ ElaxisP$  
 
 

Reply

Marsh Posté le 06-05-2011 à 13:08:38    

Assure toi que le caractère '#' de la première ligne du script soit bien en tout début de ligne (supprime tous les espaces situés avant).
 
Autrement, tu peux essayer aussi de lancer ton script en tapant :
perl /Users/ElaxisP/Desktop/binaire.pl 26-lennon.tif
 
Si cette dernière commande ne marche pas, c'est que perl n'est pas installé sur ta machine.

Reply

Marsh Posté le 06-05-2011 à 13:19:51    

Il a peut être pas perl en /usr/bin, je ne sais pas comment c'est sur un mac.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 06-05-2011 à 13:21:41    

C'est vrai ! Bonne remarque...
Si c'est le cas cependant, la dernière commande devrait marcher.

Reply

Marsh Posté le 06-05-2011 à 13:23:17    

Notes qu'au vu de cet article, ça devrait pourtant être la cas: http://www.mactech.com/articles/ma [...] index.html
perl devrait être en /usr/bin
 
Déja s'il est en mode console et qu'il tape perl -v on devrait être fixé.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 06-05-2011 à 13:40:45    

Citation :

Pourquoi pas en Labview ou Matlab tant qu'à faire dans l'inutilement lourd?


héhé sauf qu'on ne connait que l'AS3. On est dans le graphisme donc pas dutout développeur mais utilisateur.
 
 
Sinon si tu y arrive Elax tu me montrera comment tu aura fait, ça m'intéresse ces bidouilles la ^^

Reply

Marsh Posté le 06-05-2011 à 13:48:57    

après avoir tappé perl -v, je tombe sur "this is perl v5.10.0" etc. etc.
 
Donc j'ai perl.
 
j'ai enlevé tous les espaces avant le # dans mon script, et j'ai essayé cette ligne de code dans le terminal :
 
perl /Users/ElaxisP/Desktop/binaire.pl 26-lennon.tif  
 
voilà le résultat :
 
MacBook-de-Alexis-Petard:~ ElaxisP$ perl /Users/ElaxisP/Desktop/binaire.pl 26-lennon.tif  
Can't open 26-lennon.tif: No such file or directory at /Users/ElaxisP/Desktop/binaire.pl line 5.
MacBook-de-Alexis-Petard:~ ElaxisP$  
 
 

Reply

Marsh Posté le 06-05-2011 à 13:55:04    

Il faut indiquer le chemin complet de ton fichier image, parce qu'autrement le script le cherche dans le répertoire courant.


Message édité par shaoyin le 06-05-2011 à 13:55:31
Reply

Marsh Posté le 06-05-2011 à 14:04:11    

Ca marche ! C'est nickel
 
Merci beaucoup pour votre aide en tout cas !

Reply

Marsh Posté le 06-05-2011 à 15:26:08    

Au cas ou, sur un gros fichier, tu atteindrais les limites de taille pour pack et unpack (je ne les connais pas), tu peux utiliser cette variante, qui découpe l'entrée en morceaux de taille fixe avant de faire la transformation (ici, j'ai fixé la taille de découpage à 4096 octets).

 
Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. my $maxsize = 4096; # ou plus si ça passe
  6. my $line;
  7.  
  8. while (<> ) {
  9.  my $i = 0;
  10.  do {
  11.    $line = substr $_, $maxsize*$i, $maxsize;
  12.    print unpack("B*", pack("a*", $line));
  13.    ++$i;
  14.  } while ($maxsize*$i < length $_);
  15. }
 

A+,


Message édité par gilou le 06-05-2011 à 15:26:35

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed