Blog. Just Blog

Как защитить приложение от снятия скриншота

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Как защитить приложение от снятия скриншота
Как защитить приложение от снятия скриншота

Про ценность информации в современном цифровом мире можно рассказывать долго, но я этого делать не буду. Только хочу упомянуть такую безобидную на первый взгляд штуку, как скриншот экрана. "Алло, техподдержка, у меня тут программа что-то пишет непонятно" - "Пришлите скриншот". Тык в PrintScreen, вставить в письмо, отправить. Знакомая ситуация? А то, что в это время на экране может быть служебная или вовсе конфиденциальная информация, и куда она пойдет дальше, об этом мало кто думает. Если данные, отображаемые в окнах приложения, даже случайно не должны быть переданы не по назначению, то разработчикам софта стоит об этом позаботиться. На скриншоте как раз пример скриншота окна с защитой от скриншота (извините). Само окно есть, но его содержимое не отображается.

Начиная с Windows 7, в системе появилась функция SetWindowDisplayAffinity, с помощью которой можно ограничить отображение содержимого окна только на монитор. Пользоваться ей очень просто, пара констант и один вызов при создании окна.
  1.         WDA_NONE    = 0x0
  2.         WDA_MONITOR = 0x1
  3.  
  4.         ; Отображать содержимое окна только на мониторе
  5.         invoke  SetWindowDisplayAffinity,[hwnddlg],WDA_MONITOR
Теперь при попытке сделать скриншот вместо содержимого окна будет черный прямоугольник. Для отмены защиты окна, надо повторно вызвать функцию с параметром WDA_NONE. Конечно, если задаться целью сделать именно скриншот, то какой-нибудь обходной путь можно найти, но сохранить конфиденциальную информацию от случайных глаз такой способ вполне может.

Важное замечание. Как написано в официальной документации, функция SetWindowDisplayAffinity защищает от скриншота только в том случае, когда в системе активен Desktop Window Manager, который используется в графическом интерфейсе Windows Aero. В базовых и упрощенных схемах скриншоты делаются как обычно без каких-либо ограничений.

В приложении пример программы с исходным текстом, которая создает диалоговое окно с защитой от снятия скриншотов.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

No.Screenshot.Demo.zip (1,968 bytes)


Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 983 | Комментариев: 12

Метки: Assembler, окна

Комментарии

Отзывы посетителей сайта о статье
FFFF (12.09.2020 в 07:55):
ЦитатаИз стороннего процесса мне не удалось даже под Администратором

А из этого же, инжектом библтотеки?
ManHunter (14.05.2020 в 18:58):
Попробовал ретранслировать защищенное окно в свое приложение, как написано тут: http://www.manhunter.ru/assemb...emblere.html
В окне приложения отображается нормально, но снять скриншот окна-ретранслятора тоже не получается, там такой же черный прямоугольник.
ManHunter (24.04.2020 в 17:55):
ЦитатаА вот если выдать этому окну по найденному hwnd SetWindowDisplayAffinity  WDA_NONE ?

Из стороннего процесса мне не удалось даже под Администратором.
wet (24.04.2020 в 12:54):
Почитал, что обходится при помощи DwmpDxGetWindowSharedSurface и DwmGetDxSharedSurface.

Ну как то это длинно. А вот если выдать этому окну по найденному hwnd SetWindowDisplayAffinity  WDA_NONE ?
Или обратного действия эта функция уже не имеет?
PS
Кстати, NOP'ить не обязательно, проще 1 на 0 поменять в вызове. Это точно срабатывает, проверил на вашем примере.
Exit (24.04.2020 в 06:55):
ManHunter, да, все верно. DWM в системе был отключен.
Как то не прижился, у меня, эффект Аэро...
ManHunter (23.04.2020 в 14:46):
ЦитатаHowever, it works only when the Desktop Window Manager (DWM) is composing the desktop.

С включенным Aero PicPick тоже снимает черный прямоугольник. Добавил информацию в статью.
Exit (23.04.2020 в 14:27):
Снял скрин прогой PicPick
https://i.imgur.com/W5muOLs.png
ManHunter (22.04.2020 в 17:37):
Предпоследний абзац совсем не читал, да? И от глядения глазами не поможет, и от художника с мольбертом не поможет, и от оператора с кинокамерой не поможет. А от скриншота поможет.
Андрей (22.04.2020 в 17:35):
От приложения "смартфон с камерой" не поможет.
noldor (21.04.2020 в 10:29):
Спасибо, хорошая функция. От приложения «ножницы» тоже помогает))
ManHunter (21.04.2020 в 00:21):
Ну а как иначе рассказать о силах зла? :) Зато теперь заинтересованные люди будут знать что в коде NOP'ить
A1eksandr1 (21.04.2020 в 00:14):
"Ты должен был бороться со злом, а не примкнуть к нему"
:)

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2020
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 3 (0.0048 сек.) / Память: 5 Mb
Наверх