![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выгрузка WinApi перехватчика [D7, WinXP]
KygECHuK © (2008-08-26 10:33:00)
Страницы: < 1 2 3 4 5 6 7 8 9 >
занимаюсь автоматизированным тестированием, оформил плагин для перехвата отрисовки текста. он подменяет адресса к функциям в таблице импорта, в моём случае это textOut в GDI32.dll. Всё работает хорошо, вот только что при выгрузке перхватчика с некоторойй вероятностью появлятся ошибка доступа к памяти...
Возможно кто нибудь занимался подомной проблематикой и может что нибудь посоветовать...
KygECHuK (2008-08-27 16:45:00) [121]
> "Выгрузка перехватчика" в какой момент и при каких условиях
> у тебя осуществляется ?
Когда партия прикажет, т. е. влюбой момент времени когда понадобиться
Без каких либо условий...
Вызывается поток CreateRemoteThread котоый заставляет выгрузится библиотеку. на что она реагирует обратной заменой всех адрессов и выгружается.
> Давай уже иллюстрируй фрагментами реального кода, имеющего
> непосредственное отношение к делу, если не можешь изъясняться
> терминологически правильно)
Ну да? нет у меня специального образования....
Сейчас фрагмент предоставить не могу - уже дома, поэтому завтра.
Да и кокнретный участок кода выявить не могу в дебаге все проходит идеально.
Сергей М. (2008-08-27 16:26:00) [122]
> Нет это перехват сообщений
Причем здесь он ?
Я прекрасно понимаю, что он тебе нафих не нужен.
> подмены адресов функций IAT
И это прекрасно понимаю, повторяться про это нет повода.
"Выгрузка перехватчика" в какой момент и при каких условиях у тебя осуществляется ?
Давай уже иллюстрируй фрагментами реального кода, имеющего непосредственное отношение к делу, если не можешь изъясняться терминологически правильно)
KygECHuK (2008-08-27 16:18:00) [123]
> Т.е. ты вызываешь UnhookWindowsHookEx и в этот же момент
> получаешь AV ?
Нет это перехват сообщений. у мну реализован перехват на уровне подмены адресов функций IAT
Сергей М. (2008-08-27 16:04:00) [124]
> но.. ошибка..
Т.е. ты вызываешь UnhookWindowsHookEx и в этот же момент получаешь AV ?
А по какому адресу ?
KygECHuK (2008-08-27 15:57:00) [125]
> Тебя ж про какие-то плагины понесло, которые, оказывается,
> к делу отношения не имеют)Да и метод установки хука для
> решения задачи "насильственного" внедрения вовсе не единственный.
>
я плохо выражаю свои мысли, ибо сам в них путаюсь )
> Но раз не глобальный, то значит ты указывал конкретный целевой
> тред для ассоциации с хуком. В этом потоке твой хук-модуль
> и будет загружен в АП "жертвы", в этом же потоке будет вызываться
> указанная тобой при установке хук-функция.
Вот это я все зделал, но.. ошибка...
Сергей М. (2008-08-27 15:36:00) [126]
> вот только он не глобальный
А по барабану какой.
Но раз не глобальный, то значит ты указывал конкретный целевой тред для ассоциации с хуком. В этом потоке твой хук-модуль и будет загружен в АП "жертвы", в этом же потоке будет вызываться указанная тобой при установке хук-функция.
> думал это с самого начала понятно
С чего бы вдруг ?
Тебя ж про какие-то плагины понесло, которые, оказывается, к делу отношения не имеют)
Да и метод установки хука для решения задачи "насильственного" внедрения вовсе не единственный.
KygECHuK (2008-08-27 15:09:00) [127]Мне даже Rouse_ по теме отписывался...
KygECHuK (2008-08-27 15:08:00) [128]
> Картина правильно нарисована ?)
ну собственно говоря.. да.. вот только он не глобальный.
а я думал это с самого начала понятно?
Сергей М. (2008-08-27 14:36:00) [129]
> как исчо WinApi хукделают?
Наконец-то на 47-м (!!) посте прозвучало ключевоеслово во всей этой бодяге)
Т.е. слово "плагин" можно смело бросить фтопку, оно тут вообще ни с какого боку, как и ТестКомплит с АИС'ом, ибо речь, оказывается, идет просто о глобальном хуке как одном из методов внедрения своего кода в АП процесса-"жертвы".
Итак, ты сотворяешь в Делфи некую dll, которая, кроме всего прочего, реализует функциональность хук-модуля для его внедрения в АП процесса некоего дельфийского приложения, исходники которого недоступны, с целью перехвата вызовов в контексте потоков этого процесса неких API-функций, например, TextOut.
Картина правильно нарисована ?)
KygECHuK (2008-08-27 14:18:00) [130]
> Все чудесатее и чудесатее становится)
Конечно я ж хто?
> Каким образом твой плагин, будучи загруженный в АП ТестКомплита,
> умудряется перехватывать вызовы ф-ций в АП совсем другого
> процесса, т.е. процесса АИС ?
Ну да, всё так....
Совсем другого процесса.. А как исчо WinApi хук делают?
Сергей М. (2008-08-27 14:03:00) [131]
> я перехватываю вывод АИС в опредлённой области
Все чудесатее и чудесатее становится)
Каким образом твой плагин, будучи загруженный в АП ТестКомплита, умудряется перехватывать вызовы ф-ций в АП совсем другогопроцесса, т.е. процесса АИС ?
KygECHuK (2008-08-27 13:54:00) [132]Вот я перехватываю вывод АИС в опредлённой области
KygECHuK (2008-08-27 13:51:00) [133]Базе данных
KygECHuK (2008-08-27 13:49:00) [134]
> Т.е. задача твоего плагина - перехватить данные, выводимые
> ТестКомплитом в некие контролы с пом. ф-ции TextOut, поскольку
> получить эти данные у ТестКомплита каким-либо иным легальным
> способом якобы не представляется возможным ?
Ключевое слово сдесь "якобы" ?
Постойте... сечас соберусь.. знаю что не умею объяснять...
TestComplete основан на движке Java. Он прогоняет срипты в которых и содержиться сама логика теста. Он снабжен оч. большим арсеналом инструментария. Не хватет только функциональности моего плагина.
АИС это продукт разрабатываемый нашей компании уже 10 лет (хотя он мало с того времени изменился :) ). Она обладает стандартным набором:
Ввод данных предметной области, передача их между организациями, и формировании отчетности. Моя задача написать срипты которые отслеживали идентичность этих данных в любой из этих операций.
Поэтому следует учесть всевозможные способы вывода информации для сравнения её с ранее введённой. одним из таких спообов вывода и является интерфейс.
Так, в любой момент времени мне могут понадобиться данны из интерфейса вводились они ранее имелись ли они в
Сергей М. (2008-08-27 12:58:00) [135]Т.е. задача твоего плагина - перехватить данные, выводимые ТестКомплитом в некие контролы с пом. ф-ции TextOut, поскольку получить эти данные у ТестКомплита каким-либо иным легальнымспособом якобы не представляется возможным ?
KygECHuK (2008-08-27 12:38:00) [136]
> Дельфийское ? Без исходников ?
да без них самих Зовут TestComplete "внутренний" в смысле не для клиентов
Сергей М. (2008-08-27 12:14:00) [137]
> тестор чисто внутренний проект
Дельфийское ? Без исходников ?
KygECHuK (2008-08-27 11:47:00) [138]
> Так а зачем же нужно перехватывать TextOut в процессе системы
> тестирования ? Не понимаю ..
Приходится его немного "сломать" не сисетму же распознования писать?
Ведь данные предоставляемые АИС во время тестирования влияют на его ход.
> Я так понял, что интерфейсе приложения АИС, а не интерфейсе
> приложения-тестера, которое грузит твой плагин ..
да именно, так, приложение - тестор чисто внутренний проект
Интерфейсное приложение - красиво звучит для этой АИС оно все вместе и в одном исполняемом файле.... весит до 60 mb.
Сергей М. (2008-08-27 11:35:00) [139]
> для системы тестирования АИС черный ящик
Так а зачем же нужно перехватывать TextOut в процессе системы тестирования? Не понимаю ..
> жалоб и замечаний именно на отображении данных в интерфейсе
Я так понял, что интерфейсе приложения АИС, а не интерфейсе приложения-тестера, которое грузит твой плагин ..
KygECHuK (2008-08-27 11:21:00) [140]
> А как связан процесс этой системы тестирования с процессом
> АИС ?
Опосредованно - симулирует сообщения от лица пользователя. т. е. для системы тестирования АИС черный ящик... с одной стороны очень сложно симулировать пользователя, а с другой можно находить концептуальные ошибки и создовать наиболее ёмкие тесты.