Как распознать и сохранить файл
Я хочу фаззер, который фаззит, но не сломает сам файл. Я хочу случайным образом распознать файл, но я хочу иметь возможность открыть его и проверить позже (я не хочу поврежденный файл).
Возьмем, к примеру, zzuf: когда я использую его для записи файла mp3 или png, записанный файл больше не может быть открыт. Так что я хочу знать, как я могу распознать содержимое, а не разбить файл.
У меня есть ощущение, что это связано с опцией -b, которая говорит, какие байты нужно записать. Но скажи я попробую zzuf -b 8-
для png файла в заголовок preserver, он все еще не работает. Я не использую это правильно?
ОБНОВИТЬ
Я пытался сделать это для mp3, wav, png, jpg и mp4 много раз, и ни разу не было открываемого файла. Значит, фаззер буквально "ломает" файл?
1 ответ
Вы можете узнать, где находятся заголовки PNG и области данных, с помощью такого инструмента, как hachoir, но это не спасет вас, потому что проблема не в этом.
Проблема не только в заголовках, так как вы имеете дело со сжатым форматом (PNG), область "данных" - это не тупая битовая карта, где биты могут быть изменены и позволяют файлу быть действительным в формате.
Сжатые данные содержат некие "инструкции", которые алгоритм декомпрессора должен обработать для восстановления распакованных данных. В некотором смысле, формат сжатых данных является своего рода специфичным для предметной области двоичным языком, который декомпрессор анализирует и интерпретирует.
Взятие действительной программы на этом языке (действительный файл PNG с допустимой областью сжатых данных) и случайное переворачивание битов может привести к другой действительной программе (другому действительному PNG) в соответствии с этим конкретным языком или нет.
Например, простой алгоритм RLE создает последовательность байтов {содержимое байта, количество вхождений}. Измените один бит в байте "количество вхождений", и внезапно распакованные данные будут иметь другое количество байтов, чем ожидаемое число width * height * depth
Таким образом, изображение должно обоснованно считаться поврежденным.
Для положительного завершения, если программа отказывается открывать нечеткий PNG без сбоев, исчерпания ресурсов процессора / памяти или форматирования вашего жесткого диска, то программа просто ведет себя правильно, что хорошо (но помните, что найти ошибку не это не значит, это значит, что вы их не нашли).
Если вы действительно хотите сохранить данные изображения и ничего больше, вам нужен фаззер, который работает с распакованными данными. Я не знаю, существует ли он, но он должен полностью знать, в каких форматах вы хотите его использовать (PNG, MP3 и т. Д.), Он не может быть обычным двоичным фаззером.