Если вы планируете сделку с его участием, мы настоятельно рекомендуем вам не совершать ее до окончания блокировки. Если пользователь уже обманул вас каким-либо образом, пожалуйста, пишите в арбитраж, чтобы мы могли решить проблему как можно скорее.
Разработана опенсорсная утилита Depix для восстановления паролей с размытых скриншотов
Результат работы программы Depix (
В голливудских фильмах любят преувеличивать. Они зуммируют фотографии в миллион раз — и выводят цифры из одного пикселя.
Хотя это невероятно, но научные исследования в этой области идут давно. Ещё в 90-е годы были опубликованы теоретические работы и PoC с восстановлением текста из размытых изображений. В 2012 году Владимир Южиков о своей программе SmartDeblur для восстановления смазанных и расфокусированных снимков.
Несмотря на достаточно хорошее развитие науки в данном направлении, до сих пор не было специализированного инструмента конкретно для восстановления паролей (текста) после пикселизации. Программа
В 2019 году руководитель видеогруппы Лаборатории компьютерной графики и мультимедиа ВМК МГУ Дмитрий Ватолин рассказывал о современном состоянии науки в части повышения резкости фотографий. Он говорил, что российская полиция постоянно просит его о помощи, хотя и не понимает сложности проблемы:
В общем, проблема повышения резкости действительно актуальна. Все хотят найти в кадре информацию, которой там нет.
Что такое пикселизация?
Во-первых, что такое пикселизация. Это процесс частичного снижения разрешения изображения для скрытия информации. Используется в разных областях. Многие компании используют пикселизацию для скрытия паролей и других секретных данных во внутренних документах.
Реализация алгоритма Depix атакует (то есть пытается обратить вспять результат работы) общего линейного фильтра для блока пикселей (linear box filter). Этот фильтр берёт блок пикселей и перезаписывает его средним значением всех пикселей в блоке. Реализация простая и быстрая, поскольку можно обрабатывать несколько блоков параллельно.
На рисунке ниже показан пример такого линейного фильтра. Изображение смайлика разделено на четыре блока, для каждого из которых вычисляется средний цвет — и он записывается вместо оригинального цвета пикселей, что приводит к финальной пикселизации. Напрямую реверсировать фильтр невозможно, так как потеряна исходная информация.
Инструменты для снятия размытости, история и исследования
Изображения можно размыть множеством способов. Пикселизация линейными фильтрами для блоков пикселей — лишь один из вариантов. Большинство алгоритмов размытия склонны смешивать/растягивать пиксели, поскольку пытаются имитировать естественные размытия, которые вызваны движением камеры или расфокусировкой.
Есть множество инструментов для повышения резкости в обычных задачах, таких как повышение резкости фотографий. К сожалению, именно с паролями нужен другой подход. Здесь высота символов всего в пару блоков, так что нет смысла просто повышать резкость, пишет автор программы Depix.
Выше мы привели ссылки на некоторые инструменты и исследования, опубликованные на Хабре с 2012 года.
Последние разработки в области искусственного интеллекта породили на свет причудливые заголовки в новостях, типа «Исследователи создали инструмент, который идеально повышает резкость лиц». На иллюстрации ниже — примеры из
Работа алгоритма PULSE из университета Дьюка
Но на самом деле здесь ИИ не восстанавливает фотографии, а генерирует новые изображения, которые размываются в такие же пиксели. Фундамент этих работ заложен алгоритмом
Алгоритмы вроде PULSE кажутся новыми, но они ведут очень давнюю историю инструментов для удаления размытия. Ещё в 1994 году (!) Марк Буйе из Юго-западного исследовательского института (США)
Восстановление номера
В широко известной
Например, мы видим в интернете фотографию чека или банковской карточки с размытым номером. Как видим, здесь для размытия использовался линейный фильтр для блоков 8×8 пикселей:
Как восстановить эти цифры?
1. Берём образец чистого бланка.
2. Скрипт генерирует картинки для всех номеров.
3. Размываем каждую картинку по образцу исходного изображения.
4. Определяем вектор яркости каждого изображения. Вектор типа a = [a1, a2... an] содержит значения яркости каждого блока.
Здесь номер чека 0000001 соответствует вектору a(0000001)=[213,201,190,...].
Также определяем вектор яркости образца
5. Находим вектор с минимальным расстоянием от исходного (после нормализации).
Константы нормализации:
Вычисление расстояния:
Например:
d(0000001) = 1.9363
d(0000002) = 1.9373
...
d(1124587) = 0.12566
d(1124588) = 0.00000
Так находим номер чека: 1124588.
В 2019 году Сомдев Сангван
А потом запускается поиск по картинкам «Яндекса» (более продвинутый, чем Google Images). В данном случае «Яндекс» выполняет «брутфорс» лица на изображении:
Несложно заметить, что у всех описанных методов есть что-то общее. Если не хватает информации, чтобы правильно восстановить изображение, то мы осуществляем пикселизацию аналогичных данных — и проверяем, совпадают ли они.
Это является основой для нашего алгоритма восстановления паролей со скриншотов.
У алгоритма есть определённые ограничения. Он требует одинакового размера и цвета текста на одном и том же фоне. Современные текстовые редакторы также добавляют оттенок и насыщенность, допуская огромное количество возможных вариантов шрифтов на скриншоте.
Здесь довольно простое решение. Берём
Эта последовательность включает в себя все двухсимвольные комбинации. Важно использовать именно двухсимвольные комбинации, потому что некоторые пиксельные блоки закрывают больше одного символа.
Чтобы поиск сработал, требуется блок с абсолютно такой же конфигурацией пикселей. Например, в тестовом изображении алгоритм не смог найти часть буквы 'o', потому что в сгенерированном изображении этот блок включал ещё и часть следующей буквы, а в исходном изображении было чисто.
Создание последовательности де Брёйна с пробелами вокруг, очевидно, создаёт ту же проблему, только наоборот: алгоритм не сможет найти правильные блоки, где на край блока попала соседняя буква. Можно сгенерировать изображение со всеми вариантами буквосочетаний, а также с пустыми местами по краям. По такой картинке поиск будет идти дольше, но даст лучшие результаты.
Для большинства размытых изображений инструмент находит результаты одиночного совпадения для блоков. Затем проверяется, что совпадения окружающих блоков находятся на том же геометрическом расстоянии, что и на размытом изображении.
После прохода по всем блокам программа напрямую выводит все правильные блоки, а для блоков с несколькими совпадениями выводит среднее значение. Выдача не идеальна, но работает довольно хорошо. На рисунке показано тестовое изображение со случайными символами. Большинство символов можно прочитать.
Исходный код программы Depix
Кстати, описанная техника перекликается с некоторыми известными криптографическими атаками. Например, это похоже на взлом хэшей, напоминает атаку на блочный шифр ECB и
Так что если вы хотите удалить информацию со скриншота — удаляйте её полностью,
Результат работы программы Depix (
Для просмотра ссылки необходимо нажать
Вход или Регистрация
)В голливудских фильмах любят преувеличивать. Они зуммируют фотографии в миллион раз — и выводят цифры из одного пикселя.
Хотя это невероятно, но научные исследования в этой области идут давно. Ещё в 90-е годы были опубликованы теоретические работы и PoC с восстановлением текста из размытых изображений. В 2012 году Владимир Южиков о своей программе SmartDeblur для восстановления смазанных и расфокусированных снимков.
Несмотря на достаточно хорошее развитие науки в данном направлении, до сих пор не было специализированного инструмента конкретно для восстановления паролей (текста) после пикселизации. Программа
Для просмотра ссылки необходимо нажать
Вход или Регистрация
— первый такой инструмент.В 2019 году руководитель видеогруппы Лаборатории компьютерной графики и мультимедиа ВМК МГУ Дмитрий Ватолин рассказывал о современном состоянии науки в части повышения резкости фотографий. Он говорил, что российская полиция постоянно просит его о помощи, хотя и не понимает сложности проблемы:
В общем, проблема повышения резкости действительно актуальна. Все хотят найти в кадре информацию, которой там нет.
Что такое пикселизация?
Во-первых, что такое пикселизация. Это процесс частичного снижения разрешения изображения для скрытия информации. Используется в разных областях. Многие компании используют пикселизацию для скрытия паролей и других секретных данных во внутренних документах.
Реализация алгоритма Depix атакует (то есть пытается обратить вспять результат работы) общего линейного фильтра для блока пикселей (linear box filter). Этот фильтр берёт блок пикселей и перезаписывает его средним значением всех пикселей в блоке. Реализация простая и быстрая, поскольку можно обрабатывать несколько блоков параллельно.
На рисунке ниже показан пример такого линейного фильтра. Изображение смайлика разделено на четыре блока, для каждого из которых вычисляется средний цвет — и он записывается вместо оригинального цвета пикселей, что приводит к финальной пикселизации. Напрямую реверсировать фильтр невозможно, так как потеряна исходная информация.
Инструменты для снятия размытости, история и исследования
Изображения можно размыть множеством способов. Пикселизация линейными фильтрами для блоков пикселей — лишь один из вариантов. Большинство алгоритмов размытия склонны смешивать/растягивать пиксели, поскольку пытаются имитировать естественные размытия, которые вызваны движением камеры или расфокусировкой.
Есть множество инструментов для повышения резкости в обычных задачах, таких как повышение резкости фотографий. К сожалению, именно с паролями нужен другой подход. Здесь высота символов всего в пару блоков, так что нет смысла просто повышать резкость, пишет автор программы Depix.
Выше мы привели ссылки на некоторые инструменты и исследования, опубликованные на Хабре с 2012 года.
Последние разработки в области искусственного интеллекта породили на свет причудливые заголовки в новостях, типа «Исследователи создали инструмент, который идеально повышает резкость лиц». На иллюстрации ниже — примеры из
Для просмотра ссылки необходимо нажать
Вход или Регистрация
исследователей из университета Дьюка (США).Работа алгоритма PULSE из университета Дьюка
Но на самом деле здесь ИИ не восстанавливает фотографии, а генерирует новые изображения, которые размываются в такие же пиксели. Фундамент этих работ заложен алгоритмом
Для просмотра ссылки необходимо нажать
Вход или Регистрация
от 2016 года. ИИ генерирует лица, которые размываются в картинку, данную на входе. Важно понимать, что сгенерированное лицо не является оригиналом, из которого получено исходное размытое пятно.Алгоритмы вроде PULSE кажутся новыми, но они ведут очень давнюю историю инструментов для удаления размытия. Ещё в 1994 году (!) Марк Буйе из Юго-западного исследовательского института (США)
Для просмотра ссылки необходимо нажать
Вход или Регистрация
, размытия картинок и их сравнения с настоящими фотографиями, полученными с телескопа «Хаббл».Восстановление номера
В широко известной
Для просмотра ссылки необходимо нажать
Вход или Регистрация
от 2006 года Дхира Венкатраман объясняет алгоритм, как восстановить пикселизированный номер кредитной карты. Идея проста: сгенерировать все номера кредитных карт, пикселизировать их — и сравнить результат с пикселизированным числом.Например, мы видим в интернете фотографию чека или банковской карточки с размытым номером. Как видим, здесь для размытия использовался линейный фильтр для блоков 8×8 пикселей:
Как восстановить эти цифры?
1. Берём образец чистого бланка.
2. Скрипт генерирует картинки для всех номеров.
3. Размываем каждую картинку по образцу исходного изображения.
4. Определяем вектор яркости каждого изображения. Вектор типа a = [a1, a2... an] содержит значения яркости каждого блока.
Здесь номер чека 0000001 соответствует вектору a(0000001)=[213,201,190,...].
Также определяем вектор яркости образца
5. Находим вектор с минимальным расстоянием от исходного (после нормализации).
Константы нормализации:
Вычисление расстояния:
Например:
d(0000001) = 1.9363
d(0000002) = 1.9373
...
d(1124587) = 0.12566
d(1124588) = 0.00000
Так находим номер чека: 1124588.
В 2019 году Сомдев Сангван
Для просмотра ссылки необходимо нажать
Вход или Регистрация
интересный метод восстановления размытых лиц в расследованиях OSINT. Метод такой: разрешение фотографии повышается в «Фотошопе». Оно сначала размывается:А потом запускается поиск по картинкам «Яндекса» (более продвинутый, чем Google Images). В данном случае «Яндекс» выполняет «брутфорс» лица на изображении:
Несложно заметить, что у всех описанных методов есть что-то общее. Если не хватает информации, чтобы правильно восстановить изображение, то мы осуществляем пикселизацию аналогичных данных — и проверяем, совпадают ли они.
Это является основой для нашего алгоритма восстановления паролей со скриншотов.
Описание алгоритма для восстановления паролей
Линейный фильтр для блоков — это детерминированный алгоритм, то пикселизация одних и тех же значений всегда приводит к одному и тому же блоку. Можно попробовать восстановить текст примерно по такому же принципу, что и цифры в примере выше. Каждый блок или комбинация блоков может рассматриваться как подзадача.У алгоритма есть определённые ограничения. Он требует одинакового размера и цвета текста на одном и том же фоне. Современные текстовые редакторы также добавляют оттенок и насыщенность, допуская огромное количество возможных вариантов шрифтов на скриншоте.
Здесь довольно простое решение. Берём
Для просмотра ссылки необходимо нажать
Вход или Регистрация
для ожидаемых символов, вставляем в тот же редактор и делаем скриншот. Данный скриншот используется в качестве подстановочного изображения для аналогичных блоков:Эта последовательность включает в себя все двухсимвольные комбинации. Важно использовать именно двухсимвольные комбинации, потому что некоторые пиксельные блоки закрывают больше одного символа.
Чтобы поиск сработал, требуется блок с абсолютно такой же конфигурацией пикселей. Например, в тестовом изображении алгоритм не смог найти часть буквы 'o', потому что в сгенерированном изображении этот блок включал ещё и часть следующей буквы, а в исходном изображении было чисто.
Создание последовательности де Брёйна с пробелами вокруг, очевидно, создаёт ту же проблему, только наоборот: алгоритм не сможет найти правильные блоки, где на край блока попала соседняя буква. Можно сгенерировать изображение со всеми вариантами буквосочетаний, а также с пустыми местами по краям. По такой картинке поиск будет идти дольше, но даст лучшие результаты.
Для большинства размытых изображений инструмент находит результаты одиночного совпадения для блоков. Затем проверяется, что совпадения окружающих блоков находятся на том же геометрическом расстоянии, что и на размытом изображении.
После прохода по всем блокам программа напрямую выводит все правильные блоки, а для блоков с несколькими совпадениями выводит среднее значение. Выдача не идеальна, но работает довольно хорошо. На рисунке показано тестовое изображение со случайными символами. Большинство символов можно прочитать.
Исходный код программы Depix
Для просмотра ссылки необходимо нажать
Вход или Регистрация
.Кстати, описанная техника перекликается с некоторыми известными криптографическими атаками. Например, это похоже на взлом хэшей, напоминает атаку на блочный шифр ECB и
Для просмотра ссылки необходимо нажать
Вход или Регистрация
(KPA).Так что если вы хотите удалить информацию со скриншота — удаляйте её полностью,
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. Хотя и тут нужно думать головой.