Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.25;
Скачать: CL | DM;

Вниз

Выгрузка 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 вся ветка

Текущий архив: 2009.10.25;
Скачать: CL | DM;

Наверх




Память: 0.65 MB
Время: 0.025 c
2-1251814973
Del
2009-09-01 18:22
2009.10.25
BDS 2006 hint


3-1228725725
amadey_motzart
2008-12-08 11:42
2009.10.25
ADOQuery


1-1219750806
_REA_
2008-08-26 15:40
2009.10.25
Word Preview


15-1250852265
partizan
2009-08-21 14:57
2009.10.25
Прочитать документ word


3-1201334641
mega
2008-01-26 11:04
2009.10.25
DirectMysqlObjects (TMySQLClient, TMysqlResult) + Jpeg