Un éphémčre message caché dans un fichier Excel

Un fichier Excel tout ce qu'il y a de plus banal et qui contient pourtant un message caché pour le destinataire averti qui saura le lire.
Un message qui est effacé dčs que le fichier est ouvert par Excel...


Comment ça marche ?

Un fichier Excel c'est un tas de caractčres codant des références d'objets, des nombres, des textes...
Et chaque élément est placé ŕ un endroit précis, séparé si nécessaire par des carachčres de remplissage, notamment ˙ = chr(255) et chr(0).
Quand Excel lit le fichier, il ne prend en compte que les caractčres utiles et ignore simplement les caractčres de remplissage.

Et si on remplace ˙˙˙˙˙˙˙ par Bonjour dans le fichier, Excel n'y verra que du feu et ignorera superbement nos salutations distinguées.
Le fichier Excel sera donc ouvert sans trace de Bonjour. Si on enregistre le fichier, Excel, qui n'a pas vu de bonjour, ne l'enregistrera pas. Le message disparait donc ŕ l'enregistrement.
Par contre, si on lit le fichier Excel initial avec notepad (bloc-notes) ou Wordpad, on pourra lire le message au milieu du code (mais aprčs sauvegarde sous Excel, plus trace du message).

Mais comment remplacer "˙˙˙˙˙˙˙" par "Bonjour" ? Pas question de faire Edition / remplacer sous notepad, notepad écrase certains caractčres comme chr(0) et le fichier devient illisible sous Excel.
Une petite macro fait bien l'affaire :

Sub mess()


'On commence par lire le fichier Excel (zaza.xls) en binaire :
nomfich = ThisWorkbook.Path & "\zaza.xls"
Open nomfich For Binary Access Read As #1
longueur = LOF(1)
truc = ""
nbcar = 5 * 1024
While longueur> nbcar
truc = truc & Input(nbcar, #1)
LONGUEUR = longueur- nbcar
Wend
truc = truc & Input(longueur, #1)
Close #1


'La variable truc contient maintenant tout le code du fichier Excel.
'Il suffit d'y remplacer ˙˙˙˙˙˙˙˙˙˙˙ par --Bonjour-- :
pos = InStr(truc, "˙˙˙˙˙˙˙˙˙˙˙")
If pos > 0 Then truc = Left(truc, pos - 1) & "--Bonjour--" & Right(truc, Len(truc) - pos - Len("--Bonjour--") + 1)


'Puis de créer un fichier Excel modifié, toto.xls :
Open ThisWorkbook.Path & "\toto.xls" For Output As #1
Print #1, truc
Close #1
End Sub


Si on ouvre le fichier toto.xls avec notepad, on voit quelque chose qui ressemble ŕ :
ĐĎࡱá                >   ţ˙                                 ţ ˙˙˙        --Bonjour--˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙...

Notre message "Bonjour" y apparait clairement dčs le début du fichier.
Et le fichier, bien que contenant le message, ne pčse pas plus lourd que le fichier d'origine, et lu par Excel il semble identique.
(La différence peut toutefois se faire sentir en zippant le fichier : toto zippé est plus gros que zaza zippé).
Sauvegardez le fichier sous Excel, puis examinez-le sous notepad : plus de trace du message...



On peut aussi se contenter d'ajouter le message en fin de fichier Excel. Lŕ encore, Excel ne prend pas la peine de lire au delŕ de la fin du fichier initial.
Pire encore, il suffit cette fois de lire le fichier avec Excel (sans męme l'enregistrer) pour effacer le message.

La macro est lŕ aussi trčs simple :

Sub mess2()


'On commence par lire le fichier Excel (zaza.xls) en binaire :
nomfich = ThisWorkbook.Path & "\zaza.xls"
Open nomfich For Binary Access Read As #1
longueur = LOF(1)
truc = ""
nbcar = 5 * 1024
While longueur> nbcar
truc = truc & Input(nbcar, #1)
LONGUEUR = longueur- nbcar
Wend
truc = truc & Input(longueur, #1)
Close #1


'La variable truc contient maintenant tout le code du fichier Excel.
'Il suffit d'y ajouter --Bonjour-- :
truc=truc & vbcrlf & "--Bonjour--"


'Puis de créer un fichier Excel modifié, toto.xls :
Open ThisWorkbook.Path & "\toto.xls" For Output As #1
Print #1, truc
Close #1
End Sub


Ouvrez le fichier toto.xls avec Notepad, le message apparait tout en bas du fichier.
Ouvrez le avec Excel, puis vérifiez avec notepad, le message est toujours lŕ.
Fermez le fichier dans Excel SANS enregistrer, vérifiez avec notepad, le message ŕ disparu avec l'enregistrement de l'heure de dernier accčs...



Le fichier Excel proposé au téléchargement contient les deux macros. Il propose de choisir un fichier Excel ŕ modifier, un message ŕ y insérer puis génčre le nouveau fichier.
Cliquez ici pour télécharger le fichier excel (zippé)