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

Поиск:

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


Новичок



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

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



Вот тут на форуме много примеров как с эмулировать нажатие кнопок мыши или клавиатуры в другой программе. А как в своей программе можно организовать мехонизм противодействующий этому или хотя бы что бы он показывал процес который эмулирует эти сообщения???
  

Это сообщение отредактировал(а) RedHat - 11.7.2006, 09:42
PM MAIL   Вверх
BUGOR
Дата 11.7.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Это же очевидно - перехват соответствующих апи функций и обработка результата их выполнения. 


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
RedHat
Дата 11.7.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А пример моно или сылку где есть об этом инфа  smile  
PM MAIL   Вверх
Rouse_
Дата 11.7.2006, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



WH_DEBUG 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 12.7.2006, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



BUGOR, А разве можно в принципе отличить
SendMessage от реального нажатия?

Цитата(RedHat @  11.7.2006,  09:40 Найти цитируемый пост)
организовать мехонизм противодействующий этому
Можно, как вариант, использовать (где это возможно) неоконные компоненты, которые не могут ничего получать непосредственно сами. 


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

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

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


Опытный
**


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

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



Можно проследить откуда идёт сообщение 


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 12.7.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(BUGOR @  12.7.2006,  11:11 Найти цитируемый пост)
Можно проследить откуда идёт сообщение  

Как? 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alexeis
Дата 12.7.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(BUGOR @  12.7.2006,  12:11 Найти цитируемый пост)
Можно проследить откуда идёт сообщение 

Вот именно как? Я вчера 2 часа локальный хук на клавиатуру долбал smile так и не нашел как получить адрес отправителя... 


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

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

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


Опытный
**


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

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



Разберём метод под названием сплайсинг, на примере SendMessage, суть метода заключается в замене первых пяти байт вначале api функции(в нашем случае SendMessage) на длинный прыжок, который будет вести на функцию-обработчик(которая в свою очередь принимает все те же параметры, что и оригинальная SendMessage), функция обработчик находится в dll(в самом простом случае), а dll инжектится во все процессы(CreateRemoteThread или опять же с помощью хуков, это значения не имеет), так вот суть функции обработчика такова:
1.Заменить первые пять байт на оригинальные
2.Вызвать функцию с оригинальными параметрами
3.Обработать результат
4.Вернуть прыжок на себя вначало функции

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

 


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
RedHat
Дата 13.7.2006, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(BUGOR @ 12.7.2006,  14:56)
2.Вызвать функцию с оригинальными параметрами
3.Обработать результат
4.Вернуть прыжок на себя вначало функции

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

вот то что  я сделал для FindWindow. прошу не судить строго это моя первая подобного рода программа
Код

//----------------Замена стандартной API на свою
function NewFindWindow(lpClassName, lpWindowName: PChar): HWND; stdcall;

var
 Written : DWORD;
 tmp : PAnsiChar;

begin
//----------------Востанавливаем первые байты на родные
WriteProcessMemory(INVALID_HANDLE_VALUE, FiWAdr,@OldFiw, SizeOf(OldCode), Written);
tmp:=lpWindowName;

if tmp <> 'Название окна' then //Название окна 
 begin
 Result :=FindWindow(lpClassName,lpWindowName)
 end
else
 begin
 //Вот сюда то что нужно сделать
 //GetModuleFileNameStr(Hinstance); // dll name
//GetModuleFileNameStr(0); // exe name 
Showmessage(GetModuleFileNameStr(0)); // здесь ми выводим откуда была вызвана функция  для данного окна 
 //Изменяем функцию поиска окна  на всякий бред
 Result :=FindWindow(lpClassName,'E776B913-040E-4E9C-8BF9-02DE977727CC')
 end;
//----------------Востанавливаем первые байты на новые
WriteProcessMemory(INVALID_HANDLE_VALUE, FiWAdr,@JmpFiW, SizeOf(far_jmp), Written);
end;



Код

  hUser32 := GetModuleHandle('user32.dll');
  MbaAdr  := GetProcAddress(hUser32, 'FindWindowA');
  ReadProcessMemory(INVALID_HANDLE_VALUE, FiWAdr, @OldFiW, SizeOf(OldCode), Bytes);
  JmpMba.PuhsOp  := $68;
  JmpMba.PushArg := @NewFindWindow;
  JmpMba.RetOp   := $C3;
  WriteProcessMemory(INVALID_HANDLE_VALUE, FiWAdr, @JmpFiW, SizeOf(far_jmp), Bytes);


 
PM MAIL   Вверх
RedHat
Дата 13.7.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Существует программа AutoIt3
Не подскажите как можно боротся с такими программами на уровне своей программы то есть не позвалять ей нажимать в своей программе кнопки?????
AutoIt3 посылает нажатие кнопок в другую программу если не сложно преведите список API для посылки команд другому приложению  
PM MAIL   Вверх
Alexeis
Дата 13.7.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(RedHat @  13.7.2006,  12:12 Найти цитируемый пост)
если не сложно преведите список API для посылки команд другому приложению  

SendMessage
PostMessage

Добавлено @ 12:24 
Цитата(RedHat @  13.7.2006,  12:12 Найти цитируемый пост)
Не подскажите как можно боротся с такими программами на уровне своей программы то есть не позвалять ей нажимать в своей программе кнопки?????

А чем указанный выше метод BUGOR не устраивает?
 


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

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

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


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(alexeis1 @  13.7.2006,  11:21 Найти цитируемый пост)
А чем указанный выше метод BUGOR не устраивает?

а я его не понял smile 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alexeis
Дата 13.7.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



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

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

Это сообщение отредактировал(а) alexeis1 - 13.7.2006, 12:59


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

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

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


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



А как узнать 
Цитата(alexeis1 @  13.7.2006,  11:51 Найти цитируемый пост)
номер потока 

из перехваченой 
Цитата(alexeis1 @  13.7.2006,  11:51 Найти цитируемый пост)
sendmessage

?
Вот это я не понял? 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0581 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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