Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2011, 21:02   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию хуки

Пишу прогу, которая как только любое окошко будет активировано, обработает активацию окно и выдаст MessageBox.
Непонятки начались с самого начала, с dll-ки
Код:
Microsoft Windows [Version 6.1.7600]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
C:\Users\Dimarik>cd c:/masm32/bin

c:\masm32\bin>ml /c /coff /Cp hook_dll.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: hook_dll.asm

c:\masm32\bin>link /section:.bss,S /dll /subsystem:windows /def:hook_dll.def /li
bpath:c:/masm32/lib hook_dll.obj
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

hook_dll.def : warning LNK4017: exports statement not supported for the target p
latform; ignored
hook_dll.def : warning LNK4017: exports statement not supported for the target p
latform; ignored
   Creating library hook_dll.lib and object hook_dll.exp

c:\masm32\bin>ml /c /coff /Cp hook_window.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: hook_window.asm

c:\masm32\bin>link /subsytem:windows hook_window.obj
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

LINK : warning LNK4044: unrecognized option "subsytem:windows"; ignored
Почему возникло вот это:
hook_dll.def : warning LNK4017: exports statement not supported for the target p
latform; ignored
hook_dll.def : warning LNK4017: exports statement not supported for the target p
latform; ignored

LINK : warning LNK4044: unrecognized option "subsytem:windows"; ignored

Последний раз редактировалось Dimarik; 15.07.2011 в 21:08.
Dimarik вне форума Ответить с цитированием
Старый 15.07.2011, 21:07   #2
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Скорее всего из-за WARRING-ов функция GetProcAdress выдаёт ошибку при выполнении.
ERROR_PROC_NOT_FOUND.
Если не трудно, объясните разницу между
ml /c /coff /Cp file.asm
ml /c /coff file.asm
ml /c file.asm
Dimarik вне форума Ответить с цитированием
Старый 15.07.2011, 22:23   #3
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Что мешает набрать "ml /?" ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 16.07.2011, 15:22   #4
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

С этим разобрался. Спасибо. Ошибка во время выполнения при вызове функции call [SetHookForWindow_Addr]
Скорее всего что-то не так в dll в этих строчках:
Код:
call GetCurrentThreadId
		invoke SetWindowsHookEx, WH_CBT, offset HookForWndProc, hi, EAX
но я пробовал эти строки заменить на
Код:
invoke SetWindowsHookEx, WH_CBT, offset HookForWndProc, hi, 0
результата это не дало. Вот полностью все файлы проекта
http://zalil.ru/31429071
Dimarik вне форума Ответить с цитированием
Старый 19.07.2011, 05:31   #5
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Цитата:
Скорее всего что-то не так в dll в этих строчках
Посмотри в отладчике что конкретно не так и где ошибка..
OllyDBG тебя спасет

на первый взгляд в исходнике кидается в глаза
Код:
SetHookForWindow proc
		call GetCurrentThreadId
		invoke SetWindowsHookEx, WH_CBT, offset HookForWndProc, hi, EAX
		invoke MessageBox, 0, offset mess_1, offset mess_1, 1
	SetHookForWindow endp
что некая
Код:
hi			HINSTANCE	0
изначально нулём инициализирована и больше ни-ни...
|{ot вне форума Ответить с цитированием
Старый 21.07.2011, 21:15   #6
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

хочется чтобы при появлении примерно вот такого окошечка автоматически была нажата кнопка "Да"
но почему-то хуки никакого результата не дают. Может я не правильно обрабатываю что-то? Вот полностью весь проект
Изображения
Тип файла: jpg 22505_37401877.jpg (36.3 Кб, 180 просмотров)
Вложения
Тип файла: zip хуки.zip (6.8 Кб, 11 просмотров)
Dimarik вне форума Ответить с цитированием
Старый 21.07.2011, 22:14   #7
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Выучи наконец команды ассемблера, хукарь!
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 21.07.2011, 23:40   #8
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Цитата:
Сообщение от yuran666666 Посмотреть сообщение
Выучи наконец команды ассемблера, хукарь!

Цитата:
но почему-то хуки никакого результата не дают
Ну так говорю же
Цитата:
HHOOK WINAPI SetWindowsHookEx(
__in int idHook,
__in HOOKPROC lpfn,
__in HINSTANCE hMod,
__in DWORD dwThreadId
);

hMod [in]

Type: HINSTANCE

A handle to the DLL containing the hook procedure pointed to by the lpfn parameter. The hMod parameter must be set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure is within the code associated with the current process.
Обрати внимание на параметр hMod в своем коде...

Код:
mov BH, nameOfWindow_1;загружаем регтстр nameOfWindow_1
		mov BL, nameOfWindow_2;загружаем регтстр nameOfWindow_2
;сравниваем полученную строку с иходной
		xor CH,CH;загружаем в ah 0
label_cycle_CMP: 
			mov AH, byte ptr BH
			mov AL, byte ptr BL
			cmp AH, AL;проверяем буквы
				jnz Label_CallNextHook____________
			inc BH;увеличиваем смещение исходной строки
			inc BL; увеличиваем смещение полученной строки
			inc CH;увеличиваем счётчик
			cmp CH, 37
				jnz label_cycle_CMP;если строки не совпадают, передаём управление следующему хуку
Стрёмны код какой-то.. Уверен что он строки сравнивает??

Использовал бы уже
Цитата:
int WINAPI lstrcmp(
__in LPCTSTR lpString1,
__in LPCTSTR lpString2
);
А вообще отладчиком когда-либо пользовался??

Если так не можешь, то сделай тупой перебор окон в системе (или на переднем плане которые) по таймеру и жми "ОК" у которых заголовок соответствующий. Коряво конечно, но что делать то...
|{ot вне форума Ответить с цитированием
Старый 25.07.2011, 20:34   #9
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Задачу малость упростил. Нужно чтобы как только выплывет какое-нибудь окошко и на нём будет присутствовать кнопка "Сохранить", происходил автоматический клик по этой кнопке. Посмотрел я в отладчике прогу. Причем внимательно. При трассировке я обнаружил:
вероятно имеется проблема вот здесь
Код:
HHOOK WINAPI SetWindowsHookEx(
__in int idHook,
__in HOOKPROC lpfn,
__in HINSTANCE hMod,
__in DWORD dwThreadId
);
потому что не происходит передача управления __in HOOKPROC lpfn.
Ну а во-вторых, был создан цикл обработки сообщений, в котором по сути не срабатывает условие цикла и тело цикла выполняется только 1 раз. Цикл обработки сообщений был сделан для того, чтобы программа сразу же не вылетала, а продолжала висеть в памяти.
Код:
label_cycle:
		invoke GetMessage, offset message, 0, 0, 0
		pop EAX
		invoke TranslateMessage, offset message
		invoke DispatchMessage, offset message
		push EAX
		cmp EAX, 0
			jnz label_cycle
Вложения
Тип файла: zip хуки.zip (406.6 Кб, 10 просмотров)
Dimarik вне форума Ответить с цитированием
Старый 26.07.2011, 14:20   #10
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
Лампочка

Цитата:
вероятно имеется проблема вот здесь
Урааа!))

С твоем проекте в принципе все неправильно.. С теорией не оч наверное??

Тебе нужно:
1. Приложение (ехе) которое установит хук, тоесть что то такое:
Код:
start:
invoke LoadLibrary, $CTA0("hook.dll")
    or eax,eax ;проверяю на ошибки
    jz lerror
    ;все ок, сохраняю хэндл ДЛЛ в ebx
    xchg ebx,eax

invoke GetProcAddress,ebx,$CTA0("CBTHookProc")
    or eax,eax ;проверяю на ошибки
    jz lerror
    ;получил адрес процедуры хука, в eax!

invoke SetWindowsHookEx,WH_CBT,eax,ebx,0
    or eax,eax
    jz lerror
    xcgh esi,eax ;все хорошо сохраняю хэндл хука, нужен только для снятия!

invoke MessageBox,0,$CTA0(".."),$CTA0("Нажми ОК для снятия хука"),MB_OK

invoke UnhookWindowsHookEx,esi
    or eax,eax
    jz lerror
    jmp lret ;все хорошо выхлжу

lerror:
    invoke MessageBox,0,$CTA0(".."),$CTA0("Где то ошибка"),MB_OK

lret:
    ret
Это приложение только устанавливает хук и все! Дальше система сама подгрузит во "все" процессы твою длл и при определенных событиях
Цитата:
An application-defined or library-defined callback function used with the SetWindowsHookEx function. The system calls this function before activating, creating, destroying, minimizing, maximizing, moving, or sizing a window; before completing a system command; before removing a mouse or keyboard event from the system message queue; before setting the keyboard focus; or before synchronizing with the system message queue. A computer-based training (CBT) application uses this hook procedure to receive useful notifications from the system.
будет вызывать процедуру хука CBTHookProc

2. DLL:
Код:
DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
;если хочешь, то тут делай что хочешь..
	xor eax,eax
	inc eax
ret
DllEntry Endp

CBTHookProc PROC nCode:DWORD,wParam:DWORD,lParam:DWORD
	
;тут код обработки при наступлении сообытий
	
lret:
	invoke CallNextHookEx,0,nCode,wParam,lParam
	ret
CBTHookProc endp
В CBTHookProc уже фильтруй событие, ищи кнопки, нажимай и т.д.
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
|{ot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сетевые функции, хуки Igoressicus Помощь студентам 1 05.11.2010 14:03
Хуки в Windows JeyKip Win Api 11 09.05.2010 00:33
Программа, использующая хуки anGeee Win Api 1 11.12.2009 20:59
ListView и хуки 7KByte Win Api 0 10.07.2009 22:21
Глобальные хуки Zeraim Win Api 2 24.05.2008 16:00