Как сделать бомбу на молнии?

txt.TextChanged -= textBox1_TextChanged;  // dettach the event handler
txt.Text = "something"; // update value
txt.TextChanged += textBox1_TextChanged; // reattach the event handler
126
задан Community 23 May 2017 в 10:31
поделиться

10 ответов

Цитата со страницы Википедии:

Одним из примеров Zip-бомбы является файл 45.1.zip, содержащий 45,1 килобайт сжатых данных, содержащий девять слои вложенных zip-файлов в наборах 10, каждый архив нижнего слоя содержащий 1,30-гигабайтный файл для всего 1,30 эксабайт несжатого data.

Итак, все, что вам нужно, это один файл размером 1,3 ГБ с нулями, сжать его в файл ZIP, сделать 10 копий, упаковать их в файл ZIP и повторить этот процесс 9 раз.

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

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

88
ответ дан 24 November 2019 в 00:53
поделиться

Создайте файл нулей размером 1,3 эксабайта.

Щелкните правой кнопкой мыши> Отправить в сжатую (заархивированную) папку.

43
ответ дан 24 November 2019 в 00:53
поделиться

Ниже приведено для Windows:

Из документа Security Focus, подтверждающего концепцию (NSFW!), Это ZIP-файл с 16 папками, в каждой по 16 папок, которые продолжается примерно так (42 - это имя zip-файла):

\ 42 \ lib 0 \ book 0 \ chapter 0 \ doc 0 \ 0.dll
...
\ 42 \ lib F \ book F \ chapter F \ doc F \ 0.dll

Я, вероятно, ошибаюсь с этой цифрой, но она дает 4 ^ 16 (4 294 967 296) каталогов. Поскольку каждому каталогу требуется место в N байтов, он оказывается огромным. Размер файла dll в конце составляет 0.

При распаковке только первого каталога \ 42 \ lib 0 \ book 0 \ chapter 0 \ doc 0 \ 0.dll выделяется 4 ГБ пространства.

10
ответ дан 24 November 2019 в 00:53
поделиться

Чтобы создать его в практических условиях (то есть без создания файла размером 1,3 эксабайта на огромном жестком диске), вам, вероятно, придется изучить формат файла на двоичном уровне и написать что-то, что переводится в как будет выглядеть желаемый файл после сжатия.

5
ответ дан 24 November 2019 в 00:53
поделиться

Хороший способ создать zipbomb (или gzbomb) - это знать двоичный формат, на который вы нацеливаетесь. В противном случае, даже если вы используете потоковый файл (например, используя / dev / zero ), вы все равно будете ограничены вычислительной мощностью, необходимой для сжатия потока.

Хороший пример бомбы gzip: http://selenic.com/googolplex.gz57 (есть сообщение, встроенное в файл после нескольких уровней сжатия, приводящих к огромным файлам)

Получайте удовольствие от поиска этого сообщения :)

4
ответ дан 24 November 2019 в 00:53
поделиться

Возможно, в unix вы могли бы передать определенное количество нулей прямо в zip-программу или что-то в этом роде? Не знаю достаточно о unix, чтобы объяснить, как бы вы это сделали. Кроме этого, вам понадобится источник нулей и вставьте их в застежку-молнию, которая читает из стандартного ввода или чего-то еще ...

2
ответ дан 24 November 2019 в 00:53
поделиться

Серьезный ответ:

(В основном) Сжатие основано на обнаружении повторяющихся шаблонов, поэтому zip-файл будет содержать данные, представляющие что-то вроде

0x100000000000000000000000000000000000  
(Repeat this '0' ten trillion times)

Очень короткий zip-файл, но огромный при расширении это.

8
ответ дан 24 November 2019 в 00:53
поделиться

Все алгоритмы сжатия файлов полагаются на энтропию сжимаемой информации. Теоретически вы можете сжать поток из 0 или 1, и если он достаточно длинный, он сжимается очень хорошо.

Это часть теории. Практическая часть уже отмечена другими.

2
ответ дан 24 November 2019 в 00:53
поделиться

Это легко сделать в Linux. используя следующую команду:

dd if = / dev / zero bs = 1024 count = 10000 | zip zipbomb.zip -

Замените count на количество КБ, которое вы хотите сжать. В приведенном выше примере создается zip-бомба размером 10 МБ (совсем не бомба, но он показывает процесс).

Вам НЕ нужно место на жестком диске для хранения всех несжатых данных.

34
ответ дан 24 November 2019 в 00:53
поделиться

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

1
ответ дан 24 November 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: