Большинство людей воспринимают ZIP-архив как обычный способ сжать файлы. Однако существует архив, который уже более двух десятилетий используется в качестве демонстрации ограничений архиваторов и антивирусов. Его название - 42.zip.

Несмотря на размер всего около 42 КБ, после распаковки этот архив способен превратиться в 4.5 петабайта данных - объем, который невозможно разместить даже на большинстве корпоративных систем хранения.

42.zip - это специально сконструированный ZIP-архив, содержащий огромное количество повторяющихся данных и несколько уровней вложенных архивов.

Главная цель файла - не заражение компьютеров вредоносным кодом, а демонстрация так называемой ZIP Bomb (архивной бомбы).

Архивная бомба - это файл, который:

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

При этом внутри архива может вообще не быть никакого вредоносного ПО.


Как устроен 42.zip?

Главная особенность файла заключается не в алгоритме сжатия, а в структуре. Архив состоит из нескольких уровней.

На верхнем уровне располагается 16 ZIP-файлов.

Каждый из них содержит еще 16 ZIP-файлов.

Этот процесс повторяется несколько раз.

На самом нижнем уровне находятся обычные файлы, заполненные повторяющимися символами (например, нулями). Повторяющиеся данные отлично сжимаются алгоритмом Deflate, используемым в ZIP, поэтому итоговый архив получается крошечным. Однако после полной распаковки объем возрастает экспоненциально.


Почему данные так хорошо сжимаются?

Алгоритм ZIP использует поиск повторяющихся последовательностей.

Представим файл, состоящий из миллиарда символов "A": AAAAAAAAAA...

Вместо хранения каждого символа архиватор фактически сохраняет описание: повторить символ "A" миллиард раз.

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

42.zip практически полностью построен на этом принципе.


Откуда берутся 4,5 петабайта?

Это результат многократного умножения объема после каждого уровня вложенности. Каждый архив содержит множество архивов. Каждый следующий уровень снова раскрывается во множество файлов. Получается эффект геометрической прогрессии.

В результате:

  • архив - около 42 КБ;
  • после полной распаковки - примерно 4.5 ПБ данных.

Для сравнения:

  • 1 ТБ = 1024 ГБ;
  • 1 ПБ = 1024 ТБ.

То есть 4.5 ПБ - это примерно:

  • более 4500 ТБ;
  • миллионы фотографий;
  • сотни тысяч фильмов в 4K.

Опасен ли 42.zip сегодня?

В большинстве случаев - нет.

Современные архиваторы и средства защиты давно научились обнаруживать подобные конструкции. Обычно используются следующие механизмы:

  • ограничение максимального размера распаковки;
  • ограничение глубины вложенности;
  • ограничение количества файлов;
  • вычисление коэффициента сжатия;
  • прерывание обработки подозрительных архивов.

Поэтому большинство современных антивирусов блокирует подобные файлы еще до начала распаковки.


Source: Orkhan Alishov's notes