Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Вниз

Выгрузка WinApi перехватчика   Найти похожие ветки 

 
Сергей М. ©   (2008-08-27 12:14) [40]


> тестор чисто внутренний проект


Дельфийское ? Без исходников ?


 
KygECHuK ©   (2008-08-27 12:38) [41]


> Дельфийское ? Без исходников ?

да без них самих Зовут TestComplete "внутренний" в смысле не для клиентов


 
Сергей М. ©   (2008-08-27 12:58) [42]

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


 
KygECHuK ©   (2008-08-27 13:49) [43]


> Т.е. задача твоего плагина - перехватить данные, выводимые
> ТестКомплитом в некие контролы с пом. ф-ции TextOut, поскольку
> получить эти данные у ТестКомплита каким-либо иным легальным
> способом якобы не представляется возможным ?

Ключевое слово сдесь "якобы" ?

Постойте... сечас соберусь.. знаю что не умею объяснять...

TestComplete основан на движке Java. Он прогоняет срипты в которых и содержиться сама логика теста. Он снабжен оч. большим арсеналом инструментария. Не хватет только функциональности моего плагина.

АИС это  продукт разрабатываемый нашей компании уже 10 лет (хотя он мало с того времени изменился :) ). Она обладает стандартным набором:
Ввод данных предметной области, передача их между организациями, и формировании отчетности.  Моя задача написать срипты которые отслеживали идентичность этих данных в любой из этих операций.

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


 
KygECHuK ©   (2008-08-27 13:51) [44]

Базе данных


 
KygECHuK ©   (2008-08-27 13:54) [45]

Вот я перехватываю вывод АИС в опредлённой области


 
Сергей М. ©   (2008-08-27 14:03) [46]


> я перехватываю вывод АИС в опредлённой области


Все чудесатее и чудесатее становится)

Каким образом твой плагин, будучи загруженный в АП ТестКомплита, умудряется перехватывать вызовы ф-ций в АП совсем другого процесса, т.е. процесса АИС ?


 
KygECHuK ©   (2008-08-27 14:18) [47]


> Все чудесатее и чудесатее становится)


Конечно я ж хто?


> Каким образом твой плагин, будучи загруженный в АП ТестКомплита,
>  умудряется перехватывать вызовы ф-ций в АП совсем другого
> процесса, т.е. процесса АИС ?

Ну да, всё так....
Совсем другого процесса.. А как исчо WinApi хук делают?


 
Сергей М. ©   (2008-08-27 14:36) [48]


> как исчо WinApi хук делают?


Наконец-то на 47-м (!!) посте прозвучало ключевое слово во всей этой бодяге)

Т.е. слово "плагин" можно смело бросить фтопку, оно тут вообще ни с какого боку, как и ТестКомплит с АИС"ом, ибо речь, оказывается, идет просто о глобальном хуке как одном из методов внедрения своего кода в АП процесса-"жертвы".

Итак, ты сотворяешь в Делфи некую dll, которая, кроме всего прочего, реализует функциональность хук-модуля для его внедрения в АП процесса некоего дельфийского приложения, исходники которого недоступны, с целью перехвата вызовов в контексте потоков этого процесса неких API-функций, например, TextOut.

Картина правильно нарисована ?)


 
KygECHuK ©   (2008-08-27 15:08) [49]


> Картина правильно нарисована ?)

ну собственно говоря.. да.. вот только он не глобальный.

а я думал это с самого начала понятно?


 
KygECHuK ©   (2008-08-27 15:09) [50]

Мне даже Rouse_ по теме отписывался...


 
Сергей М. ©   (2008-08-27 15:36) [51]


> вот только он не глобальный


А по барабану какой.

Но раз не глобальный, то значит ты указывал конкретный целевой тред для ассоциации с хуком. В этом потоке твой хук-модуль и будет загружен в АП "жертвы", в этом же потоке будет вызываться указанная тобой при установке хук-функция.


> думал это с самого начала понятно


С чего бы вдруг ?

Тебя ж про какие-то плагины понесло, которые, оказывается, к делу отношения не имеют)
Да и метод установки хука для решения задачи "насильственного" внедрения вовсе не единственный.


 
KygECHuK ©   (2008-08-27 15:57) [52]


> Тебя ж про какие-то плагины понесло, которые, оказывается,
>  к делу отношения не имеют)Да и метод установки хука для
> решения задачи "насильственного" внедрения вовсе не единственный.
>


я плохо выражаю свои мысли, ибо сам в них путаюсь )


> Но раз не глобальный, то значит ты указывал конкретный целевой
> тред для ассоциации с хуком. В этом потоке твой хук-модуль
> и будет загружен в АП "жертвы", в этом же потоке будет вызываться
> указанная тобой при установке хук-функция.


Вот это я все зделал, но.. ошибка...


 
Сергей М. ©   (2008-08-27 16:04) [53]


> но.. ошибка..


Т.е. ты вызываешь UnhookWindowsHookEx и в этот же момент получаешь AV ?
А по какому адресу ?


 
KygECHuK ©   (2008-08-27 16:18) [54]


> Т.е. ты вызываешь UnhookWindowsHookEx и в этот же момент
> получаешь AV ?


Нет это перехват сообщений. у мну реализован перехват на уровне подмены адресов функций IAT


 
Сергей М. ©   (2008-08-27 16:26) [55]


> Нет это перехват сообщений


Причем здесь он ?

Я прекрасно понимаю, что он тебе нафих не нужен.


> подмены адресов функций IAT


И это прекрасно понимаю, повторяться про это нет повода.

"Выгрузка перехватчика" в какой момент и при каких условиях у тебя осуществляется ?

Давай уже иллюстрируй фрагментами реального кода, имеющего непосредственное отношение к делу, если не можешь изъясняться терминологически правильно)


 
KygECHuK ©   (2008-08-27 16:45) [56]


> "Выгрузка перехватчика" в какой момент и при каких условиях
> у тебя осуществляется ?


Когда партия прикажет, т. е. влюбой момент времени когда понадобиться
Без каких либо условий...

Вызывается поток CreateRemoteThread котоый заставляет выгрузится библиотеку. на что она реагирует обратной заменой всех адрессов и выгружается.


> Давай уже иллюстрируй фрагментами реального кода, имеющего
> непосредственное отношение к делу, если не можешь изъясняться
> терминологически правильно)


Ну да? нет у меня специального образования....
Сейчас фрагмент предоставить не могу - уже дома, поэтому завтра.
Да и кокнретный участок кода выявить не могу в дебаге все проходит идеально.


 
Сергей М. ©   (2008-08-27 16:52) [57]


> Вызывается поток CreateRemoteThread котоый заставляет выгрузится
> библиотеку


Не понял ..

Почему через сфинктер это тобой делается ?

Если ты влупил куда-то свой хук-модуль средствами SetWindowsHookEx, то почему не "вылупить" его штатно, т.е. средствами UnhookWindowsHookEx ?


 
KygECHuK ©   (2008-08-27 16:58) [58]


> Если ты влупил куда-то свой хук-модуль средствами SetWindowsHookEx,
>  то почему не "вылупить" его штатно, т.е. средствами UnhookWindowsHookEx
> ?

Потому что это свечка :))
я её так и всатвлял...


 
Сергей М. ©   (2008-08-27 17:00) [59]


> я её так и всатвлял


А причем здесь тогда хук ?


 
Сергей М. ©   (2008-08-27 17:04) [60]

Хук обычно "вставляют" так как прописал доктор БГ)

А доктор прописал вставлять через SetWindowsHookEx, а вынять, соотв-но, через UnhookWindowsHookEx.

Ты чего мудришь-то ? В реанимацию метишь ?)


 
KygECHuK ©   (2008-08-27 17:16) [61]


> А причем здесь тогда хук ?


hook - ловушка - те же яйца тока в профиль


> Ты чего мудришь-то ? В реанимацию метишь ?)


И не думал мутить - казалось так все делают.... :)


 
KygECHuK ©   (2008-08-27 17:19) [62]

Раз так, тогда завтра предоставлю код
и попробую "Засуспензить" родные потки при выгрузке


 
Сергей М. ©   (2008-08-27 17:29) [63]


> казалось так все делают


Перекрестись на всякслучай, если православный)

За каким лешим, спрашивается, извращаться со стартом удаленного потока, если заведомо известно, что "жертва" является GUI-приложением и внедрение своего кода в его АП достигается документированным и рекомендованным способом, т.е. установкой ловушки при помощи SetWindowsHookEx ?

Прокомментируй свою логику, если она вообще имеется, мне она пока не ясна ..


 
KygECHuK ©   (2008-08-27 17:40) [64]


> Прокомментируй свою логику, если она вообще имеется, мне
> она пока не ясна ..

ай ай ай... А ктооо.... А кто это сделал? Ммммммммм...

Меня что предадут анафине? Ну допустим не в курсе я был что  документированным и рекомендованным способом можно перехватывать определённые импортированиы функции. SetWindowsHook использовал только для перехвата сообщений окна и то это было давно и недавно, не думаю что моё решение столь опасно... и к тому же вроде работает.. ну почти.. :)


 
KygECHuK ©   (2008-08-27 17:41) [65]

*давно и не правда..


 
KygECHuK ©   (2008-08-27 17:54) [66]

Ну допустим я использую  SetWindowsHookEx,  тогда какими будут праметры для перехвата TextOut"а?


 
Сергей М. ©   (2008-08-27 19:28) [67]


> допустим я использую  SetWindowsHookEx,  тогда какими будут
> праметры для перехвата TextOut"а?
>


Какие еще нафих "параметры перехвата" ?
В огороде бузина, а в Киеве дядька)


> не в курсе я был что  документированным и рекомендованным
> способом можно перехватывать определённые импортированиы
> функции


Ты вообще слышишь что я говорю ?

Я пока говорю о методах внедрения кода в чужое АП, а не о каком-то там "перехвате".

До "перехвата" в нашем с тобой разговоре еще как до Китая ползком на карачках)


 
Сергей М. ©   (2008-08-27 19:32) [68]


> вроде работает.. ну почти.


А чем же ты тогда в этом топике озабочен ?)

Ну подумаешь - в основном работает, но маленько не работает - стоило ли волноваться ?) Нехай себе маленько глючит, глвное чтобы в целом немаленько неглючило)


 
KygECHuK ©   (2008-08-27 19:47) [69]


> Я пока говорю о методах внедрения кода в чужое АП, а не
> о каком-то там "перехвате".

Нет, постой паравоз, мне все равно интересно с каками параметрами должна вызваться SetWindowsHookEx, что бы переданная CallBack процедура срабатывала на вызов TextOut ? Вопрос вроде простой..


 
Сергей М. ©   (2008-08-27 19:55) [70]


> с каками параметрами должна вызваться SetWindowsHookEx,
> что бы переданная CallBack процедура срабатывала на вызов
> TextOut ?


Ни с какими.
В огороде бузина, а в Киеве дядька.

Мы пока еще говорим только о внедрении кода, а не о каких-то там колбэках и перехватах.

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


 
KygECHuK ©   (2008-08-27 20:16) [71]


> Почему ты для этой цели не пользуешь SetWindowsHookex ?

Как этот способ может мне помочь?
Вот листаю докуметнтацию:
"Функция SetWindowsHookEx устанавливает определяемую программой подключаемую процедуру в цепочку hook-точек."
Что общего может иметь цепочка hook-точек и вызов TextOut из какой то библиотеки хоть user32.dll функция DrawText


 
KygECHuK ©   (2008-08-27 20:17) [72]

*функцией DrawText


 
Сергей М. ©   (2008-08-27 20:46) [73]


> Что общего может иметь цепочка hook-точек и вызов TextOut
> из какой то библиотеки


Ничего общего.
Тебе оно и не надо.
Тебе надо получить управление при загрузке/выгрузке своего модуля в/из АП жертвы.
При получении управления при загрузке ты включаешь свой перехват, при получении управления при выгрузке ты выключаешь свой перехват.
Эту самую загрузку/выгрузку твоего модуля система выполнит самостоятельно,  с соблюдением канонов межпоточной синхронизации.


 
KygECHuK ©   (2008-08-27 21:41) [74]

А как справоцировать получение управления в таком случае? Как Заставить загружаться модуль? Я не в смысле что это не возможно... просто реально не знаю.


 
Сергей М. ©   (2008-08-28 08:18) [75]


> Как Заставить загружаться модуль?


Хук-модуль загрузит сама система при первом же возникновении того события,  которое ты укажешь в параметрах вызова SetWindowsHookex.


> как справоцировать получение управления


Обеспечить условия, при которых это событие гарантированно возникнет.
Например, "подписаться" на WH_GETMESSAGE и послать целевому окну WM_USER.
Как только целевая оконная ф-ция выберет любое сообщение из очереди, система немедленно загрузит твой хук-модуль, при этом отработает процедура инициализации, где ты волен выполнять модификацию IAT.


 
KygECHuK ©   (2008-08-28 09:38) [76]

Ну а выгрузка, получается, вызовом  UnhookWindowsHookEx ?

То есть, получатся, код библиотеки в при инциализации и финализации менять не надо?

И тело CallBack процедуры можно оставить пустым?


 
Сергей М. ©   (2008-08-28 10:18) [77]


> выгрузка, получается, вызовом  UnhookWindowsHookEx ?


Нет, она тоже не сразу произойдет, только при первом событии подписки.


> код библиотеки в при инциализации и финализации менять не
> надо?


Смотря что за код у тебя там.


> тело CallBack процедуры можно оставить пустым?


Пустым нельзя. Цепочку хуков оборвешь тем самым.
см. CallNextHookEx


 
KygECHuK ©   (2008-08-28 10:37) [78]


> Нет, она тоже не сразу произойдет, только при первом событии
> подписки.


Т.е.

ставим WindowsHookEx
посылаем событие подписки  
//библиотека загружена

снимаем UnhookWindowsHookEx
посылаем событие подписки  
// библиотека выгружена

я правильно понял?


 
Сергей М. ©   (2008-08-28 10:58) [79]


> я правильно понял?


Ну вроде того)
Только вот события не "посылают", они происходят или возникают.


 
KygECHuK ©   (2008-08-28 11:22) [80]


> Ну вроде того)Только вот события не "посылают", они происходят
> или возникают.


Ну вызываем событие...
Так или иначе СПАСИБО за терпение.
Надо опробывать ваш совет



Страницы: 1 2 3 4 5 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.64 MB
Время: 0.11 c
11-1207080348
Lotos
2008-04-02 00:05
2009.10.25
Splitter


2-1251749645
Alexey
2009-09-01 00:14
2009.10.25
Имя файла в TImage


8-1198524383
XeON
2007-12-24 22:26
2009.10.25
Вырезать часть картинки


2-1251462711
denis_lunev
2009-08-28 16:31
2009.10.25
Сохранение изменений свойств в EDIT


2-1251219105
stas
2009-08-25 20:51
2009.10.25
Установлен ли сервис





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский