PNG е графичен формат, който се появи през далечната 1995 година и масово се използва и в наши дни. Неговите основни достойнства са компресията без загуби и поддръжката на прозрачни пиксели. Японският програмист и художник с псевдоним UCNV прокара интересната идея за използване на бъговете в този формат във вид на изкуство.

 

  PNG

Този графичен формат използва CRC32 контролна сума, която служи за откриване на повредени изображения, които приложенията за преглед на PNG файлове не показват. Следователно, няма как просто така да се промени двоичния файл на PNG изображението,.

 

  PNG

Японецът е потърсил възможните изкривявания в PNG файла, които съответстват на спецификациите на този графичен формат. Тоест, налага се декодиране на CRC32, след това промяна на данните, ново пресмятане на контролната сума, която да бъде добавена към редактирания файл.

 

  PNG

PNG кодирането се състои основно от четири фази, всяка от които може да бъде мишена за бъг. Промяната в първоначалните Raw данни е безсмислена и технически погледнато, това не е бъг. Изкривяването в последната фаза също не е удачно, понеже се променя контролната сума. Остава вмъкване на изкривяване при втората и третата фази - при филтрирането и компресията на данните. С помощта на хакове е възможно да се намери бъг във филтрирането. Търсене на бъгове при компресията също няма особен смисъл, понеже се използва алгоритъма Deflate и изкривяванията в него изглеждат като бял сняг върху изображението.

 

  PNG

Остават филтрите, които конвертират байтовете на всяка линия по такъв начин, че да се получи максимална компресия. Използват се пет филтъра - Sub, Up, Average и Paeth, както и None (няма филтри). Художникът е използвал последователно промени във филтрираните данни и по този начин е намерил бъг, който според него дава художествен резултат.

 

  PNG

Японският програмист е качил в Github библиотеката PNGlitch, написана на Ruby, която дава възможност за вмъкване на изкривявания и презапис на контролната сума.