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

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

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

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

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

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

Спасибо за название этой проги. Скачал, посмотрел как и что там называется.
Только почему-то имя класса кнопки Сохранить при первом всплытии окна с кнопками Сохранить, Не сохранять и Отмена не было показано. Имя класса было показано только во втором окне и как оказалось, это имя класса Button.
И самое интересное, при появлении первого окна ничего не нажимается, а при появлении второго окна под действием кривых хуков, Wodr начинает виснуть. Вывод один: в первом окне ничего не делается, а во втором окне что-то криво делается.
Код:
.686
.model flat, stdcall

option casemap :none; теперь MASM32 начнёт различать регистры
 
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\shell32.inc
include \masm32\include\user32.inc
;подключаем библиотеки
includelib \masm32\lib\kernel32.lib;здесь содержатся функции уравления памятью, приложениями, ресурсами, файлами и т.д.
includelib \masm32\lib\shell32.lib
includelib \masm32\lib\user32.lib

.data
dllHandle		DD			?;хэндл DLL
hWindowHook		HHOOK		0
HWnd_new_wind	HWND		?;хэндл обрабатываемого окна
nameOfWindow_2	DB			?;полученная строка.code
nameOfButton	DB			"&Сохранить",0
hWindButton		DB			?;хэндл кнопки "Да"
strButton		DB			"Button",0	

.code
hook_ proto : DWORD, : WPARAM, : LPARAM

DllEntry proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD

	mov  EAX,TRUE
	ret 12
	DllEntry Endp

	
	;обработка хуков
 hook_ proc nCode:DWORD, wParam:WPARAM, lParam:LPARAM
	cmp nCode,HCBT_CREATEWND
		jnz Exit
	call GetForegroundWindow;узнаём хэндл окна
	 mov HWnd_new_wind, EAX
	invoke GetWindowText, HWnd_new_wind, addr nameOfWindow_2, 15;узнаём название окна
	
	;переходим на кнопку "Сохранить"
		invoke FindWindow, offset strButton, offset nameOfButton
		cmp EAX,0;проверяем на ошибку
			jz	ExitProc
		;устанавливаем фокус
		invoke SetFocus, EAX
		invoke SendMessage, EAX, BM_CLICK, 0, 0
	
	Exit:
	 invoke CallNextHookEx, 0,nCode,wParam,lParam
		ExitProc:
		ret 12
	hook_ endp
end DllEntry
P.S. мышкой решил не делать нажатие, так как по-разному бывают окна расположены. Имитировать нажатие на кнопку вроде проще.
Изображения
Тип файла: jpg 1Безымянный.jpg (39.2 Кб, 148 просмотров)
Тип файла: jpg 2Безымянный.jpg (47.4 Кб, 138 просмотров)
Dimarik вне форума Ответить с цитированием
Старый 06.08.2011, 17:57   #22
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Только так и не понятно, как мне отладить через Olly эту функцию обработки хуков? И можно ли отладить её вообще? Потому что нажатие F2 на нужные строчки dll-rb (естественно, после LoadLibrary)не помогает. Строки выполняются, а остановки на них не происходит... Почему-то...
Dimarik вне форума Ответить с цитированием
Старый 06.08.2011, 18:28   #23
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

я даже вызвал аппаратную точку останова, нажав BreakPoint->Hardware, on execution. Никакого останова не произошло. Так как правильно выполнить отладку dll?
Dimarik вне форума Ответить с цитированием
Старый 06.08.2011, 19:02   #24
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
Лампочка

Цитата:
Сообщение от Dimarik Посмотреть сообщение
Только так и не понятно, как мне отладить через Olly эту функцию обработки хуков? И можно ли отладить её вообще? Потому что нажатие F2 на нужные строчки dll-rb (естественно, после LoadLibrary)не помогает. Строки выполняются, а остановки на них не происходит... Почему-то...
Потому что точку останова ты ставишь для для одной конкретной программы, тоесть только в контексте этого процесса.

Цитата:
P.S. мышкой решил не делать нажатие, так как по-разному бывают окна расположены. Имитировать нажатие на кнопку вроде проще.
Расположение окон на это никаким образом не сказывается! Это всего лишь посылка сообщений окну по хэндлу, координаты не нужны!

Как пожелаешь, я просто так
Код:
invoke SendMessage, EAX, BM_CLICK, 0, 0
никогда не пробовал клацнуть...

Ну я просто в а**е!!

сравни мой код с перед идущего поста и свой!!! Замечания не исправил!! но да ладно, последний раз по твоему коду:

Код:
hook_ proc nCode:DWORD, wParam:WPARAM, lParam:LPARAM
	cmp nCode,HCBT_CREATEWND
		jnz Exit
	call GetForegroundWindow;узнаём хэндл окна правильно
	 mov HWnd_new_wind, EAX

	invoke GetWindowText, HWnd_new_wind, addr nameOfWindow_2, 15
;узнаём название окна переменная nameOfWindow объявлена как ОДИН БАЙТ!! 
;а этого хватит что бы туда поместить строку??
; тем более, что последним параметром функции GetWindowText 
; ты указываешь размер буфера (этого самого nameOfWindow_2) как 15 байт ??? 
;+где проверка результата выполнения функции???
	
	;переходим на кнопку "Сохранить"
		invoke FindWindow, offset strButton, offset nameOfButton 
;этой функцией можешь найти только окно на "рабочем столе" 
;а тебе нужно найти КНОПКУ в ОКНЕ используй FindWindowEx
;+поскольку размер nameOfWindow_2 1 байт, то nameOfButton уже будет переписана функцией GetWindowText 
;(если она вообще выполнится без ошибок) и текста "&Сохранить" в ней уде не будет!

		cmp EAX,0;проверяем на ошибку
			jz	ExitProc
		;устанавливаем фокус
		invoke SetFocus, EAX
		invoke SendMessage, EAX, BM_CLICK, 0, 0
; этого кода не уверен что он нажмет кнопку хоя бы потому что invoke SetFocus, EAX -
;установит фокус, но вернет в EAX хэндл ПЕРЕД ИДУЩЕГО компонента, у которого был фокус!!! 
;на него то ты и пытаешся "надавить"
	
	Exit:
	 invoke CallNextHookEx, 0,nCode,wParam,lParam
		ExitProc: ;эта метка ненужна, твой выход с функции ВСЕГДА на метку Exit
		ret 12
	hook_ endp
Цитата:
Так как правильно выполнить отладку dll?
НУЖНО или/или
  • ollyDBG установленой в качестве отладчика по умолчанию в ОС
  • виртуальная машина, с отладчиком WinDbg

в ДЛЛ ставишь
Код:
int 3 ;программная точка останова ЭТО КОМАНДА ассемблера
как до нее дойдет, вывалится отладчик!

или же в своей программе имитируй такое же диалоговое окно "сохранить" и тренируйся на нем!

Последний раз редактировалось rpy3uH; 08.08.2011 в 10:13.
|{ot вне форума Ответить с цитированием
Старый 07.08.2011, 20:05   #25
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Спасибо. Нажимает "Да" во всех окнах кроме этого и ему подобных:

Можно ли на нём програмно нажать кнопочку "Да"?
Dimarik вне форума Ответить с цитированием
Старый 08.08.2011, 12:36   #26
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Нельзя, в целях безопасности это окно выводится на отдельном рабочем столе.

Можно отключить PromptOnSecureDesktop (по крайней мере в висте можно было), но не нужно.
пыщь

Последний раз редактировалось JTG; 08.08.2011 в 12:41.
JTG вне форума Ответить с цитированием
Старый 08.08.2011, 19:18   #27
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

спасибо большое
Dimarik вне форума Ответить с цитированием
Старый 09.08.2011, 09:50   #28
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

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

Разве окна нельзя искать на другом рабочем окне??
Выводить точно можно.
Кажется службы закреплены по умолчанию на системном рабочем столе.. из нее можно пробовать..
|{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