- PVSM.RU - https://www.pvsm.ru -

Файл 420 байт разжимается в картинку PNG на 40 гигапикселей (141 ГБ ОЗУ)

В старые времена были популярны zip-бомбы. Такая бомба — это рекурсивный архив [1], который распаковывается сам в себя. Его иногда можно использовать для DoS-атаки. Например, пресловутый файл 42.zip [2] имеет размер 42 килобайта. Если начать его распаковку, то процесс будет идти до тех пор, пока набор данных не достигнет верхнего предела распаковки в 4,3 гигабайта. При этом процесс займет более 4,5 петабайт в оперативной памяти (4 503 599 626 321 920 байт).

Программист и хакер Дэвид Фифилд (David Fifield) задумался, где ещё можно применить «архивные бомбы». Сразу на ум приходит графический формат PNG, в котором используется алгоритм сжатия DEFLATE [3] в библиотеке zlib [4].

Каков будет максимальный размер картинки с минимальным размером файла? Идея в том, чтобы файл можно было быстро скачать из интернета, но при этом он не поместился в оперативную память на персональном компьютере.

Автор поэкспериментировал с разными вариантами и вот что у него получилось [5].

spark.png.bz2 [6] (420 байт)

Сначала алгоритм DEFLATE заменяет повторяющиеся строки указателями (LZ77), при этом каждая пара бит кодирует 258 одинаковых байтов с нулями. Степень компрессии составляет 1032 к 1.

Затем за дело берётся bzip2, который сжимает длинный набор одинаковых значений в максимально компактный вид.

В архиве на 420 байт — файл PNG размером 6 132 534 байт (5,8 МБ) и изображением 225 000 × 225 000  пикселей (50,625 гигапикселей). В пиксельном буфере с тремя байтами на пиксель картинка займёт примерно 141,4 ГБ.

Картинка почти полностью состоит из нулей, с секретным сообщением в центре. Для лучшего сжатия используется однобитное цветовое пространство, хотя большинство программ для рендеринга графики всё равно резервируют по три бита на пиксель и разворачивают картинку в 141,4 гигабайта.

В дальнейших планах автора:

1) закачать свою аватару в формате PNG в разные онлайновые сервисы, сломав скрипты обработки изображений;

2) установить новый фавикон на сайте.

Автор: alizar

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/png/97446

Ссылки в тексте:

[1] рекурсивный архив: http://habrahabr.ru/post/119676/

[2] 42.zip: https://www.unforgettable.dk/

[3] DEFLATE: https://tools.ietf.org/html/rfc1951

[4] zlib: https://tools.ietf.org/html/rfc1950

[5] вот что у него получилось: https://www.bamsoftware.com/hacks/deflate.html

[6] spark.png.bz2: https://www.bamsoftware.com/bzr/deflate/spark.png.bz2

[7] Источник: http://geektimes.ru/post/261276/