• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Как воспрепятствовать закрытию окна другого приложения?

  • Автор темы WishMaster
  • Дата начала
Статус
Закрыто для дальнейших ответов.
W

WishMaster

Скажем, у меня открыт стандартный Notepad и я хочу воспрепятствовать его закрытию пользователем. Первая идея – это пробовать отлавливать сообщения, посылаемые окну Блокнота и если это WM_CLOSE, то не пересылать их дальше. Вот код (Блокнот должен был блокироваться при нажатии на кнопку ButtonLock):

WNDPROC OldWindowProc;
HWND NotepadHandle;

LRESULT CALLBACK NewWindowProc(HWND hWnd, UINT msg, WPARAM w, LPARAM l)
{
if (msg == 0x0010) {MessageBox(NULL, "Нельзя закрывать!", "", MB_OK); return(0);}
else return CallWindowProc((FARPROC)OldWindowProc, hWnd, msg, w, l);
}

void __fastcall TForm1::ButtonLockClick(TObject *Sender)
{
NotepadHandle = FindWindow(NULL, "Безымянный - Блокнот");
OldWindowProc = (WNDPROC)SetWindowLong(NotepadHandle, GWL_WNDPROC, (long)NewWindowProc);
RaiseLastWin32Error();
}

Функция SetWindowLong() выдает ошибку: “System Error. Code: 5. Отказано в доступе.” Это запрещено с точки зрения безопасности? Потому как для окна моей программы этот код работает нормально (не дает ей закрыться). Как можно это обойти?

Как воспрепятствовать закрытию Блокнота? Блокировать кнопку закрытия окна не предлагать – в любой программе есть либо своя кнопка закрытия, либо меню Файл-Выход. Кроме того, я обратил также внимание на то, что событие WM_CLOSE вызывается не всегда. Например, при вызове функции Form->Close() оно почему-то не срабатывает. А обрабатывать WM_DESTROY уже позно – когда оно срабатывает окно уже пропадает с экрана (по крайней мере у меня так было).

Жду ваших размышлений ;)
 
S

Silver Wind

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

Попробуй решить этот вопрос используя глобальные ловушки. Примеров в инете полно, на этом форуме тоже вопрос не однократно поднимался.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!