Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,631

И снова Hook

14.07.2022, 09:34. Показов 2296. Ответов 15

Студворк — интернет-сервис помощи студентам
Здравствуйте! Очередной вопрос по теме hook. Пример из книги Рихтера собирается, но не работает, код в архиве, прикрепил.
Он должен устанавливать hook на функцию MessageBox и при запуске какого-либо приложения, например, Notepad, и наборе в нём текста при попытке закрыть приложение выскочит сообщение с предложением сохранить данные(здесь и должна произойти подмена, насколько я понимаю), отвечаю нет, и вот тут, в запущенном приложении, должны появиться данные о процессе т.е. Notepad в данном случае. Короче говоря, видимо, ничего не перехватывается или работает приложение в целом не так. Что не так?

HOOK.rar
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.07.2022, 09:34
Ответы с готовыми решениями:

В чем преимущество trampoline hook над обычным hook?
Объясните пожалуйста в чем преимущество trampoline hook и hook? Никак не могу понять

Снова хром, снова сапопроизвольно открывается, снова bkrfdf.xyz и казино
Здравствуйте! Собственно, проблема уже не новая, хотя, как показывают сообщения форума, за последние дни выскочившая у многих. Через...

Как сделать чтобы таймер дойдя до 0 стартовал снова и снова?
Здравствуйте :) Как сделать чтобы таймер дойдя до 0 стартовал снова и снова? TimerSec = 59; TimerMin = 6; for(int i = TimerSec;...

15
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
15.07.2022, 14:28
Да много может быть причин; приложите готовый ваш проект , ну который собирается , ищет нотепад и т.д. Надо дебажить.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
15.07.2022, 14:47
Цитата Сообщение от Liss29 Посмотреть сообщение
какого-либо приложения, например, Notepad
особо не смотрел код, но судя по всему процесс ищется через дескриптор окна по его имени.
имя окна текстового редактора не notepad, а Безымянный - Блокнот
а если он сохранён или открыт уже существующий, то там ИМЯ_ФАЙЛА - Блокнот
ищи сразу процесс notepad.exe через CreateToolhelp32Snapshot и вешай хук, а этот ископаемый код в топку.
1
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
15.07.2022, 19:24
_lunar_, согласен, но не зная на каком этапе ошибка, тут можно много чего угадывать. Помнится, в нотепад начиная с какой-то винды был bound import , который хук Рихтера не берет. могу ошибаться, но было что-то такое.
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,631
16.07.2022, 07:09  [ТС]
Цитата Сообщение от Morgot Посмотреть сообщение
ищет нотепад
У него вроде бы конкретно про нотепад не говорилось он приводил его как пример, чтобы пример был более конкретизирован.
LastMsgBoxInfo.rar

Цитата Сообщение от Morgot Посмотреть сообщение
ну который собирается
Этот собирается, но работать не хочет как нужно.

Не по теме:

Цитата Сообщение от _lunar_ Посмотреть сообщение
этот ископаемый код в топку.
Покажи не ископаемый код.
Подскажи толковую книгу, по данной тематике(не на английском), где показано как программировать на winapi на современный лад. Буду признателен



Цитата Сообщение от _lunar_ Посмотреть сообщение
особо не смотрел код, но судя по всему процесс ищется через дескриптор окна по его имени.
Как-то не очевидно, где этот код увидел?

Я этот момент не могу понят, если я запустил приложение, в моём случае, LastMsgBoxInfo следом запустил, пусть тот же, Notepad, то как это должно происходить т.е. как "моё" приложение LastMsgBoxInfo должно сделать то, что должно делать изначально, то что задумал автор. Вот запустил я Notepad, набрал текст в новом окне, попытался это окно закрыть выскочило окно с сообщением об этом и предложением сохранить данные, я отказался, нажал НЕТ, и, насколько я понял, задумку автора, тут приложение LastMsgBoxInfo оживает и... что дальше:
Возможно, Hook-и устанавливаются на все функции MessageBox сразу после запуска LastMsgBoxInfo, и в случае запуска такой функции каким-либо приложением оно это приложение уже работает с инъекцированной функцией, а не с оригинальной MessageBox...

А может быть так:
если Notepad запущен, тогда что, LastMsgBoxInfo должен найти имя окна, получить его ID затем установить Hook?
если Notepad не запущен, тогда что, дескриптор окна нуль т.к. окна нет, а так как окно приложения Notepad отсутствует, то ID тоже нуль и на что в данном случае устанавливается Hook.
Короче говоря вопросов много...
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
16.07.2022, 15:24
Liss29, в том примере что ты скинул идет перехват в процессе Paint (по заголовку окна Untitled - Paint). Paint использует функцию TaskDialogIndirect (по крайней мере в Win7) для отображения сообщения о сохранении данных (Notepad кстати тоже). Также нужно учитывать разрядность приложений т.к. в текущей реализации не будет работать перехват из 32 битного приложения в 64 битном и наоборот.

Цитата Сообщение от Liss29 Посмотреть сообщение
Я этот момент не могу понят, если я запустил приложение, в моём случае, LastMsgBoxInfo следом запустил, пусть тот же, Notepad, то как это должно происходить т.е. как "моё" приложение LastMsgBoxInfo должно сделать то, что должно делать изначально, то что задумал автор.
Не будет так работать в текущей реализации. В коде у тебя перехватывается уже в существующем процессе, т.е. сначала запускается перехватываемое приложение, затем уже твой перехватчик.

Цитата Сообщение от Liss29 Посмотреть сообщение
Вот запустил я Notepad, набрал текст в новом окне, попытался это окно закрыть выскочило окно с сообщением об этом и предложением сохранить данные, я отказался, нажал НЕТ, и, насколько я понял, задумку автора, тут приложение LastMsgBoxInfo оживает и... что дальше:
Твой перехватчик внедряет DLL через SetWindowsHookEx. Эта DLL в свою очередь заменяет IAT-эелементы на адреса в перехватчике + функции LoadLibrary/GetProcAddress (и еще некоторые). Теперь у нас есть контроль над любыми загружаемыми DLL которые загружаются через перехваченные выше функции.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
16.07.2022, 16:13
Цитата Сообщение от Liss29 Посмотреть сообщение
Покажи не ископаемый код.
уже 100500 раз показывал.. поиск по форуму используй.

Цитата Сообщение от Liss29 Посмотреть сообщение
Подскажи толковую книгу, по данной тематике(не на английском)
таких нет.
да и вообще, какие ещё книги о хуках и взломах?, ещё и на русском
на крайняк Руссиновича почитай (Windows Internal), там несколько изданий под каждую винду, есть и на русском.
так хоть понимание придёт об устройстве ядра, а там глядишь и понимание по хукам и взлому подтянутся.
1
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
16.07.2022, 18:51
Liss29, нет по книгам ничего новее Рихтера. Точнее, есть Иосифович, но там тупо рерайт Рихтера с некоторыми новыми возможностями вин10 (и да, он на инглише). Дело не в книгах, матчасть не устаревает, на крайняк можно (и нужно!) учиться на винХР (общие понятия, типа отладки, инжектов и т.д.).
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,631
17.07.2022, 11:28  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Также нужно учитывать разрядность приложений т.к. в текущей реализации не будет работать перехват из 32 битного приложения в 64 битном и наоборот.
Собрал под Windows x64 всё заработало. Без разницы в какой последовательности запучкать приложение, я запускал приложение LastMsgBoxInfo, а затем тот же Notepad и всё срабатывает.

Цитата Сообщение от The trick Посмотреть сообщение
Твой перехватчик внедряет DLL через SetWindowsHookEx. Эта DLL в свою очередь заменяет IAT-эелементы на адреса в перехватчике + функции LoadLibrary/GetProcAddress (и еще некоторые). Теперь у нас есть контроль над любыми загружаемыми DLL которые загружаются через перехваченные выше функции.
Скажем так, понимание есть, но очень слабое, если не сказать больше. Запустилось приложение т.е. перед запуском основного потока выделяются память под данный процесс, под DLL тоже выделяется память и.т.д, короче говоря, в этот момент подтягивается моя DLL-ка. В этот момент я устанавливаю hook-и на функции MessageBoxA, MessageBoxW и на функции LoadLibraryA\W, LoadLibraryExA\W, GetProcAddress видимо так. Класс должен упростить понимание кода, но, в моём случае, как раз наоборот. Хотя может быть я поспешил с выводом. Но, если это так, то после этого любой вызов окна MessageBox в системе будет перехвачен, и будет вызвана "моя" функция.

Цитата Сообщение от Morgot Посмотреть сообщение
Дело не в книгах, матчасть не устаревает, на крайняк можно (и нужно!) учиться на винХР (общие понятия, типа отладки, инжектов и т.д.).
Есть у меня на виртуальной машине Windows XP и 7-ка есть, но, в принципе, и на 10-ке код Рихтера работает. Я ж не в претензии это мне тут предъявы кидают, что я пишу допотопный код, возможно, нужно писать как-то иначе, но за не имением лучшего пойдёт и так.

Цитата Сообщение от _lunar_ Посмотреть сообщение
уже 100500 раз показывал.. поиск по форуму используй.
Мне, когда?

Цитата Сообщение от _lunar_ Посмотреть сообщение
да и вообще, какие ещё книги о хуках и взломах?, ещё и на русском
А почему нет я пока что живу в России, говорю на русском и хочу читать литературу на родном языке, может заставите американцев читать на русском или, допустим, китайском, сомневаюсь. И к тому же, что бы читать на английском нужно его знать даже не хорошо, а великолепно, чтобы понимать все нюансы.

Цитата Сообщение от _lunar_ Посмотреть сообщение
на крайняк Руссиновича почитай (Windows Internal)
В дальнейших планах есть такое, если интерес окончательно не пропадёт.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
18.07.2022, 14:18
Цитата Сообщение от Liss29 Посмотреть сообщение
А почему нет я пока что живу в России
вот в этом и проблема.
в этой стране нет ничего и никого.
режим сделал страну отсталой от всего мира лет на 30-40, и догнать теперь просто невозможно.
так что ещё раз - какие ещё книги на русском?
нет ни одного человека, который способен написать книгу по современным системам и языкам 2022 года.
только английский, ну и гугл переводчик.
1
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
18.07.2022, 21:24
Основная беда в том, что и на английском (и на каком либо другом) новых книжек по WinApi нет и не будет..
Считайте, почти 20 лет прошло от последнего издания Рихтера, как появился Иосифович. А за это время никто не писал, и кроме него никого нет. Тема теряет популярность, люди пишут на шарпе или расте, а типа кому надо вникать во внутренности (вин32), так может и мсдн почитать + старые книги. Впрочем, это уже оффтоп.
0
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,631
19.07.2022, 10:17  [ТС]

Не по теме:

Цитата Сообщение от _lunar_ Посмотреть сообщение
нет ни одного человека, который способен написать книгу по современным системам и языкам 2022 года.
Ты способен написать или тоже деградировал?! Я здесь не про политику, если что.



Добавлено через 6 минут
Цитата Сообщение от Morgot Посмотреть сообщение
Тема теряет популярность, люди пишут на шарпе или расте
По такой же логике и ассемблер теряет популярность, но ведь специалисты есть, кто-то их готовит и нельзя сказать чтобы они были не востребованы. WinApi тоже низкоуровневое средство, как оно может терять актуальность. Как по мне, гнаться за новомодными языками программирования дело тухлое, хотя, возможно, я ошибаюсь.

Цитата Сообщение от Morgot Посмотреть сообщение
так может и мсдн почитать + старые книги.
Тут трудно поспорить, но, если с ходу туда нырнуть, даже зная английский, там чёрт ногу сломит в этом мсдн , даже настырный человек может очень быстро потерять интерес к этой теме.

Короче говоря по теме добавить нечего?
0
19.07.2022, 19:08

Не по теме:

Цитата Сообщение от Liss29 Посмотреть сообщение
WinApi тоже низкоуровневое средство, как оно может терять актуальность. Как по мне, гнаться за новомодными языками программирования дело тухлое, хотя, возможно, я ошибаюсь.
Да я согласен, но к сожалению, что есть то есть.. Люди привыкли писать на высокоуровневых , ибо там проще, и никто не желает вникать в лоу левел.

Цитата Сообщение от Liss29 Посмотреть сообщение
Короче говоря по теме добавить нечего?
Нет. Советую читать Рихтера и Побегайло, последний кстати наш, точнее беларус.

0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
19.07.2022, 20:59
Цитата Сообщение от Liss29 Посмотреть сообщение
Короче говоря по теме добавить нечего?
А что именно надо добавить?
Ты же написал:
Цитата Сообщение от Liss29 Посмотреть сообщение
Собрал под Windows x64 всё заработало.
0
20.07.2022, 10:26  [ТС]

Не по теме:

Цитата Сообщение от The trick Посмотреть сообщение
А что именно надо добавить?
То о чём спрашивал.



Не по теме:

Цитата Сообщение от Morgot Посмотреть сообщение
Нет. Советую читать Рихтера
Я его и читаю сейчас.

0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
20.07.2022, 13:14
Liss29, тебе ответил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.07.2022, 13:14
Помогаю со студенческими работами здесь

HP 625 снова и снова перезагружается в безопасный не заходит
Ребята помогите , проблема вот какая врубаю я ноут он доходит до заставки майкрософта и снова перезагружается в безопасный не заходит, ...

Здравствуйте, снова проблема и снова к вам.
Имеется данный код: var iX, iY, fov: Integer; HD: HWND; sDC: hDC; begin HD := FindWindow(nil,'123'); fov:=StrToInt(123.Text);...

Почему функция вызывается снова и снова?
При просмотре всех учетных записей ( последняя функция = prosmotr_ych_z()) она не останавливается, а постоянно выполняется одно и то же и...

И снова .htaccess и снова переезд
Казалось бы, столько написано. Ноне нашел ответа. Перезд с мультиязычного сайта на самостоятельный домен. То есть был ...

и снова .htaccess и снова rewriterule
Добрый день. Недавно столкнулся с проблемой преобразования URL, в связи с чем пришлось перерыть кучу материала по данной теме, но вопрос...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru