Vander
Staff member
- Nov 10, 2019
- 468
- 1,158
Пикселизация используется во многих областях, чтобы скрыть информацию в изображениях. Я видел, как компании пикселируют пароли во внутренних документах. Не было инструментов для восстановления пароля с такого образа, поэтому я создал его. Эта статья посвящена алгоритму и аналогичным исследованиям депикселизации.
Инструмент доступен на Github, а на изображении ниже показан один из результатов теста.
Пикселизация описывает процесс частичного снижения разрешения изображения для цензуры информации. Реализация алгоритма атакует обычный линейный блочный фильтр. Линейный прямоугольный фильтр принимает прямоугольник пикселей и перезаписывает пиксели средним значением всех пикселей в поле. Его реализация проста, и он работает быстро, поскольку он может обрабатывать несколько блоков параллельно.
На изображении ниже показан пример линейного прямоугольного фильтра. Изображение смайлика разделено на четыре блока. Средний цвет блока перезаписывает пиксели блока, в результате чего получается окончательный пиксельный смайлик. Обратить фильтр напрямую невозможно, так как исходная информация теряется.
Изображения можно запутать разными способами, что обычно называется размытием. Пикселизацию с помощью прямоугольных фильтров можно рассматривать как подмножество методов размытия. Большинство алгоритмов размытия имеют тенденцию распределять пиксели, пытаясь имитировать естественное размытие, вызванное трясущейся камерой или проблемами фокусировки.
Существует множество инструментов для устранения размытости для обычных задач, таких как повышение резкости размытых фотографий. К сожалению, пиксельные пароли, с которыми работает автор, составляют всего пару блоков по высоте, так что увеличивать резкость не имеет смысла.
Недавние разработки в области искусственного интеллекта вызвали необычные заголовки, такие как «Исследователи создали инструмент, который может идеально депиксировать лица». Однако ИИ этого не делает. Этот недавний алгоритм PULSE похож на алгоритм Google RAISR от 2016 года. AI генерирует лица, которые при пикселизации приводят к тому же изображению, но лицо, которое он восстанавливает, не является оригиналом.
Такие алгоритмы, как PULSE, кажутся новыми, но они происходят из длинной линейки инструментов для deblurring. M. W. Buie написал инструмент в 1994 (!) Для создания "Plutos", размытия их и сопоставления с наблюдаемыми изображениями.
В широко известной статье 2006 года Д. Венкатраман объясняет алгоритм восстановления пиксельного номера кредитной карты. Идея проста: сгенерируйте все номера кредитных карт, сделайте их пиксельными и сравните результат с пиксельными числами.
В 2019 году С. Сангван объяснил, как можно использовать Photoshop для восстановления лиц для OSINT путем повышения резкости изображения и поиска его через Google Images. Он похож на другие методы, поскольку использует Google для такого себе брутфорса лица на изображении.
Обратите внимание на сходство между упомянутыми решениями. Если доступно недостаточно информации для правильного сглаживания изображения, лучшим методом является пикселизация похожих данных и проверка их соответствия. На этом же основан алгоритм восстановления паролей по скриншотам.
Описание алгоритма:
Поскольку линейный блочный фильтр является детерминированным алгоритмом, пикселизация одних и тех же значений всегда будет приводить к одному и тому же пиксельному блоку. Пикселизация одного и того же текста - с использованием одних и тех же местоположений блоков - приведет к одинаковым значениям блоков. Мы можем попробовать пикселизировать текст, чтобы найти совпадающие шаблоны. И, к счастью, это сработает даже для части секретной ценности. Каждый блок или комбинацию блоков можно рассматривать как подзадачу.
Автор не стал создавать таблицу поиска потенциальных шрифтов. Алгоритм требует того же размера и цвета текста на одном и том же фоне. Современные текстовые редакторы также добавляют оттенок, насыщенность и яркость, обеспечивая огромное количество потенциальных настроек шрифтов, с которыми был сделан снимок экрана.
Это решение довольно простое: возьмите последовательность ожидаемых символов Де Брюйна, вставьте ее в тот же редактор и сделайте снимок экрана. Этот снимок экрана используется в качестве изображения для поиска похожих блоков.
Например:
Для поиска правильных совпадений требуется, чтобы в поисковом изображении существовал точный блок одинаковой конфигурации пикселей. На тестовом изображении алгоритм не смог найти часть буквы «о».
Это было потому, что в поисковом изображении блок поиска также включает часть следующей буквы ('d'), но в исходном изображении был пробел.
Для большинства пиксельных изображений инструмент, кажется, находит результаты с одним совпадением для блоков. Предполагается, что они верны. Затем сравниваются совпадения окружающих блоков с несколькими совпадениями, чтобы они находились на том же геометрическом расстоянии, что и в пиксельном изображении. Эти совпадения также считаются правильными.
После того, как правильные блоки больше не имеют геометрических совпадений, он выведет все правильные блоки напрямую. Для блоков с несколькими совпадениями выводится среднее значение всех совпадений. Его производительность далека от идеала, но работает неплохо. На изображении ниже показано тестовое изображение со случайными символами. Большинство символов можно правильно прочитать.
Всегда полностью удаляйте конфиденциальную информацию из изображений, потому что методы запутывания могут раскрыть восстанавливаемые части исходного значения.
Упомянутый метод прекрасно связан с уязвимыми шаблонами в криптографии. Это похоже на взлом хешей, использование ECB и использование атак с использованием известного открытого текста. Используйте лучшие практики для защиты данных. Предположение, что схема не может быть нарушена и взломана только потому, что разработчик не знает, как это сделать, является распространенной ошибкой в области информационной безопасности.
Спасибо за внимание, материал подготовлен специально для protey.net.