Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрещение копирования с помощью PrtSc содержимого 
:(
    Опции темы
OlegIT
Дата 30.3.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Как запретить по PrtSc(Alt+ PrtSc) копирование содержимого окна нарисованного с помощью WINAPI? Видел такое в одной программе, не помню название, вместо картинки чёрное поле.

PM MAIL   Вверх
borisbn
Дата 30.3.2010, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



Если программа, о которой ты говоришь - media player classic или подобная ( воспроизводит видео ), то там рисование делается не при помощи winAPI, а overlay'ем. Если программа не использует overlay, directx, opengl и иже с ними, то запретить printScreen нельзя


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Artemon
Дата 30.3.2010, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20





--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
bra1ny
Дата 30.3.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата(borisbn @ 30.3.2010,  20:27)
Если программа, о которой ты говоришь - media player classic или подобная ( воспроизводит видео ), то там рисование делается не при помощи winAPI, а overlay'ем. Если программа не использует overlay, directx, opengl и иже с ними, то запретить printScreen нельзя

можно. В шадоу надо будет похукать NtGdiBitBlt , NtUserQueryWindow и тд.


--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
borisbn
Дата 30.3.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



Artemon, судя по 
Цитата(Artemon @  30.3.2010,  21:07 Найти цитируемый пост)
http://msdn.microsoft.com/en-us/magazine/cc163713.aspx
 запретить можно только hot-keys, а не 
Цитата

grabbing your window's pixels


Цитата(bra1ny @  30.3.2010,  22:02 Найти цитируемый пост)
В шадоу надо будет похукать NtGdiBitBlt , NtUserQueryWindow и тд.

просветите, пожалуйста, неграмотного, плохо знающего русская языки, what does it means:
Цитата(bra1ny @  30.3.2010,  22:02 Найти цитируемый пост)
шадоу

Цитата(bra1ny @  30.3.2010,  22:02 Найти цитируемый пост)
похукать

и что это за функции
Цитата(bra1ny @  30.3.2010,  22:02 Найти цитируемый пост)
NtGdiBitBlt , NtUserQueryWindow



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bra1ny
Дата 30.3.2010, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



функции из shadow ssdt.
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
bra1ny
Дата 30.3.2010, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Вот только шас придумал метод один. Шас попробую реализовать , если получиться отпишу.
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
bra1ny
Дата 31.3.2010, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



И так время хоть и позднее но начнем))
Идея была пореверсить , и пройти поэтапно создание скрина. Как я и говорил выше , проблему можно решить перехватом сервисов.Можно и через драйвер фильтр клавиатуры сделать.Ближе к делу.
Создание скриншота сводиться к вызову  xxxSnapWindow.

Код


.text:BF9322FF                 mov     edi, edi
.text:BF932301                 push    ebp
.text:BF932302                 mov     ebp, esp
.text:BF932304                 sub     esp, 38h
.text:BF932307                 push    ebx
.text:BF932308                 push    esi
.text:BF932309                 mov     esi, _gptiCurrent
.text:BF93230F                 push    edi
.text:BF932310                 xor     edi, edi
.text:BF932312                 mov     [ebp+var_4], edi
.text:BF932315                 call    _PsGetCurrentProcessId@0 ; PsGetCurrentProcessId()
.text:BF93231A                 cmp     eax, _gpidLogon
.text:BF932320                 jz      loc_BF9325E6
.text:BF932326                 push    1               ; int
.text:BF932328                 lea     eax, [ebp+var_8]
.text:BF93232B                 push    eax             ; int
.text:BF93232C                 push    200h            ; Object
.text:BF932331                 push    edi             ; Handle
.text:BF932332                 call    ds:__imp__PsGetCurrentThread@0 ; PsGetCurrentThread()
.text:BF932338                 push    eax             ; int
.text:BF932339                 call    _ReferenceWindowStation@20 ; ReferenceWindowStation(x,x,x,x,x)

.....


Объемная функция , в ней производиться ряд проверок в том числе  и на принадлежность потока в винлогону(тогда скрин не делается).
Далее идет работа с буфером обмена( собственно вам там и надо подменять на свой черный квадрат).
Если посмотреть ссылки на эту функция вырисовывается следующая картина.
user posted image

Вам предстоит разобрать эту цепочку коллов , и выцепить xxxSnapWindow. 

Вот , что у меня получилось.

 user posted image

Определяет пид процесса , окно которого снимают если :
-окно в фокусе(мышкой выделено)
-alt+prtsc

PS.
Если модеры не против код драйвера покажу.

Это сообщение отредактировал(а) bra1ny - 31.3.2010, 13:25
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
GremlinProg
Дата 31.3.2010, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



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


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
OlegIT
Дата 31.3.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Спасибо за разъяснения. Примерно понял, но... Сходу всё это не понятно как реализовать. Может вместе с драйвером, подскажите, где об этом почитать, перехват сообщений, подмена картинки на черный квадрат?
PM MAIL   Вверх
bra1ny
Дата 31.3.2010, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Вот мой пример. http://www.everfall.com/paste/id.php?n6lt1zpy439s 
Так один нюанс с определением чего снимают. В xxxSnapWindow передается структура WND( недокументированная ) , через нее можно вытащить всю информацию о процессе.

По поводу черного квадрата.Смотрите как xxxSnapWindow работает с буфером обмена.

Добавлено через 12 минут и 12 секунд
Да забыл добавить , xp sp2 только. Я там везде смещения , только для нее использую.

--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
bra1ny
Дата 31.3.2010, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Только , что для семерки посмотрел , там тоже она присутствует(xxxSnapWindow). Так что думаю данный способ вполне переносим.
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
Alca
Дата 1.4.2010, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Цитата

Как запретить по PrtSc(Alt+ PrtSc) 

Запретить фотографировать.


--------------------
PM WWW ICQ Skype Jabber   Вверх
bra1ny
Дата 1.4.2010, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Если быть точнее про черный квадрат  то вам надо будет перехватить  _SetClipboardData с флагом CF_BITMAP.
ее формат
Код

BOOL _SetClipboardData(
    UINT   fmt,
    HANDLE hData,
    BOOL   fGlobalHandle,
    BOOL   fIncSerialNumber)


Дерзайте) 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
bra1ny
Дата 9.4.2010, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Вот кстати структура WND 

Код

typedef struct tagWND {          // wnd
    THRDESKHEAD   head;

    WW;         // WOW-USER common fields. Defined in wowuserp.h
                //  The presence of "state" at the start of this structure is assumed
                //  by the STATEOFFSET macro.

    struct tagWND *spwndNext;    // Handle to the next window
    struct tagWND *spwndParent;  // Backpointer to the parent window.
    struct tagWND *spwndChild;   // Handle to child
    struct tagWND *spwndOwner;   // Popup window owner field

    RECT          rcWindow;     // Window outer rectangle
    RECT          rcClient;     // Client rectangle

    WNDPROC_PWND lpfnWndProc;   // Can be WOW address or standard address

    PCLS          pcls;         // Pointer to window class
    int           cbwndExtra;   // Extra bytes in window

    HRGN          hrgnUpdate;   // Accumulated paint region

    struct tagWND *spwndLastActive; // Last active in owner/ownee list
    PPROPLIST     ppropList;    // Pointer to property list
    PSBINFO        pSBInfo;   // Words used for scrolling

    struct tagMENU *spmenuSys;  // Handle to system menu
    struct tagMENU *spmenu;     // Menu handle or ID
    LARGE_UNICODE_STRING strName;

    ULONG_PTR      dwUserData;   // Reserved for random application data
    HRGN          hrgnClip;     // Clipping region for this window

    HIMC          hImc;         // Associated input context handle

} WND;


так что все из нее выудить можно.
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0575 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.