Конференция "WinAPI" » Запретить запись с экрана [D7, WinXP]
 
  • Игорь Андреевич (30.09.09 12:47) [0]
    Мне нужно сделать так, что бы при выполнении программы не было возможности сделать скриншот экрана и запретить запись происходящего на экране (тоесть что бы всякие frapsы и т.д. не работали)
  • brother © (30.09.09 13:04) [1]
    если коротко - невыполнимо...
  • Медвежонок Пятачок © (30.09.09 13:13) [2]
    > не было возможности сделать скриншот экрана
    Всегда будет такая возможность.

    >и запретить запись происходящего на экране
    Запретить можно.
    Только запрет проигнорируют.
  • Дмитрий (30.09.09 14:00) [3]
    ... самый простой способ не увидеть ничего на экране - ничего не выводить на экран, нет изображения - нет проблемы ...
  • Sapersky (30.09.09 15:25) [4]
  • DVM © (30.09.09 22:38) [5]

    > Игорь Андреевич   (30.09.09 12:47)
    >
    > Мне нужно сделать так, что бы при выполнении программы не
    > было возможности сделать скриншот экрана и запретить запись
    > происходящего на экране (тоесть что бы всякие frapsы и т.
    > д. не работали)

    Можно запустить твою программу вместе с ОС под виртуальной машиной, типа VMWare и сделать скриншот. И никто не сможет запретить.
  • DaysBetweenInt (30.09.09 22:49) [6]
    > Можно запустить твою программу вместе с ОС под виртуальной
    > машиной, типа VMWare и сделать скриншот. И никто не сможет
    > запретить.

    Но без проблем можно определить, что программа работает под виртуальной машиной и соответственно ...
  • DVM © (01.10.09 00:51) [7]

    > DaysBetweenInt   (30.09.09 22:49) [6]


    > Но без проблем можно определить, что программа работает
    > под виртуальной машиной и соответственно ...

    Не думаю, что без проблем.
  • DVM © (01.10.09 00:54) [8]

    > DaysBetweenInt   (30.09.09 22:49) [6]

    Скажу больше. Во-первых это справедливо только для некоторых виртуальных машин, вот для той же VMWare. Во-вторых это недокумнтированные методы и соответственно точто работает сейчас может перестать работать в след версии машины. А виртуальных машин вагон и маленькая тележка:
    http://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD
  • miek (01.10.09 10:03) [9]
    Можно затруднить снятие скриншота (но только под winXP/win95), если контролировать сообщение WM_PAINT/WM_PRINT. И товарищи правильно говорят - 100% гарантии нет и не будет. Если пользователь видит изображение, его можно будет снять и программно.
  • Игорь Андреевич (01.10.09 13:14) [10]
    Я понял, спасибо. Скажите тогда пожалуйста, как можно усложнить процесс снятия? Максимум до чего я додумался, это во время запуска программы, таймером с интервалом 1 полностью чистить буфер обмена (защита от всяких printscreen и т.д.).

    А возможно ли сделать так, что бы программа запускалась и вся машина замирала, типа как при появлении окна выключения все замирает? Может есть какой-то глобальный freez или че-то в этом духе
  • DVM © (01.10.09 13:19) [11]

    > Игорь Андреевич   (01.10.09 13:14) [10]


    > типа как при появлении окна выключения все замирает?

    Ничего при этом не замирает. Сверху ложится окно на весь экран, которое содержит скриншот рабочего стола и медленно его обесцвечивает.


    > Игорь Андреевич   (01.10.09 13:14) [10]

    Можно попробовать запускать твою программу на отдельном десктопе, т.е. программа при запуске создает десктоп и на него переключается, там же происходит работа с ней. Это затруднит снятие скриншотов, т.к. они обычно снимаются с десктопа основного. Правда там не будет и проводника и вообще ничего. Даже диспетчер задач там не будет отображаться (он будет на основном десктопе, по крайней мере в XP так было раньше).
  • Игорь Андреевич (01.10.09 13:28) [12]
    Это очень хорошая идея, спасибо! Мне и не нужно ничего кроме моего изображения на весь экран. Это будет упрощенный чертеж проекта кухни. При чем сделаю так, что посмотреть на него можно будет только 1 раз.

    А вы не могли бы более подробно рассказать? Или показать пример создания второго рабочего стола и как заставить программу вывести свое окно именно на него?
  • DVM © (01.10.09 13:34) [13]

    > Игорь Андреевич   (01.10.09 13:28) [12]

    PrintScreen на новом десктопе кстати работает. И потом изображение из буфера обмена можно забрать. Придется еще чистить буфер или как то блокировать PrintScreen там. Само же создание десктопа несложно, вот:

    program Project1;
    uses
     desktop in 'desktop.pas',  // обязательно первым!!!
     Forms,
     Unit1 in 'Unit1.pas' {Form1};
    {$R *.res}
    begin
     Application.Initialize;
     Application.CreateForm(TForm1, Form1);
     Application.Run;
    end.

    unit desktop;

    interface

    implementation

    uses
     windows;

    procedure SetDesktop;
    var
     hDsk: THANDLE;
    begin
     hDsk := CreateDesktop('mydesk',nil,nil,0,
                       DESKTOP_READOBJECTS or DESKTOP_CREATEWINDOW  or DESKTOP_CREATEMENU  or
                       DESKTOP_HOOKCONTROL or DESKTOP_JOURNALRECORD or DESKTOP_JOURNALPLAYBACK or
                       DESKTOP_ENUMERATE or DESKTOP_WRITEOBJECTS or DESKTOP_SWITCHDESKTOP,
                       nil);
     SetThreadDesktop(hDsk);
     SwitchDesktop(hDsk);
     CloseDesktop(hDsk);
    end;

    initialization
     SetDesktop;
    end.



    Проверки на результаты функций вставь сам.
  • Игорь Андреевич (01.10.09 13:41) [14]
    hDsk := CreateDesktop('mydesk',nil,nil,0,
                      DESKTOP_READOBJECTS or DESKTOP_CREATEWINDOW  or DESKTOP_CREATEMENU  or
                      DESKTOP_HOOKCONTROL or DESKTOP_JOURNALRECORD or DESKTOP_JOURNALPLAYBACK or
                      DESKTOP_ENUMERATE or DESKTOP_WRITEOBJECTS or DESKTOP_SWITCHDESKTOP,
                      nil);


    это мы создаем рабочий стол с именем mydesk

    SetThreadDesktop(hDsk);
    SwitchDesktop(hDsk);



    что означают эти функции? Догадываюсь, что одна из них переключает, а вторая?

    CloseDesktop(hDsk);



    это нужно вставить в form.onClose ? Что бы закрыть созданный рабочий стол перед выходом из мое программы?

    initialization
    SetDesktop;



    не могу вкурить что это

    Обьясните плииз)
  • DVM © (01.10.09 13:47) [15]

    > это мы создаем рабочий стол с именем mydesk

    да


    > SetThreadDesktop(hDsk);

    Устанавливаем десктоп основному потоку нашего приложения. Иначе свое окно мы там не увидим.


    > SwitchDesktop(hDsk);

    Переключаемся на этот десктоп и видим там свое окно.


    > CloseDesktop(hDsk);

    Закрваем хендл. Сам десктоп продолжает жить.


    > initialization
    > SetDesktop;
    >

    Это нужно чтобы десктоп к моменту создания нашего окна уже был создан.
  • Игорь Андреевич (01.10.09 13:50) [16]
    так
    > initialization
    > SetDesktop;

    нужно в onCreate формы писать?
  • DVM © (01.10.09 13:54) [17]

    > нужно в onCreate формы писать?

    Категорически не нужно это писать в onCreate формы!!! В этот момент форма уже есть, а десктопа нет уже. Готовое окно нельзя перекинуть на другой десктоп насколько я знаю. Окно надо создавать на этом десктопе.

    Я же сверху привел рабочий код, создай новый проект, создай новый модуль, сохрани модуль с именем десктоп и вставь первым в uses в файле проекта. В самом модуле напиши все что у меня в примере.
  • DVM © (01.10.09 13:56) [18]

    > Игорь Андреевич   (01.10.09 13:50) [16]

    Создание десктопа должно происходить до создания объекта Application (так как в нем тоже есть окно скрытое) и надежнее всего десктоп создавать и переключаться на него при инициализации модуля.
  • Игорь Андреевич (01.10.09 14:01) [19]
    Спасибо, работает)) А как при закрытии формы вернуться обратно? А то у меня воллпейпер на весь экран и все)) Ни на что не реагирует))
  • DVM © (01.10.09 14:52) [20]

    > А как при закрытии формы вернуться обратно?

    SwitchDesktop очевидно

    Странно, но у меня при закрытии программы возвращается прежний десктоп.
  • DVM © (01.10.09 14:55) [21]

    > Игорь Андреевич   (01.10.09 14:01) [19]

    Как то так:


    unit desktop;

    interface

    implementation

    uses
     windows;

    var
     OldDesktop: THandle;

    procedure SetDesktop;
    var
     hDsk: THANDLE;
    begin
     OldDesktop := GetThreadDesktop(GetCurrentThreadId);
     hDsk:=CreateDesktop('desk',nil,nil,0,
                       DESKTOP_READOBJECTS or DESKTOP_CREATEWINDOW  or DESKTOP_CREATEMENU  or
                       DESKTOP_HOOKCONTROL or DESKTOP_JOURNALRECORD or DESKTOP_JOURNALPLAYBACK or
                       DESKTOP_ENUMERATE or DESKTOP_WRITEOBJECTS or DESKTOP_SWITCHDESKTOP,
                       nil);
     SetThreadDesktop(hDsk);
     SwitchDesktop(hDsk);
     CloseDesktop(hDsk);
    end;

    initialization
     SetDesktop;

    finalization
     SwitchDesktop(OldDesktop);

    end.

  • DVM © (01.10.09 14:58) [22]

    > Игорь Андреевич   (01.10.09 14:01) [19]

    Кстати проверил, средствами программы типа SnagIT, HyperSnapDX снять скриншот с другого десктопа не получилось.
  • Игорь Андреевич (01.10.09 15:55) [23]
    DVM, спасибо!)) Вам памятник нужно поставить)) Просто и гениально)
  • DaysBetweenInt (01.10.09 16:00) [24]
    > Мне нужно сделать так, что бы при выполнении программы не
    > было возможности сделать скриншот экрана и запретить запись
    > происходящего на экране (тоесть что бы всякие frapsы и т.
    > д. не работали)


    Игорь Андреевич, а обычный фотоаппарат и камеру для этих целей использовать допустимо?
    :)
  • Медвежонок Пятачок © (01.10.09 16:10) [25]
    При чем сделаю так, что посмотреть на него можно будет только 1 раз.

    Он про ТВ-аут забыл и про бытовую видеозаписывающую аппаратуру
  • Игорь Андреевич (01.10.09 16:10) [26]
    Я про это думал. Это отдельная тема. Тут наверное уж ничего не поделать.
  • Медвежонок Пятачок © (01.10.09 16:12) [27]
    а про хдми уже вообще молчу
  • Игорь Андреевич (01.10.09 16:26) [28]
    Вообще-то эта защита от домохозяек, которые максимум что сделают, это попросят своего сына, который (по их мнению) хорошо разбирается в компьютерах (на самом деле большинство таких "хакеров" максимум умеют грабить корованы), распечатать проект который им на халяву разработает наш конструктор
  • Медвежонок Пятачок © (01.10.09 16:38) [29]
    это большая-пребольшая наивность. и про сына и караваны.

    если что-то представляет ценность и защищено, то в один миг появляется тематический форум на котором помира делятся своими способами взлома.
  • Игорь Андреевич (01.10.09 16:58) [30]
    не, у меня не такой масштабный проект. Всего этого и еще немножко моего меня вполне устроит
  • DVM © (01.10.09 18:37) [31]

    > DaysBetweenInt   (01.10.09 16:00) [24]


    > а обычный фотоаппарат и камеру для этих целей использовать
    > допустимо?

    Для этого будет применяться метод описанный тут: http://pda.delphimaster.net/?id=1252279311&n=3
  • Игорь Шевченко © (01.10.09 19:56) [32]
    Все, что отображается на экране, может быть скопировано (тем или иным способом). За очистку буфера обмена надо отрывать руки сразу, потом отрывать место крепления рук (какое, надеюсь, не надо пояснять? )

    Если домохозяйка распечатает чертеж - ну и пусть распечатает, вреда от этого немного.
  • Leonid Troyanovsky © (01.10.09 21:03) [33]

    > Игорь Шевченко ©   (01.10.09 19:56) [32]

    > руки сразу, потом отрывать место крепления рук (какое, надеюсь,
    >  не надо пояснять? )

    В смысле, что место взращивания?
    IMHO, потом надо бы более чувствительное.

    --
    Regards, LVT.
  • Германн © (02.10.09 02:29) [34]

    > Если домохозяйка распечатает чертеж - ну и пусть распечатает,
    >  вреда от этого немного.
    >

    Ну да. Домохозяйка ведь не всегда кухарка!
    :)
  • Игорь Андреевич (02.10.09 13:01) [35]
    Домохозяйка украдет проект, который мой конструктор на халяву ей сделает? Шишь ей! :) Убытки  будут мизерные из-за того, что от основных методов копирования чертеж защищен, а людей, которые захотят докопаться до механизма работы будет ОЧЕНЬ мало
  • Игорь Шевченко © (02.10.09 13:09) [36]
    Игорь Андреевич   (02.10.09 13:01) [35]

    Извиняюсь, что лезу не в свое дело, но

    1. Конструктор может не делать на халяву
    2. Конструктор может делать на халяву то, что не представляет практической ценности, а служит лишь наметками

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

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

    Удачи!
  • QAZ (02.10.09 13:18) [37]
    не забывай что то что работает на твоем компе, не будет работать на другом
    либо второй десктоп не включица, либо не переключица обратно
  • Игорь Андреевич (02.10.09 14:09) [38]
    Игорь Шевченко,

    1. Клиентов отпугивает когда берут предоплату
    2. Наметки тоже стоят денег и времени

    Такая защита не мешает функционированию других приложений. Вместо очистки буфера можно сделать перехват print screen или С ПРЕДУПРЕЖДЕНИЕМ заблокировать клавиатуру.

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

    QAZ,

    это все понятно. Но даже простой пдф или джпег может запороться во время пересылки, или у человека глючит редактор просмотра файлов. Плюс этой системы в том, что для файла с проектом не нужен абсолютно никакой редактор. Разве что под МакОС нужно компилировать в дмг а не в ехе. А учитывая что мажоров с Маками не так и много...
  • QAZ (02.10.09 14:23) [39]

    > пдф или джпег может запороться во время пересылки

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

    кроме того не один почтовик с антивиром молча не пропустит почту с ЕХЕ
    и получатель даже не станет его открывать
  • Игорь Андреевич (02.10.09 14:25) [40]
    Запакую в WinRar и все дела.

    А перед запуском будет предупреждение что "данная программа работает по технологии..." и т.д. Вся ответственность снимается
  • DVM © (02.10.09 15:28) [41]
    Кстати, я не проверял, но мне кажется, что у юзера с ограниченными правами десктоп вообще не будет создан. Надо проверять.
  • DVM © (02.10.09 15:32) [42]

    > Игорь Шевченко ©   (02.10.09 13:09) [36]


    > каковому специалисту можно будет разъяснить все требования
    > к защите детально, а не спрашивать по форумам.
    >

    Вас послушать, так на форум лучше вообще не ходить с вопросами, ведь для решения любого вопроса можно нанять специалиста. Зачем тогда форумы?
    Да и тут вроде не домохозяйки собрались.
  • Eraser © (02.10.09 16:00) [43]
    > [42] DVM ©   (02.10.09 15:32)

    решения у данной задачи нету - тут уже автору много раз тонко и не очень намекали (сам реализовывал перехват оверлея, так же могу напомнить про mirror драйвер), а автор все не упокоится. вместо того, чтобы страдать ерундой уже бы мог написать гору полезного софта.
  • Игорь Шевченко © (02.10.09 17:34) [44]
    DVM ©   (02.10.09 15:32) [42]

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

    А ставить диагноз по общим словам - "есть приложение, нельзя снимать его вывод с экрана, как бы это сделать" - занятие пустое и бесперспективное. Тем более, снять можно.
  • TIF © (04.10.09 00:20) [45]
    Игорь Шевченко ©   (01.10.09 19:56) [32]
    > Если домохозяйка распечатает чертеж - ну и пусть распечатает,
    >  вреда от этого немного.

    С распечатками проще. Накладываем водяной знак на изображение и всё, в принципе...
  • trix (06.10.09 12:09) [46]
    попробуй сделать скриншот видео, у тебя ничего не выйдет. Все программы типа радмин не могут смотреть видео, копай в этом направлении.
  • DVM © (06.10.09 16:10) [47]

    > trix   (06.10.09 12:09) [46]


    > попробуй сделать скриншот видео, у тебя ничего не выйдет.
    >  Все программы типа радмин не могут смотреть видео, копай
    > в этом направлении.

    Это направление называется оверлей. Скриншот делается элементарно.
  • guard_gg (22.10.09 07:03) [48]
    Читаю тему и вдруг неожиданно вспоминается просмотр фильмов и попытка сделать скриншот кадра из фильма что ведет к очень интересным последствием.

    После дальнейшей вставки буфера обмена любой редактор, на скриншоте рабочего стола и проигрывателя, вместо изображения внутри видео проигрывателя у нас оказывается черный экран, притом черный цвет там является не чисто черным а на пару значений смещенным от черного, уже не помню какой точно (назавем его "magic color")

    И вот самое интересное происходит тогда когда посередине рабочего стола расположено окно проигрывателя в котором идет фильм. Сверху же его полностью перекрывает окно к примеру того же фотошопа. Притом перекрывает так что проигрывателя совсем не видно.

    Если же в той точке где под фотошопом располагается окно видео фильма мы нарисуем квадрат цвета "magic color", то о чудо! Этот залитый данным цветом участок станет прозрачным, а вернее не прозрачным!!! а просто на нем начнет рисоватся кадры видео фильма. Остальное изображения рабочего стола либо проигрывателя естественно просвечиватся сквозь фотошоп не будет.

    Насколько я понимаю видео рисуется на экранах под действием DirectDraw
    Извиняюсь если я не прав так как никогда не копал в эту степь.
    Соответсвенно если поэкпериментировать с этими технологиями то пологаю можно получить достаточно хорошую програмную защиту.

    _______________________________________________________________

    А вот и еще пришла идея! Можно сделать загрузочный CD желательно c UNIX подобой средой, (подобно тому как загружаются продукты Acronis)
    любо в крайнем случае с DOS средой. Сделать автоматически запуск программы которая бы только могла отрыть и показать изображение.
    Лучше всего с дискеты бо тогда можно будет програмно ограничить колличество загрузок с дискеты. Например 1 раз загрузилось а второй раз уже не может так как файл изображения уже удален ^____^
  • CrytoGen (22.10.09 07:35) [49]
    то что вы описали называется оверлеем и как уже было сказано выше или по ссылкам приведённым в теме - такой подход не защитит от записи с экрана
  • guard_gg (22.10.09 10:49) [50]
    В конце концов на месте того человека я бы распечатал чертеж на бумаге и пришел в гости к заказчику и показал бы. Естественно что заказчик не стал бы у меня на глазах сканировать, фотать или еще какие нитьь манипуляции проводить с чертежом. И так думаю поступают все конторы кто разрабатывает дизайн проекты и пр. прочести. А остальное имхо поиск неприятностей на ягодицы Х))
  • Медвежонок Пятачок © (22.10.09 11:09) [51]
    Можно сделать загрузочный CD желательно c UNIX подобой средой

    боже, как все сложно.
    сзади на системном блоке есть свободный видеовыход. либо готовый композит, либо вга, любо dvi

    подключаем видеокамеру и тупо пишем все что видно на эранах, оверлеях и пр.
  • Anatoly Podgoretsky © (22.10.09 11:40) [52]
    > guard_gg  (22.10.2009 10:49:50)  [50]

    То то много вопросов появилось, как незаметно от пользователя скопировать флешку.
  • Anatoly Podgoretsky © (22.10.09 11:51) [53]
    Кстати у вас какие то шпионы, а не домохозяйки.
  • DVM © (22.10.09 13:28) [54]

    > Медвежонок Пятачок ©   (22.10.09 11:09) [51]


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

    Боже, как все сложно. Берем ту же видеокамеру и снимаем прямо с экрана. :)
  • CrytoGen (22.10.09 13:45) [55]
    всё ещё проще прикладываем листок к экрану и обводим контуры карандашом :)
  • guard_gg (22.10.09 19:41) [56]
    Тогда нуна немного магии, внушить домохозяйке что на белом листе на самом деле нарисован професиональный чертеж и без этого чертежа счастья нет в её жизни!

    Может и глупая шутка но почему то она немного отражает окружающую нас реальность Х)
  • Anatoly Podgoretsky © (23.10.09 11:53) [57]
    > guard_gg  (22.10.2009 19:41:56)  [56]

    Вопрос это административный и долже решаться административными методами.
 
Конференция "WinAPI" » Запретить запись с экрана [D7, WinXP]
Есть новые Нет новых   [134433   +21][b:0][p:0.003]