Рубрика: Строительство

Самое большое изображение в самом маленьком пространстве

Xakep #248. Checkm8

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

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

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

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

Сначала алгоритм 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 в разные онлайновые сервисы, сломав скрипты обработки изображений;

Xakep #248. Checkm8

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

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

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

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

Сначала алгоритм 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 в разные онлайновые сервисы, сломав скрипты обработки изображений;

Какой самый большой размер изображения формата PNG в наименьшем количестве байт? Программист Дэвид Фифилд с сайта bamsoftware.com заинтересовался данным вопросом и пришел к удвительным выводам. Он создал картинку, размеры которой не умещаются в оперативной памяти, вызывая зависание системы.

Запакованный bzip2-файл spark.png.bz2 имеет размер всего 420 байт. В нем лежит сжатый PNG-файл. При распаковке картинка занимает 6132534 байт или 5,8 мегабайт и имеет разрешение 225000 на 225000 пикселей (50,625 гигапикселей). Для просомтра такого изображения требуется около 141 гигабайта оперативной памяти. На незащищенных от подобной «бомбы» фото-хостингов, форумов и прочих сайтов, где можно загрузить и посмотреть картинку, таким образом можно запросто положить сервера.

там просто синий фон, грузится, но медленно

Открывается долго, конечно, но у меня вот загрузилось.
Копм с 8 гигами справился

кригер она называлась, 1 уровень с графой дума 3

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

вообще мне сейчас лень скачивать непонятные файлы, но возникает вопрос: PNG – это формат BMP с упаковкой блоков-чанков обычным архивным алгоритмом (GZIP, например). Т.е. сам PNG является по сути архивом, с достаточно большой степенью сжатия. Так вот, как так получилось что архив на 6Мб сжали в 420 байт? любой кто попробует сжать еще раз архив поймет, что степень сжатия уже сжатых данных крайне херовая.

Читайте также:  Приспособление для нарезки труб

ну и если уж совсем задолбать, то там опечатка на сайте:

пиксель состоит не из трех битов, а из трех байтов (RGB).

ну, ну. классы. Курим мануал ))

Сейчас хотел положить свой сервер:

Код
print_r( getimagesize("spark.png"));
Код
Array
(
[0] => 225000
[1] => 225000
[2] => 3
[3] => w
[bits] => 1
[mime] => image/png
)

Не положился, опять про классы будем говорить?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *