Задача: Есть приложение А и Б. Нужно чтоб все данные которые копирует в буфер обмена приложение А, не попали через буфер обмена в приложение Б. Мои идеи реализации: User mode: хук на создание процессов + хук на функции работы с Clipboard. Kenel mode: подмена адресов в таблице SDT для на функции Clipboardа. нужен вариант с kernel mode, но тут возникает проблема нужна совместимость с x64 , как тут быть не знаю. может кто что подскажет ?) На данный момент выбран способ с инжектом длл из ядра в АП юзер-модного приложения.
шифруй данные которые идут в буфер. В другом приложении это будет мусор. Если тебе именно защита данных нужна.
onSide Суть задачи не много другая, приложения А,Б может быть любое. типа (блокнот,explorer,и тп..). По этому нужен перехват. Если б приложение мое то ясно что шифровка. Вот пример: http://www.apriorit.com/our-experience/9-sd-articles/166-clipboard-protection только нужно под x64 пустить. как ? в общем что-то мне подсказывает нужно смотреть драйвер win32k
хз на х64 хуки не поставишь, разве что PatchGuard вырубать, что перебор. можно для каждого процесса юзать ключ PID. В начале буфера ставить какую-то сигнатуру уникальную, например хеш имени процесса или тот же пид. Если не совпадает возвращаем пустой буфер. Но хуки во всех процессах тоже херовое решение))
А можно как то вклинится переходником(драйвер фильтр) в win32k ? ты имешь ввиду с юзер мода ?...это не вариант.
Без хуков можно реализовать на уровне разных пользователей, а не приложений. Если надо защитить буфер обмена от приложения Б, то приложение Б надо запускать от имени другого пользователя, которому поставить запрещающий ACE WINSTA_ACCESSCLIPBOARD для WinSta0.
Deyton Как сильно внешне изменится робота программ с точки зрения пользователя? Я так понимаю нужно создать еще одного пользователя и если что делать запуск от его имени ? Если это так то, начинаются проблемы с папками типа(мои документы и тп)... также вопрос прав возникает. и темболее что это задача должна быть розшырена до уровня: есть список программ которые не могут использовать буфер обмена определенных приложений.
XshStasX Зачем шифровка-то штатный win клипобрд из соображений совместимости с win16 сделан очень криво, поэтому если задача как раз нарушить совместимость, то гораздо лучше просто свою нормальную реализацию замутить, это не сложно ) Или можно просто идентифкатор формата использовать в диапазоне от CF_PRIVATEFIRST до CF_PRIVATELAST. С win64 не разбирался, а как там на счёт того чтобы класть в папку с exe пропатченную user32.dll (или где там в win64 функции клипборда живут)? Она же по идее должна заменить штатную как раз только для этого приложения. Соотвественно патч в простейшем случае может заключаться в перекодировании идентификатора формата в приватный и наоборт. Тогда те приложения к которым подброшена альтернативная dll будут работать не пересекаясь с теми к которым не подброшена.
Clerk Для этого нужно писать свое подобие гипер-визора ? Как много кода для этого нужно? просто сроки два месяца у этого проекта. А сегодня я первый свой драйв запустил)
Ничего не возникает. Права назначаются, окружение тоже - CreateEnvironmentBlock с нужным токеном, аналогично CurrentDirectory, передаешь нужные параметры CreateProcessWithLogonW и все.