Свобода кода

блог программиста

Поиск по блогу

Средства контроля действий пользователя.

19 Сентябрь 2010 . admin пишет -

Любая операционная система, включающая в себя интерфейс, представляет разработчику средства для отслеживания действий пользователя.
Суть пользовательского интерфейса Windows составляют элементы управления. Любые действия пользователя вынуждают Windows отправить приложению сообщение о том, что произошло в системе. Таким образом, если мы хотим узнать, с каким именно элементом управления взаимодействует пользователь, мы должны перехватить это сообщение. Перехват сообщений осуществляется с помощью хуков.
В операционной системе Microsoft® Windows™ хуком называется механизм перехвата особой функцией событий (таких как сообщения, ввод с мыши или клавиатуры) до того, как они дойдут до приложения. (далее…)

Рубрики: Механизм ловушек (hooks)

Разделяемый сегмент данных.

12 Март 2010 . Alex пишет -

Основным требованием теперь является получение HWND этого окна. К счастью, это несложно.
Первое, что вы должны сделать - это создать разделяемый сегмент данных. Это делается при помощи объявления #pragma data_seg. Выберите какое-либо хорошее мнемоническое имя для сегмента данных (оно должно быть не длиннее 8 символов). Просто чтобы подчеркнуть произвольность имени, я использовал здесь свое собственное имя. Часто обнаруживается, что если использовать имена вида .SHARE или .SHR, или .SHRDATA, то многие полагают, что имя имеет значение. А оно не имеет значения.
(далее…)

Рубрики: Механизм ловушек (hooks)

Адресное пространство. Решение проблемы.

12 Март 2010 . Alex пишет -

Одинаковый адрес о котором мы говорили в прошлой публикации - это совпадение. Это совпадение абсолютно и однозначно не гарантируется. Посмотрите на Процесс B. Когда событие перехвачено в Процессе B, в него отображается DLL. Но адреса, занимаемые ею в Вашем Процессе и Процессе A, не доступны в адресном пространстве Процесса B. Поэтому происходит перемещение кода на другой адрес в Процессе B. Код в порядке; ему действительно безразлично по какому адресу он исполняется. Адреса данных подправлены так, чтобы ссылаться на новое положение данных, и даже разделяемые данные отображены в другое множество адресов, таким образом к ним обращаются по-другому. Если бы вы использовали отладчик с Процессом B и посмотрели бы на адрес &something в разделяемой области, вы бы обнаружили, что адрес something был бы другим, но содержимое something было бы тем же самым; выполнение изменения содержимого в Вашем Процессе или в Процессе A немедленно сделало бы это изменение видимым в Процессе B, хотя Процесс B и видит его по другому адресу. Это то же самое место физической памяти. Виртуальная память - это отображение между адресами, видимыми вами, как программистом, и физическими страницами памяти, которые в действительности содержит ваш компьютер.  (далее…)

Рубрики: Механизм ловушек (hooks)

Глобальные хуки и адресное пространство.

12 Март 2010 . Alex пишет -

Существует большая неразбериха по поводу установки и использования глобальных хуков.
Заметим, что ни одна из описанных ниже проблем не возникает, если вы просто отлавливаете операции в своем собственном процессе. Они возникают только в том случае, когда вы хотите получать события на системном уровне.
Основной проблемой здесь является адресное пространство. Когда глобальная DLL исполняется, она исполняется в контексте того процесса, чье событие перехватывается. Это означает, что адреса, которые видит DLL, даже для своих собственных переменных, являются адресами в контексте целевого процесса. Поскольку это DLL, она имеет отдельную копию своих данных для каждого использующего ее процесса. И это означает, что любые значения, которые вы устанавливаете в глобальных для DLL переменных (таких, как объявленные на уровне файла), являются приватными и не будут наследовать ничего из исходного контекста библиотеки. Они будут инициализироваться заново, т.е., обычно, они будут равны нулю. (далее…)

Рубрики: Механизм ловушек (hooks)

Хуки WH_MSGFILTER, WH_SHELL и WH_SYSMSGFILTER.

7 Март 2010 . Alex пишет -

WH_MSGFILTER
Windows вызывает этот хук, когда диалоговое окно, информационное окно, полоса прокрутки или меню получают сообщение, либо когда пользователь нажимает комбинацию клавиш ALT+TAB (или ALT+ESC) при активном приложении, установившем этот хук. Данный хук устанавливается для конкретного потока, поэтому его безопасно размещать как в самом приложении, так и в DLL. (далее…)

Рубрики: Механизм ловушек (hooks)

Регистрационные хуки. WH_KEYBOARD и WH_MOUSE.

7 Март 2010 . Alex пишет -

WH_KEYBOARD
Windows вызывает этот хук когда функции GetMessage или PeekMessage собираются вернуть сообщения WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP, WM_SYSKEYDOWN, или WM_CHAR. Когда хук установлен как локальный, эти сообщения должны поступать из входной очереди потока, к которому прикреплен хук. Фильтрующая функция получает виртуальный код клавиши и состояние клавиатуры на момент вызова клавиатурного хука. Фильтры имеют возможность отменить сообщение. (далее…)

Рубрики: Механизм ловушек (hooks)

Регистрационные хуки. WH_JOURNALPLAYBACK.

7 Март 2010 . Alex пишет -

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

Рубрики: Механизм ловушек (hooks)

Регистрационные хуки. WH_JOURNALRECORD.

7 Март 2010 . Alex пишет -

Регистрационные хуки (journal hooks) используются для записи и воспроизведения событий. Они могут устанавливаться только как системные, и, следовательно, должны использоваться как можно реже. Эти хуки воздействуют на все приложения Windows; хотя десктоп и не позволяет такого другим хукам, регистрационные хуки могут записывать и воспроизводить последовательности событий и от десктопа, и для десктопа. Другой побочный эффект регистрационных хуков в том, что все системные входные очереди проходят через один поток, который установил такой хук.
В Win32 предусмотрена специальная последовательность действий, с помощью которой пользователь может убрать регистрационный хук (например, в случае, если он завесил систему). Windows отключит записывающий или воспроизводящий регистрационный хук, когда пользователь нажмет CTRL+ESC, ALT+ESC, или CTRL+ALT+DEL. Windows оповестит приложение, установившее этот хук, посылкой ему сообщения WM_CANCELJOURNAL. (далее…)

Рубрики: Механизм ловушек (hooks)

Типы хуков. Часть 2.

6 Март 2010 . Alex пишет -

WH_DEBUG
Windows вызывает этот хук перед вызовом какой-либо фильтрующей функции. Фильтры не могут изменять значения, переданные этому хуку, но могут предотвратить вызов фильтрующей функции, возвратив ненулевое значение.
В wParam передается идентификатор вызываемого хука, например, WH_MOUSE. lParam содержит указатель на следующую структуру:
(далее…)

Рубрики: Механизм ловушек (hooks)

Хук WH_CBT. Хуковые коды. Часть 3.

6 Март 2010 . Alex пишет -

HCBT_KEYSKIPPED
Windows вызывает хук WH_CBT с этим кодом при удалении клавиатурного события из системной очереди, в случае, если установлен клавиатурный хук. Windows вызовет системный хук, когда из какой-либо входной очереди будет удалено событие от клавиатуры и в системе установлен либо глобальный, либо локальный клавиатурный хук. Данный код передается только в том случае, если к хуку WH_KEYBOARD прикреплена фильтрующая функция. (далее…)

Рубрики: Механизм ловушек (hooks)
стр 1 из 3123»