Получить информацию о чужом окне

Corrector

Прога знает handle чужого окна. Надо определить, когда в этом окне откроется стандартный виндоусовский MessageBox (и ему подобные) и когда закроется. Как это можно сделать?

evgen5555

Всё, что можно выцепить через FindWindow, отображается либо в Spy++ (пункт Tools в меню студии либо в Process Explorer.

otets-mihail

Ну ему, как я понял, триггер на это дело нужен.

evgen5555

SetWindowHookEx ?

Werdna

Мне нравится ваше мышление, господа Виндузятнечги! Честно, мне бы так.
Если серьезно: а вдруг окно принадлежит другому пользователю? К примеру, на локальной машине сидит ограниченный пользователь и он сможет что-то нопесать окну проги с правани "супер-пупер"?
Честно, стало интересно, как в винде обстоит с правами срать что-то окну?

Marinavo_0507

Честно, стало интересно, как в винде обстоит с правами срать что-то окну?
AFAIK так же
можно срать сколько вздумается

Helga87

Обстоит дело плохо. Т.е. в чужое окно посылать сообщения можно. Признано багом by design

evgen5555

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

Helga87

Дык. Дело в том, что этот хак дает (причем негарантировано) возможность локально повысить свои привилегии на terminal server-е. Это достаточно редкая ситуация, для того, чтобы такие хаки были распространенными и общеизвестными.

Marinavo_0507

Не обязательно на терминал-сервере.
Например, троян может подождать, пока юзер сделает Run As, чтобы получить админские привилегии. Или воспользоваться готовыми привилегироваными программами для этой цели if any.
Таких хаков в дикой природе нет, потому как трояну не нужны админские права, чтобы сделать, что ему обычно надо - создать зомби.

Helga87

Да, согласен. В любом случае всегда проще прислать письмо с темой "сиськи внутри". Можно даже считать, что у открывшего присланный .exe-шник админские права. В 90% случаях это окажется правдой.

Marinavo_0507

Самое реальное применение - это имхо корпоративные сети. Там должно быть дофига вкусных корпоративных приложений, написанных программистом Васей. Но и там проще шефу аттач мылом послать, подделав обратный адрес.

Helga87

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

Marinavo_0507

Мой опыт показывает, что либо ситуация такова, что все рюхающие люди находятся в it отделе
Будем считать, что враг внедрил агента, который притворился ламером, чтоб его взяли работать. Естественно, в багтраке про такой случай вряд ли напишут, что частично объясняет скептицизм некоторых.

Helga87

От этого такие корпорации не защищены. Впрочем, если есть чего украсть, то есть и СБ, которая по ручкам надает.

Marinavo_0507

Впрочем, если есть чего украсть, то есть и СБ, которая по ручкам надает.
Отрежут яйца кому-нибудь из IT, да и всё.

Marinavo_0507

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

Dasar

> А вот если одно окно создано локальным приложением, а другое - пришло с терминал-сервера
так не бывает.

Helga87

пришло с терминал-сервера,
То, что мне нарисовали окошко, которое на самом деле на терминал сервере, ничего плохого не сделает. Дело в том, что идеология terminal server отлична от X Server. В иксах, окошки живут на клиентском компе, на котором запущен X Server, а сообщения и управление осуществляется серверной машиной, на которой запущен X Client. Это хорошо малым временем отклика и небольшим трафиком. Зато начинается геморрой (впрочем, решаемый когда надо соединиться с сервером, а сам сидишь за NAT-ом. В Remote Desktop-е же на клиенте идет только передача картинки и отсылка реакции пользователя типа: нажата мышка в координатах (x, y) нажата клавиша "Ы". Таким образом, понятия "пришло с терминал сервера" нет

Dasar

> Дело в том, что этот хак дает (причем негарантировано) возможность локально повысить свои привилегии на terminal server-е
насколько я помню, там основная дырка - это когда сервис запускается в интерактивном режиме.
ps
и, конечно, в более редкой ситуации, когда приложение запускается через runas с увеличенными правами в юзерской сессии.

Marinavo_0507

Я в курсе разницы.
Только, во-первых, слышал ещё про published applications, но походу, это только у Citrix, а MS это не скопировали. Правда, ещё я слышал, что Citrix используется в большинстве компаний Fortune 500 или типа того.
В Remote Desktop-е же на клиенте идет только передача картинки и отсылка реакции пользователя типа: нажата мышка в координатах (x, y) нажата клавиша "Ы".
А во-вторых, не только картинки и кнопки. Буфер обмена, например, ещё. Вдруг и сообщения ходят, я ж не знаю.

Helga87

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

Dasar

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

Helga87

Наблюдал, что буфер обмена для текста начинает работать после подключения дисков. Правда, там firewall еще мог немного мешаться.

Dasar

попробуй обойти вокруг компьютера с бубном еще раз

Helga87

ок

Corrector

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

Corrector

 
Мне нравится ваше мышление, господа Виндузятнечги! Честно, мне бы так.
Если серьезно: а вдруг окно принадлежит другому пользователю? К примеру, на локальной машине сидит ограниченный пользователь и он сможет что-то нопесать окну проги с правани "супер-пупер"?
Честно, стало интересно, как в винде обстоит с правами срать что-то окну?

Задачу не требуется решать в общем случае.
Вкратце, для чего это нужно:
Я пишу драйвер, который перехватывает нажатия клавиш. Далее програ определяет, кто "нажал" клавишу - человек или клавиатурный ридер магнитных карт (по интервалу между сообщениями). Если человек - то с небольшой задержкой (незаметной для человека) эти события воспроизводятся. Если ридер - сообщения уничтожаются и генерируется некоторое событие.
Проблема возникла в том, что если открыто окошко MessageBox, переэмулированные моим драйвером сообщения (SendMessage) не всегда "доходят" до окошка. В частности, нельзя закрыть Messagebox Энтером или Esc'пом. Поэтому я решил отслеживать появление таких окошек и выключать драйвер пока окошко не закроется.

Marinavo_0507

ЫЫЫ!
Еще программист вася написал программу отслеживания объектов на видеокартинке. Для этой цели он запускал стандартную программу, идущую в комплекте с камерой, которая оверлеем выдавала картинку на экран, а потом эту самую картинку прямо из видеопамяти и считывал. Один раз программа показала огромного размера объект, находящийся в неположенном месте, и имеющий явно враждебные намерения по отношению к ГУ ЦБ РФ по Орловской области. Когда пришли разбираться, оказалось, что этим объектом был мессадж бокс с аксесс виолэйшыном. Васина программа считала его из видеопамяти вместе с картинкой.
Оставить комментарий
Имя или ник:
Комментарий: