Caps hook что это за программа и нужна ли она

Caps hook что это за программа и нужна ли она

АНАЛИЗ

Пpимеp отобpазит диалоговое окно с тpемя edit control’ами, котоpые будут заполнены именем класса, хэндлом окна и адpесом пpоцедуpы окна, ассоцииpованное с окном под куpсоpом мыши. Есть две кнопки — Hook и Exit. Когда вы нажимаете кнопку Hook, пpогpамма пеpехватывает сообщения от мыши и текст на кнопке меняется на Unhook.

Когда вы двигаете куpсоp мыши над каким-либо окном, инфоpмация о нем отобpазится в окне пpогpаммы. Когда вы нажмете кнопку Unhook, пpогpамма убеpет установленный hook.

Основная пpогpамма использует диалоговое окно в качестве основного. Она опpеделяет специальное сообщение — WM_MOUSEHOOK, котоpая будет использоваться между основной пpогpаммой и DLL с хуком.

Когда основная пpогpамма получает это сообщение, wParam содеpжит хэндл окна, над котоpым находится куpсоp мыши. Конечно, это было сделано пpоизвольно. Я pешил слать хэндл в wParam, чтобы было пpоще. Вы можете выбpать дpугой метод взаимодействия между основной пpогpаммой и DLL с хуком.

SCRIPT HOOK V CRITICAL ERROR — РЕШЕНИЕ! 2 РАБОЧИХ СПОСОБА! ГТА 5 ВЫЛЕТАЕТ ОБНОВЛЕНИЕ

.if HookFlag==FALSE
invoke InstallHook,hDlg
.if eax!=NULL
mov HookFlag,TRUE
invoke SetDlgItemText,hDlg,IDC_HOOK,addr UnhookText

Пpогpамма пользуется флагом, HookFlag, чтобы отслеживать соостояние хука.

Он pавна FALSE, если хук не установлен, и TRUE, если установлен.

Когда пользователь нажимет кнопку hook, пpогpамма пpовеpяет, установлен ли уже хук. Если это так, она вызывает функцию InstallHook из DLL.

Заметьте, что мы пеpедаем хэндл основного диалогового окна в качестве паpаметpа функции, чтобы хук-DLL могла посылать сообщения WM_MOUSEHOOK веpному окну, то есть нашему.

Когда пpогpамма загpужена, DLL с хуком также загpужется. Фактически, DLL загpужаются сpазу после того, как пpогpамма оказывается в памяти. Входная функция DLL вызывается пpежде, чем будет исполнена пеpвая инстpукция основной пpогpаммы. Поэтому, когда основная пpогpамма запускается DLLи инициализиpуются. Мы помещаем следующий код во входную функцию хук-DLL:

.if reason==DLL_PROCESS_ATTACH
push hInst
pop hInstance

Данный код всего лишь сохpаняет хэндл пpоцесса DLL в глобальную пеpеменную, названную hInstance для использования внутpи функции InstallHook. Так как входная функция вызывается пpежде, чем будут вызваны дpугие функции в DLL, hInstance будет всегда веpен. Мы помещаем hInstance в секцию .data, поэтому это значение будет pазличаться от пpоцесса к пpоцессу.

Когда куpсоp мыши пpоходит над окном, хук-DLL мэппиpуется в пpоцес. Пpедставьте, что уже есть DLL, котоpая занимает пpедполагаемый загpузочный адpес хук-DLL. Значение hInstance будет обновлено. Когда пользователь нажмет кнопку Unhook, а потом Hook снова, будет вызвана функция SetWindowsHookEx.

Тем не менее, в этот pаз, она будет использовать новое значение hInstance, котоpое будет невеpным, потому что в данном пpоцессе загpузочный адpес DLL не измениться. Хук будет локальным, что нам не нужно.

Источник: wasm.in

Amazon для новичков обучение 2020 поиск товара расширения junglescout keepa FBAcalculator

Хуки — это просто

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

Но вот в чём беда — почему-то каждая статья о хуках буквально со второго абзаца начинает рассказывать о «таблице виртуальных функций», «архитектуре памяти» и предлагает к изучению огромные блоки ассемблерного кода. Известно, что каждая формула в тексте снижает количество читателей вдвое, а уж такие вещи — так и вовсе вчетверо. Поэтому нужна статья, которая расскажет о хуках просто. Под катом нет ассемблера, нет сложных терминов и буквально два десятка строк очень простого кода на С++. Если вы давно хотели изучить хуки, но не знали с чего начать — начните с этой статьи.

Реальная задача
Для лучшего понимания того, что мы делаем — поставим себе какую-нибудь реальную задачу. Давайте, например сделаем так, чтобы браузер Firefox при заходе на Хабр писал в своём заголовке «Привет, Хабр!» вместо того, что там пишется сейчас (а сейчас там пришется «*** / Хабрахабр — Mozilla Firefox», где *** — меняется в зависимости от раздела). Да, я знаю, что это можно сделать правкой исходников Firefox, браузерными плагинами, юзерскриптами и еще десятком способов. Но мы в учебных целях сделаем это хуками.

Совсем чуть-чуть теории
Когда Вы запускаете любое приложение — операционная система создаёт его процесс. Грубо говоря, exe-файл копируется в память, далее определяется какие именно библиотеки (dll-файлы) ему нужны для работы (эта информация записана в начале каждого exe-файла), эти библиотеки ищутся (в папке с программой и в системных папках) и загружаются в память процесса. Потом определяется, какие именно функции библиотек использует программа и где они находятся (в какой библиотеке и где именно в этой библиотеке). Строится табличка вида «функция SomeFunction1() — библиотека SomeLibrary1.dll — %адрес_функции_SomeFunction1()%». Когда программе понадобиться вызвать эту функцию — она найдет в своей памяти нужную библиотеку, отсчитает нужный адрес и передаст туда управление.

Читайте также:
Что за программа для диагностики двигателя

Суть хукинга — заставить программу поверить, что нужная ей функция находится в другом месте.

Делается это таким образом — мы пишем свою библиотеку SomeLibrary2.dll, в которой будет находится наша функция SomeFunction2(). Далее мы загружаем эту библиотеку в память чужого процесса (в ОС Windows есть специальная функция для этого) и изменяем ту самую табличку, о которой я писал чуть выше, так, чтобы теперь она содержала запись «функция SomeFunction1() — библиотека SomeLibrary2.dll — %адрес_нашей_функции_SomeFunction2()%».

Для того, чтобы понять, как вручную сделать всё описанное в этом абзаце, нужно знать весьма прилично всего — как устроена память в Windows, как вызываются функции, как им передаются аргументы и т.д. Это сложно. Ну на самом деле не очень, просто можно обойтись и без этого. Если вам это нужно — почитайте какую-нибудь продвинутую статью (а хоть бы из тех, что указаны в начале). Мы пойдем другим путем — используем готовую библиотеку Microsoft Detours, которая сделает всю грязную работу за нас.

Пару слов о Microsoft Detours

Проста в изучении и использовании

Весьма эффективна
Хорошая документация
Содержит много примеров в исходниках
Разработана Microsoft — неплохо «дружит» с ОС
Бесплатна для исследовательских целей и некоммерческих проектов

Не требует знания ассемблера

Стоит приличных денег для коммерческого использования или х64-архитектуры

В целом, я бы посоветовал начинать изучение хуков именно с Detours — если это будет всего лишь вашим разовым развлечением, то этого вполне хватит, у вас быстро всё получится и вам понравится. Если же хуки понадобятся в серьёзном проекте — вы легко переключитесь на бесплатные и открытые (но чуть более сложные) библиотеки типа mhook, купите Detours или напишете свой велосипед (для последних двух решений нужны весьма веские причины).
О том где взять и как собрать Detours я писал вот тут.

Понять, на какую функцию ставить хук.
Сделать свою библиотеку с функцией, которая будет заменять исходную и делать нужные нам вещи.
Установить хук (загрузить библиотеку в память нужного процесса и переставить указатель на нужную нам функцию).
PROFIT!

Куда ставить хук
MSDN весьма ясно намекает нам, что заголовок окна можно установить функцией SendMessage — при этом вторым параметром должно быть передано WM_SETTEXT, а последним — сам текст. Но тут могут быть нюансы:

Вместо SendMessage может использоваться PostMessage или что-то еще
SendMessage может быть вообще не функцией, а макросом, ссылающимся на другую функцию (в дальнейшем мы увидим, что так оно и есть)
Firefox, как некоторые кроссплатформенные приложения, может вообще не использовать функции Windows для рисования стандартных элементов окна, используя вместо этого какие-то собственные кросплатформенные элементы GUI (к счастью, это не так — но вдруг!)

Так что нужно всё хорошенько проверить. Нам поможет прекрасная бесплатная программа API Monitor. Она позволяет присоединиться к определенному процессу и подсмотреть, какие именно функции он вызывает и с какими параметрами. Вы, может быть, уже догадались — делает она это тоже с помощью хуков. Итак запускаем Firefox и API Monitor.

Первым делом в API Monitor нужно указать фильтр — какую именно группу функций мы хотим мониторить. Если выберем вообще всё — исследуемая программа будет работать очень медленно (а может даже зависнет), выберем слишком мало — упустим нужное. Поэтому тут придётся думать и выбрать лишь ту группу, где потенциально могут находится функции работы с элементами GUI Windows. Давайте выберем группы Graphics и Windows Application UI Development а в панели Running Processes дважды кликнем по нашему Firefox. Начиная с этого момента API Monitor в панели справа будет показывать вызовы всех API-функций и их параметры.

Переходим в Firefox, открываем Хабр, дожидаемся изменения заголовка на нужный и возвращаемся в Api Monitor чтобы остановить мониторинг. Скорее всего, вы будете удивлены количеством вызванных функций — их могут быть сотни тысяч буквально за несколько секунд мониторинга. А мы ведь еще и следим далеко не за всем. Да-да, это всё реально происходит внутри безобидного открытия всего одного сайта в браузере! А вы еще жалуетесь, что эта пара секунд — слишком долго.

Найти нужную нам функцию поможет поиск по вкладке с результатами мониторинга. Вбиваем в поиск «WM_SETTEXT» и убеждаемся, что действительно имеются вызовы функции SendMessageW с этим параметром — с высокой вероятностью это и есть установка заголовка окна. Обратите внимание на «W» в конце названия функции — оно означает, что используется её юникодная версия. Для установки хуков важно знать точное имя подменяемой функции и теперь мы его знаем.

Читайте также:
Car launcher что это за программа

Делаем свою библиотеку
1. Запускаем Visual Studio.
2. Создаём новый проект: File->New->Project. Тип Visual C++ -> Win32 -> Win32 Project. В диалоге создания проекта указываем тип «Dll».
3. Открываем файл dllmain.cpp и пишем туда вот такой код:

#include #include «C:Program FilesMicrosoft ResearchDetours Express 3.0srcdetours.h» LRESULT (WINAPI * TrueSendMessageW)(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) = SendMessageW; __declspec(dllexport) LRESULT WINAPI MySendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) < if (Msg == WM_SETTEXT wcsstr((LPCTSTR)lParam, L»/ Хабрахабр — Mozilla Firefox») != NULL) return TrueSendMessageW(hWnd, Msg, wParam, (LPARAM)L»Привет, Хабр!»); return TrueSendMessageW(hWnd, Msg, wParam, lParam); >BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved) < if (dwReason == DLL_PROCESS_ATTACH) < DetourRestoreAfterWith(); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach()TrueSendMessageW, MySendMessageW); DetourTransactionCommit(); >else if (dwReason == DLL_PROCESS_DETACH) < DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourDetach()TrueSendMessageW, MySendMessageW); DetourTransactionCommit(); >return TRUE; >

4. Открываем свойства проекта и на вкладке настроек линкера добавляем в поле Additional Dependencies значение «C:Program FilesMicrosoft ResearchDetours Express 3.0lib.X86detours.lib». Внимание, у вас путь может быть другой — смотря куда установили библиотеку Detours.

5. Компилируем проект: Build -> Build Solution. На выходе получаем длл-ку (пусть будет называться hooktest.dll)

Давайте разберем исходник. В начале мы подключаем заголовочные файлы Windows (чтобы пользоваться функцией SendMessageW) и Detours (чтобы иметь возможность ставитьснимать хуки).
В сложной на первый взгляд строке №3 мы всего лишь сохраняем реальный указатель на функцию SendMessageW в переменную TrueSendMessageW. Это нам понадобиться для двух целей:

Для вызова настоящей функции SendMessageW из нашей «подделки».
Для восстановления указателя на реальную функцию в момент, когда мы захотим снять хук.

Далее идет наша поддельная функция MySendMessageW. Она предельно проста. Если попалось сообщение WM_SETTEXT и в его тексте есть упоминание Хабра — заменяем его на своё. Иначе — работаем как прозрачный прокси. Обратите внимание на префикс __declspec(dllexport) — он нужен чтобы этой функцией смогли воспользоваться другие процессы.

Функция DllMain вызывается операционной системой в определенных случаях — например, в моменты аттачадетача библиотеки к процессу. Тут тоже всё просто. В момент аттача нам нужно установить хуки, в момент детача — снять. Библиотека Detour требует делать это транзакциями, и в этом есть смысл — представьте себе что будет, если сразу несколько желающих захотят поставить хуки в один процесс. Самое важное в этом коде это строка

DetourAttach()TrueSendMessageW, MySendMessageW);

Именно она заставляет процесс «поверить» что теперь вместо настоящей функции SendMessageW нужно вызывать нашу MySendMessageW. Ради этой строки всё и затевалось. Если кому интересно, однажды я писал аналог этой функции вручную. С учетом всех возможных комбинаций типов функций и архитектур это заняло у меня несколько недель.

Вы вот только что их сэкономили — поздравляю.

Microsoft Detours предлагает разные варианты установки хуков — мы воспользуемся самым простым. В комплекте примеров, которые идут с библиотекой, есть программа withdll.exe — она принимает в качестве параметров путь к приложению и библиотеку, которую нужно подгрузить в память этого приложения после его запуска. Запускаем всё это как-то вот так:

withdll.exe -d:hooktest.dll «C:Program FilesMozilla Firefoxfirefox.exe»

Успехов в изучении хуков.

Источник: www.safezone.cc

Как отключить Caps Lock индикатор. Всплывающее уведомление.

Если при нажатии Caps Lock игра у вас сворачивается или переходит в оконный режим игра — значит в этом виноват индикатор капслок на экране. Который появляется в правом нижнем углу экрана при каждом нажании Caps Lock или Num Lock.

Кроме Caps Lock и Num Lock в правом нижнем углу экрана над часами всплывает окошко и о включении/выключении Scroll Lock.

Всплывающее уведомление о включении Caps/Num Lock мешает не только в играх, а и во многих программах работающих в полноэкранном режиме и требующих нажатия этих клавиш.

Например в GTA 5 клавиша Caps Lock включает спецспособность. И при её нажатии игра переходит в оконный режим, что просто недопустимо! Можно конечно изменить назначение клавиш, но в той же GTA V почти все клавиши заняты и к тому же это не решит проблему глобально.

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

Часто бывает, что её название неизвестно или такой программы в автозагрузке нет. Особено часто так бывает в ноутбуках.

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

Как оказалось, уведомление Caps Lock выводится процессом BTTray.exe который можно отключить только в реестре.

Как зайти в реестр:

Пуск > Выполнить > вводим «regedit» и заходим в реестр:

Далее идем по пути:

HKEY_LOCAL_MACHINE > SOFTWARE > Widcomm > BTConfig > General > KeyIndication > изменяем значение «KeyIndication» вместо «1» ставим «0». Жмем ОК и закрываем редактор реестра.

Перезагружаем компьютер на радуемся отсутствию этого противного уведомления!

P.S. Благодаря нашим пользователям найдено ещё одно решение данной проблемы:

Читайте также:
Программа песочница тайланд что это

В пуске пишем msconfig, там выбираем автозагрузка, находим программу BTTray и убираем его с автозагрузки. Данное ПО запускается после установки беспроводных наушников и подобных устройств на Bluetooth.

Источник: xn—-8sb2aijhq.com

Caps hook что это за программа и нужна ли она

Чем вебхуки отличаются от API?

В типичных API для получения информации от сервера его необходимо постоянно опрашивать. В случае вебхуков сервер как бы говорит клиенту: «Теперь тебе не придется названивать. Я сам позвоню, когда появится что-то новое».

То есть с помощью вебхука клиент «подписывается» на получение оповещений в заранее определенных случаях. Такой подход удобнее и для провайдера информации, и для клиента. При этом вебхуки используют HTTP, то есть не требуется добавления какой-то дополнительной инфраструктуры.

Вебхук делает HTTP-запрос к вашему приложению (чаще всего POST-запрос в JSON-формате), а интерпретация запроса уже зависит от принимающей стороны. Вебхуки — это своеобразные «обратные API» – интерфейс взаимодействия с запросом должен быть построен на стороне клиента.

У большинства API необходимо вначале отправить запрос, за которым последует ответ системы. В случае вебхука вы заранее настраиваете, при каких событиях сервер отправляет данные. Рассмотрим на примере.

В случае API приложение сервера предоставляет приложению клиента адреса, которые может вызывать приложение на стороне клиента. Например, для доски сообщений запросы к API могут выглядеть следующим образом:

Попробуйте свои силы

Лучший способ понять технологию применения вебхуков — это попробовать ее в деле. Давайте поэтапно рассмотрим процесс настройки и получения вебхука на реальном примере.

Даже если у вас нет приложения и соответствующих URL, можно попробовать технологию вебхуков в деле. Для таких задач создан ресурс webhook.site. Он генерирует уникальную ссылку для проверки входящих POST-запросов.

Скопируем сгенерированную ссылку, и, оставив страницу открытой, передадим URL провайдеру вебхука. Например, настроим вышеупомянутый вебхук в GitHub. Для этого перейдем в каком-либо из своих репозиториев в раздел Settings/Webhooks и нажмем кнопку Add webhook.

Заполнение открывшейся формы является процессом настройки вебхука. В поле Payload URL вставим запасенную ссылку с webhook.site. В качестве Content type выберем application/json. Далее отметим события, при которых GitHub будет отправлять запрос, например, комментарий коммита.

В конце списка нажимаем кнопку активации вебхука. Оставляем в репозитории комментарий к коммиту, чтобы протестировать механизм.

При этом GitHub в соответствии с вебхуком сразу же отправит POST-запрос на нашу ссылку. Вернувшись на страницу webhook.site, увидим, что в списке запросов добавился новый. В панели справа мы можем видеть детали запроса, заголовки и сам JSON-объект (для удобства чтения выберите пункт Format JSON).

Изучив JSON, вы заметите, что GitHub отправляет исчерпывающую информацию даже для такой простой операции, как комментарий коммита. Для сравнения в новой вкладке браузера перейдите по той же тестовой ссылке для приема запросов. Вы увидите, какую информацию дает «пустой» GET-запрос.

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

Отладка вебхуков

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

  1. Инструмент RequestBin собирает запросы вебхуков и позволяет понять их назначение.
  2. Смоделировать запросы помогут cURL и Postman.
  3. Протестировать код на вашей машине можно на локальном сервере ngrok.
  4. Сервис httpresponder создаст точку сбора и реагирования на вебхуки.

Безопасность использования вебхуков

Если вебхуки доставляют данные в приложение по публичным URL, кто-то может перехватить эти ссылки и подменить ложными данными? Чтобы этого не случилось, вы должны предпринять ряд мер. То, с чего нужно начать – использовать протокол HTTPS. Вы можете пойти дальше и еще больше обезопасить соединение:

  • Добавить в URL токены, действующие как уникальные идентификаторы
  • Реализовать Basic Auth, что также широко поддерживается и легко сделать.
  • Два приведенных решения отлично работают для предотвращения большинства атак. Их недостаток заключается в отправке аутентификационного токена. Третий вариант заключается в том, чтобы поставщик данных подписывал каждый запрос, а затем проверял подпись. Так, GitHub подписывает запросы в заголовке HTTPHMAC-ключом, а Facebook – c помощью алгоритма SHA-1.

Важные замечания

При использовании вебхуков нужно помнить о нескольких важных деталях.

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

Если на стороне провайдера события происходят часто, такая нагрузка может закончиться падением приложения (как в результате DDoS-атаки). Убедитесь, что клиентское приложение способно обработать ожидаемый масштаб запросов.

Хотя технически вебхуки могут использоваться для передачи массивов данных, рекомендуется использовать их лишь как сигнал изменения состояния. Как только уведомление получено, нужно вызывать безопасный интерфейс API для получения настоящей нагрузки. Такое разделение позволяет повысить масштабируемость и надежность систем обработки данных.

Источник: proglib.io

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru