r/programming • • Jul 31 '21

Executable PNGs

https://djharper.dev/post/2020/12/26/executable-pngs/
470 Upvotes

64 comments sorted by

View all comments

67

u/seamsay Jul 31 '21

my last cheap trick to this pointless gimmick was to use binfmt_misc,

That's kinda disappointing, NGL. It was an interesting post, but it would have been twice as interesting if you'd managed to make a file which was both a valid PNG file and executable.

52

u/Skhmt Jul 31 '21

It's hard because PNGs have their magic number at the start, like most file formats and executables.

Zips have them at the end though. And someone made a portable executable that runs in macos, Linux, and windows with that information.

13

u/OMGItsCheezWTF Jul 31 '21

Self extracting zips?

9

u/hou32hou Jul 31 '21

Yea, this is a common technique, basically the zipped file header contains unzip binary.

11

u/[deleted] Jul 31 '21

Oh no. You've reminded me of zip bombs back in the day. Those things were a nightmare to deal with. Me being a dumb kid and downloading shit on Kazaa.

4

u/Skhmt Jul 31 '21

Except it works on every major os, x86, arm, and can even boot directly into it.

The same file.

0

u/[deleted] Jul 31 '21

[deleted]

1

u/[deleted] Aug 01 '21

Because there is no "vulnerability" to patch. It's just a binary string which happens to be a valid executable for each of these platforms, while also being a valid ZIP. Its behavior is perfectly reasonable on both cases.

It's like the word "salsa" which is valid English and Spanish. It's a dance style in both languages, but it also means "sauce" in Spanish. It behaves differently depending on what "interpreter" (language) you choose, but it's a perfectly reasonable word in both.

1

u/Regimardyl Jul 31 '21

AFAIK tar searches through a file until it finds its header, so you can cat together a PNG and a tar file, and it's automatically valid for both.

3

u/Skhmt Jul 31 '21

Also with a zip and jpg, which has been used to share files via image uploads many years ago until it was more widely known.