txt.TextChanged -= textBox1_TextChanged; // dettach the event handler
txt.Text = "something"; // update value
txt.TextChanged += textBox1_TextChanged; // reattach the event handler
Цитата со страницы Википедии:
Одним из примеров Zip-бомбы является файл 45.1.zip, содержащий 45,1 килобайт сжатых данных, содержащий девять слои вложенных zip-файлов в наборах 10, каждый архив нижнего слоя содержащий 1,30-гигабайтный файл для всего 1,30 эксабайт несжатого data.
Итак, все, что вам нужно, это один файл размером 1,3 ГБ с нулями, сжать его в файл ZIP, сделать 10 копий, упаковать их в файл ZIP и повторить этот процесс 9 раз.
Таким образом, вы получаете файл, который при полной несжатости производит абсурдное количество данных, не требуя начинать с этого количества.
Кроме того, вложенные архивы значительно усложняют умным программам, таким как антивирусные сканеры (основная цель этих «бомб»), и отказываться распаковывать «слишком большие» архивы, потому что до последнего уровня общий объем данных не так уж и много, вы не «видите», насколько велики файлы на самом низком уровне, пока не достигнете этого уровня, и каждый отдельный файл не будет «слишком большим» - проблематично только огромное количество.
Создайте файл нулей размером 1,3 эксабайта.
Щелкните правой кнопкой мыши> Отправить в сжатую (заархивированную) папку.
Ниже приведено для 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 ГБ пространства.
Чтобы создать его в практических условиях (то есть без создания файла размером 1,3 эксабайта на огромном жестком диске), вам, вероятно, придется изучить формат файла на двоичном уровне и написать что-то, что переводится в как будет выглядеть желаемый файл после сжатия.
Хороший способ создать zipbomb (или gzbomb) - это знать двоичный формат, на который вы нацеливаетесь. В противном случае, даже если вы используете потоковый файл (например, используя / dev / zero
), вы все равно будете ограничены вычислительной мощностью, необходимой для сжатия потока.
Хороший пример бомбы gzip: http://selenic.com/googolplex.gz57 (есть сообщение, встроенное в файл после нескольких уровней сжатия, приводящих к огромным файлам)
Получайте удовольствие от поиска этого сообщения :)
Возможно, в unix вы могли бы передать определенное количество нулей прямо в zip-программу или что-то в этом роде? Не знаю достаточно о unix, чтобы объяснить, как бы вы это сделали. Кроме этого, вам понадобится источник нулей и вставьте их в застежку-молнию, которая читает из стандартного ввода или чего-то еще ...
Серьезный ответ:
(В основном) Сжатие основано на обнаружении повторяющихся шаблонов, поэтому zip-файл будет содержать данные, представляющие что-то вроде
0x100000000000000000000000000000000000
(Repeat this '0' ten trillion times)
Очень короткий zip-файл, но огромный при расширении это.
Все алгоритмы сжатия файлов полагаются на энтропию сжимаемой информации. Теоретически вы можете сжать поток из 0 или 1, и если он достаточно длинный, он сжимается очень хорошо.
Это часть теории. Практическая часть уже отмечена другими.
Это легко сделать в Linux. используя следующую команду:
dd if = / dev / zero bs = 1024 count = 10000 | zip zipbomb.zip -
Замените count на количество КБ, которое вы хотите сжать. В приведенном выше примере создается zip-бомба размером 10 МБ (совсем не бомба, но он показывает процесс).
Вам НЕ нужно место на жестком диске для хранения всех несжатых данных.
Я не знаю, использует ли ZIP кодирование длины прогона, но если бы это было так, такой сжатый файл содержал бы небольшой фрагмент данных и очень большое значение длины прогона. Значение длины серии должно указывать, сколько раз повторяется небольшой фрагмент данных. Когда у вас очень большое значение, результирующие данные будут пропорционально большими.