Воспоминания о детстве: зип-бомбы

Привет всем! Недавно пытался рассказать своим детям о шалостях, которые делались до эры Интернета. Вечный факс конечно же был упомянут, азбука Морзе с приятелем из соседнего подъезда с помощью протянутого под крышей многоэтажки провода и кнопок с лампочками тоже, а потом как-то случайно речь дошла до зип-бомбы.

Более подробно (на случай, если вы не знаете, что это такое) можно прочитать в Википедии. Упрощенно — это архив, который открывает сам себя. Я же решил показать более простой пример бомбы — файл, состоящий из нулей, и сжатый до весьма скромных архивов, для чего
использовал Python:

  1. start_value = 1
  2. while start_value <= 120000:
  3.     with open('logic.txt', 'a', encoding='utf-8') as f:
  4.         f.write('                                                                                                    '
  5.                 '                                                                                                    '
  6.                 '                                                                                                    '
  7.                 '                                                                                                    '
  8.                 '                                                                                                    '
  9.                 '                                                                                                    '
  10.                 '                                                                                                    '
  11.                 '                                                                                                    '
  12.                 '                                                                                                    '
  13.                 '                                                                                                    '
  14.                 '                                                                                                    '
  15.                 '                                                                                                    '
  16.                 '                                                                                                    '
  17.                 '                                                                                                    ')
  18.         print('Сделали проход:', start_value)
  19.         start_value = start_value + 1

Собственно — логика весьма проста: пишем пробелы в файл. Пишем… и еще раз пишем. И снова пишем… Пока не достигнем отметки в запланированные 120000 проходов. В этом случае размер исходного файла составит ровно 168 мегабайт. А если мы заархивируем его с помощью архиватора 7-zip в ультра-режиме — получим файлик размером в 197 килобайт 🙂

Что делать с полученным файлом — решать вам. Увалить Яндекс как это было возможно когда-то давно — уже нельзя. Вычислительный центр в родной Академии — тоже… Разве что отправить кому-то на почту с просьбой развернуть отчетность и ждать, пока у несчастного закончится вся память (не удержался, отправил архив дочке на почту) 🙂

И да, знаю — можно было бы использовать старую верную командную строку:
Fsutil file createnew c:\text.txt n — где n — размер нужного вам файла, но нам нужен Python 🙂

Кстати, если вам совсем скучно — попробуйте развернуть этот архив? Всего-лишь 42 килобайта же… 😉