Je viens de voir cela au cours des derniers jours et je ne peux pas comprendre comment cela fonctionne. La vidéo dont je parle est ici :
C'est la réponse la mieux notée à cette question de Stack Overflow: pourquoi ce programme a-t-il été rejeté par trois compilateurs?
Comment ce bitmap est-il capable d'afficher un programme C ++ pour "Hello World"?
Réponses:
Une image BMP (DIB) est composée d'un en-tête suivi de 1 non compressé données de couleur (pour des images de 24 bpp, il s'agit de 3 octets par pixel, stockés dans l'ordre inverse des lignes et avec un pas de 4 octets).
Les octets des données de couleur sont utilisés pour représenter les couleurs (c'est-à-dire qu'aucun d'entre eux n'est "mandaté" par le format de fichier 2 , ils proviennent tous de la couleur de chaque pixel), et il y a une correspondance 1: 1 parfaite entre les couleurs des pixels et les octets écrits dans le fichier; ainsi, en utilisant des couleurs parfaitement choisies, vous pouvez en fait écrire tout ce que vous voulez dans le fichier (à l'exception de l'en-tête).
Lorsque vous ouvrez le fichier généré dans le bloc-notes, les données de couleur seront affichées sous forme de texte; vous pouvez toujours voir clairement à partir de l'en-tête (la partie du
BM
début du texte), qui est mandaté par le format de fichier.À mon avis, cette vidéo a été réalisée de cette façon: d'abord, l'auteur a calculé la taille nécessaire pour le bitmap, et a créé un fichier DIB de la taille correcte rempli d'une couleur qui se développe en un motif simple (par exemple, tous les octets 65 =>
'A'
); puis remplacé ce modèle par le code "payload", comme indiqué dans la vidéo.Notez cependant qu'il n'est pas impossible de tout fabriquer à la main avec le bloc-notes - avec la boîte de dialogue de sélection de couleur, une table ASCII et une connaissance de base du format DIB, cela peut être fait, mais ce serait beaucoup plus lent et sujet aux erreurs.
Plus d'informations sur le format DIB
la source
Je suppose que vous faites référence à la réponse à l'une des questions du poisson d'avril.
Je suppose que chaque pixel a une représentation binaire pour lui. Et que chaque caractère du code source a une représentation binaire pour lui.
La personne qui a créé le programme doit avoir élaboré la couleur de chaque pixel qui aurait une représentation binaire correspondant à chaque caractère.
la source
D'un point de vue théorique de l'informatique, il serait intéressant de se demander si chaque programme peut être écrit de telle manière que, vu comme un bitmap, vous voyez réellement le code source qui fait la même chose. Si vous êtes sérieusement intéressé par ces résultats, lisez par exemple le théorème du point fixe de Kleene .
Program-as-an-image peut également être considéré comme une forme d'obfuscation de code. Non pas que ce soit particulièrement pratique ...
la source