Загрузка...

Восстанавливаем размытое фото

Тема в разделе Социальная инженерия создана пользователем iQuazar 5 дек 2021. 961 просмотр

Загрузка...
  1. iQuazar
    iQuazar Автор темы 5 дек 2021 13 712 27 фев 2019
    Разработана опенсорсная утилита Depix для восстановления паролей с размытых скриншотов

    [IMG]

    Результат работы программы Depix (beurtschipper/Depix)

    В голливудских фильмах любят преувеличивать. Они зуммируют фотографии в миллион раз — и выводят цифры из одного пикселя.

    Хотя это невероятно, но научные исследования в этой области идут давно. Ещё в 90-е годы были опубликованы теоретические работы и PoC с восстановлением текста из размытых изображений. В 2012 году Владимир Южиков о своей программе SmartDeblur для восстановления смазанных и расфокусированных снимков.

    Несмотря на достаточно хорошее развитие науки в данном направлении, до сих пор не было специализированного инструмента конкретно для восстановления паролей (текста) после пикселизации. Программа Depix — первый такой инструмент.

    В 2019 году руководитель видеогруппы Лаборатории компьютерной графики и мультимедиа ВМК МГУ Дмитрий Ватолин рассказывал о современном состоянии науки в части повышения резкости фотографий. Он говорил, что российская полиция постоянно просит его о помощи, хотя и не понимает сложности проблемы:
    [IMG]

    В общем, проблема повышения резкости действительно актуальна. Все хотят найти в кадре информацию, которой там нет.

    Что такое пикселизация?

    Во-первых, что такое пикселизация. Это процесс частичного снижения разрешения изображения для скрытия информации. Используется в разных областях. Многие компании используют пикселизацию для скрытия паролей и других секретных данных во внутренних документах.

    Реализация алгоритма Depix атакует (то есть пытается обратить вспять результат работы) общего линейного фильтра для блока пикселей (linear box filter). Этот фильтр берёт блок пикселей и перезаписывает его средним значением всех пикселей в блоке. Реализация простая и быстрая, поскольку можно обрабатывать несколько блоков параллельно.

    На рисунке ниже показан пример такого линейного фильтра. Изображение смайлика разделено на четыре блока, для каждого из которых вычисляется средний цвет — и он записывается вместо оригинального цвета пикселей, что приводит к финальной пикселизации. Напрямую реверсировать фильтр невозможно, так как потеряна исходная информация.
    [IMG]
    Инструменты для снятия размытости, история и исследования

    Изображения можно размыть множеством способов. Пикселизация линейными фильтрами для блоков пикселей — лишь один из вариантов. Большинство алгоритмов размытия склонны смешивать/растягивать пиксели, поскольку пытаются имитировать естественные размытия, которые вызваны движением камеры или расфокусировкой.

    Есть множество инструментов для повышения резкости в обычных задачах, таких как повышение резкости фотографий. К сожалению, именно с паролями нужен другой подход. Здесь высота символов всего в пару блоков, так что нет смысла просто повышать резкость, пишет автор программы Depix.

    Выше мы привели ссылки на некоторые инструменты и исследования, опубликованные на Хабре с 2012 года.

    Последние разработки в области искусственного интеллекта породили на свет причудливые заголовки в новостях, типа «Исследователи создали инструмент, который идеально повышает резкость лиц». На иллюстрации ниже — примеры из научной статьи с описанием алгоритма PULSE исследователей из университета Дьюка (США).
    [IMG]
    Работа алгоритма PULSE из университета Дьюка

    Но на самом деле здесь ИИ не восстанавливает фотографии, а генерирует новые изображения, которые размываются в такие же пиксели. Фундамент этих работ заложен алгоритмом RAISR от 2016 года. ИИ генерирует лица, которые размываются в картинку, данную на входе. Важно понимать, что сгенерированное лицо не является оригиналом, из которого получено исходное размытое пятно.

    Алгоритмы вроде PULSE кажутся новыми, но они ведут очень давнюю историю инструментов для удаления размытия. Ещё в 1994 году (!) Марк Буйе из Юго-западного исследовательского института (США) написал программу для генерации «Плутонов», размытия картинок и их сравнения с настоящими фотографиями, полученными с телескопа «Хаббл».

    Восстановление номера

    В широко известной статье от 2006 года Дхира Венкатраман объясняет алгоритм, как восстановить пикселизированный номер кредитной карты. Идея проста: сгенерировать все номера кредитных карт, пикселизировать их — и сравнить результат с пикселизированным числом.

    Например, мы видим в интернете фотографию чека или банковской карточки с размытым номером. Как видим, здесь для размытия использовался линейный фильтр для блоков 8×8 пикселей:
    [IMG]
    Как восстановить эти цифры?

    1. Берём образец чистого бланка.
    [IMG]
    2. Скрипт генерирует картинки для всех номеров.
    [IMG]
    3. Размываем каждую картинку по образцу исходного изображения.
    [IMG]
    4. Определяем вектор яркости каждого изображения. Вектор типа a = [a1, a2... an] содержит значения яркости каждого блока.
    [IMG]
    Здесь номер чека 0000001 соответствует вектору a(0000001)=[213,201,190,...].

    Также определяем вектор яркости образца
    [IMG]
    5. Находим вектор с минимальным расстоянием от исходного (после нормализации).

    Константы нормализации:
    [IMG]
    Вычисление расстояния:
    [IMG]
    Например:

    d(0000001) = 1.9363

    d(0000002) = 1.9373

    ...

    d(1124587) = 0.12566

    d(1124588) = 0.00000

    Так находим номер чека: 1124588.

    В 2019 году Сомдев Сангван описал интересный метод восстановления размытых лиц в расследованиях OSINT. Метод такой: разрешение фотографии повышается в «Фотошопе». Оно сначала размывается:
    [IMG]

    А потом запускается поиск по картинкам «Яндекса» (более продвинутый, чем Google Images). В данном случае «Яндекс» выполняет «****форс» лица на изображении:
    [IMG]
    Несложно заметить, что у всех описанных методов есть что-то общее. Если не хватает информации, чтобы правильно восстановить изображение, то мы осуществляем пикселизацию аналогичных данных — и проверяем, совпадают ли они.

    Это является основой для нашего алгоритма восстановления паролей со скриншотов.

    [HEADING=3]Описание алгоритма для восстановления паролей[/HEADING]
    Линейный фильтр для блоков — это детерминированный алгоритм, то пикселизация одних и тех же значений всегда приводит к одному и тому же блоку. Можно попробовать восстановить текст примерно по такому же принципу, что и цифры в примере выше. Каждый блок или комбинация блоков может рассматриваться как подзадача.

    У алгоритма есть определённые ограничения. Он требует одинакового размера и цвета текста на одном и том же фоне. Современные текстовые редакторы также добавляют оттенок и насыщенность, допуская огромное количество возможных вариантов шрифтов на скриншоте.

    Здесь довольно простое решение. Берём последовательность де Брёйна для ожидаемых символов, вставляем в тот же редактор и делаем скриншот. Данный скриншот используется в качестве подстановочного изображения для аналогичных блоков:
    [IMG]
    Эта последовательность включает в себя все двухсимвольные комбинации. Важно использовать именно двухсимвольные комбинации, потому что некоторые пиксельные блоки закрывают больше одного символа.

    Чтобы поиск сработал, требуется блок с абсолютно такой же конфигурацией пикселей. Например, в тестовом изображении алгоритм не смог найти часть буквы 'o', потому что в сгенерированном изображении этот блок включал ещё и часть следующей буквы, а в исходном изображении было чисто.

    [IMG]

    Создание последовательности де Брёйна с пробелами вокруг, очевидно, создаёт ту же проблему, только наоборот: алгоритм не сможет найти правильные блоки, где на край блока попала соседняя буква. Можно сгенерировать изображение со всеми вариантами буквосочетаний, а также с пустыми местами по краям. По такой картинке поиск будет идти дольше, но даст лучшие результаты.

    Для большинства размытых изображений инструмент находит результаты одиночного совпадения для блоков. Затем проверяется, что совпадения окружающих блоков находятся на том же геометрическом расстоянии, что и на размытом изображении.

    После прохода по всем блокам программа напрямую выводит все правильные блоки, а для блоков с несколькими совпадениями выводит среднее значение. Выдача не идеальна, но работает довольно хорошо. На рисунке показано тестовое изображение со случайными символами. Большинство символов можно прочитать.
    [IMG]
    Исходный код программы Depix опубликован на Github.

    Кстати, описанная техника перекликается с некоторыми известными криптографическими атаками. Например, это похоже на взлом хэшей, напоминает атаку на блочный шифр ECB и атаку на основе открытых текстов (KPA).

    Так что если вы хотите удалить информацию со скриншота — удаляйте её полностью, заливая сплошным цветом. Хотя и тут нужно думать головой.
    [IMG]

     
    Этот материал оказался полезным?
    Вы можете отблагодарить автора темы путем перевода средств на баланс
    Отблагодарить автора
    5 дек 2021 Изменено
  2. squezee1
    squezee1 5 дек 2021 Заблокирован(а) 1 2 июн 2019
    Много текста
     
  3. Hypocrite
    Hypocrite 5 дек 2021 Murder me slowly 13 833 8 авг 2017
    iQuazar, сократи текст до того как это установить и пользоваться, а так, достаточно интересно
     
  4. Yaszly
    Yaszly 5 дек 2021 54 4 авг 2018
    а есть готовый файл для поиска на русском языке?
     
  5. Gender
    Gender 5 дек 2021 Заблокирован(а) 576 30 июл 2020
    Читать заебусь, но если реально работает то лайк
     
  6. riacqua
    riacqua 5 дек 2021 1234 15 мар 2019
    Теперь можно находить порнуху, бро спасибо!
     
  7. Plotnaya
    Plotnaya 5 дек 2021 Заблокирован(а) 23 23 ноя 2021
    ты че умный :Ktonahuy:
     
  8. GregIn
    GregIn 5 дек 2021 Заблокирован(а) 2520 4 авг 2021
    Йоу, йоу, йоу, это отличная новость, можно теперь восстанавливать изображения для всяких делюг:finger_up:
    p.s. спрячь скрины, читать не удобно
     
  9. kreekly
    kreekly 5 дек 2021 1541 24 сен 2018
    оставь просто ссылку на сайт вместо текста и всё
     
Top