Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hook для программ эмулирующих нажатие кнопок мыши, Как отловить какая программа эмулирует 
:(
    Опции темы
Alexeis
Дата 13.7.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Номер потока узнаем при помощи GetCurrentThreadId
Фокус получается такой, ложная функция sendmessage будет выполнятся в контексте того приложения которое ее вызвало, а значит GetCurrentThreadId укажет виновника, остается передать это значение в свою програму любым методом, хоть при помощи буфера обмена! 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
RedHat
Дата 13.7.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 28.3.2006

Репутация: нет
Всего: нет



Цитата(alexeis1 @  13.7.2006,  12:51 Найти цитируемый пост)
 так понял, что речь идет в изменении кода оригинальной библиотеки ядра, с тем чтобы вазвавший функцию sendmessage, поток вызвал не оригинальную, а нашу. Мы смотрим, не отправили ли это сообщение нам, если так, то блокировать иначе вызвать настоящую sendmessage. 
Только если вдруг драйвер мыши шлет сообщения таким же образом, то ничего не выйдет

Добавлено @ 12:55 
Хотя поскольку dll работает в контексте приложения его вызвавшего, можно узнать номер потока и сравнить его с номером потока драйвера мыши или системного потока, который может за мышь отвечает.  


Вот именно как посмотреть сообщение нам предназначается или нет вот в этом загвостка!!
и по поводу блокировке если можна примерчик
 
PM MAIL   Вверх
Alexeis
Дата 13.7.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Цитата(RedHat @  13.7.2006,  14:23 Найти цитируемый пост)
Вот именно как посмотреть сообщение нам предназначается или нет вот в этом загвостка!!

Это как раз просто, мы же знаем заголовок нашего приложения, находим главное окно, дальше находим всех его детей, детей их детей и т.д. и сверяем handl - ы(можно ограничется поиском одного окна, того которое нам нужно), если handle окна назначения совпадает с hendl-ом одного из наших контролов, то ясно что нам отправляют.
Цитата(RedHat @  13.7.2006,  14:23 Найти цитируемый пост)
и по поводу блокировке если можна примерчик

тут и пример не нужен мы же после проверки (вдруг не нам!) должны переслать это сообщение правельному адресату, соответствено если адресат оказалсянашим окном, то мы этого не делаем
Код

if not(наше окно)
then
  правим адрес входа и шлем куда надо
else
  не отправляем!(ничего не делаем)

 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
RedHat
Дата 13.7.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 28.3.2006

Репутация: нет
Всего: нет



Цитата(alexeis1 @  13.7.2006,  14:44 Найти цитируемый пост)
Это как раз просто, мы же знаем заголовок нашего приложения, находим главное окно, дальше находим всех его детей, детей их детей и т.д. и сверяем handl - ы(можно ограничется поиском одного окна, того которое нам нужно), если handle окна назначения совпадает с hendl-ом одного из наших контролов, то ясно что нам отправляют.


понятно, но смотри ми же делаем инъекцию dll в чужой процесс так как ми будем знать handl той программы которую нужно защищать то есть как передать параметр???
 
PM MAIL   Вверх
Alexeis
Дата 13.7.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Цитата(RedHat @  13.7.2006,  17:05 Найти цитируемый пост)
handl той программы которую нужно защищать то есть как передать параметр???

Ничего не тужно передавать его можно узнать используя функции
FindWindow
EnumWindows
EnumChildWindows 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 13.7.2006, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Я подумал, можно еще упростить решение даже не портя системные dll.
Просто поставить глобальный хук на сообщение WM_LBUTTONDOWN, и поскольку хук выполнится в контексте пославшего сообщение потока, то GetCurrentThreadId или подобные функции должены дать нам все что надо! Зная все параметры нашего окна, мы с легкостю его найдем. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
RedHat
Дата 14.7.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 28.3.2006

Репутация: нет
Всего: нет



Цитата(alexeis1 @  13.7.2006,  17:53 Найти цитируемый пост)
Ничего не тужно передавать его можно узнать используя функции
FindWindow


Код

function NEWSendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;

var
 Written : DWORD;

begin
if FindWindow(nil,'имя_программы')<>0 then
 h:= FindWindow(nil,'имя_программы');

//----------------Востанавливаем первые байты на родные
WriteProcessMemory(INVALID_HANDLE_VALUE, MbaAdr,@OldMba, SizeOf(OldCode), Written);
//-----------------------Code-----------------
if hWnd <> h then
 result:= SendMessage(hWnd,Msg,wParam,lParam)
else
  begin
   //---------------------вот тут встроить проверку на то кто посылает
   ??????????
     result:= SendMessage(hWnd,Msg,wParam,lParam);
  end;
//-----------------------End Code-------------
//----------------Востанавливаем первые байты на новые
WriteProcessMemory(INVALID_HANDLE_VALUE, MbaAdr,@JmpMba, SizeOf(far_jmp), Written);
end;


В программе есть горячие клавиши (стрелки) , выше приведёный код работает нормально но толко если блокировать все сообщения идущие по handl окна то блокируются и сами стрелки!!! 
вот вместо ????? вопросов надо вставить код который смотрит чужое приложение послало нажатие или нет если чужое то блокировать если нет то разрешить выполнение???? если кого не затруднит обяснить как это моно реализовать а то я зашёл в тупик  
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.