Текущий архив: 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.63 MB
Время: 0.081 c