![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
Скажем получаем хендл FindWindow или подобными
на форму (или компонент) стандартный для VCL. Так вот, как получить точку входа на структуру данных для этого компонента или формы? -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
этот объект в чужом адресном пространстве! по моему это очень проблематично будет.
а зачем тебе это? может есть более простые способы -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
да чужой процесс, но не думаю что это сильно проблематично
а суть такова: попытка более ли менее полноценной работы с компонентом В VCL механизм хендлов он "наследуется" от винды, но при этом есть и свой механизм связывания стандартный для VCL где все наследуется от TApplication. То что я хочу подобно интерфейсам. Создать в своем приложении переменные и связывать их с переменными (объектами) стороннего приложения. Ну и нагородил, аж самому страшно. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
-------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Думаю это будет в тему.
|
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
Keeper89, это понятно
но суть то в вызове методов... вобщем пробую инжект в целевой процесс делать... но пока неуверен в результате -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
вобщем инжект рулит.
только компилить нужно под тойже версией IDE -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
drkot, неплохо было бы выложить результаты для всеобщего использования
|
|||
|
||||
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 70 Всего: 191 |
Для решений, сделанных через зад - да. Нормальный код подразумевает использование следующих принципов: 1. Любое published-свойство может быть получено универсально из "чужого" процесса по своему имени (типа Tag, Caption и т.п.) 2. Любое не-published свойство получается относительно известного-published свойства. 3. Любой метод можно вызывать из любой версии Delphi в "любую версию Delphi". Для этого нужно знать соглашение о вызове и правило приема\передачи строк. То, что предлагают сейчас для решения проблем инжекта\получения свойств - страшно на это глядеть. Рекомендую посмотреть, как у меня сделано получение значения свойств компонента TStringGrid в "чужом" процессе. |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
Решение отнють не уникально, родилось как компиляция найденного материала
Но именно такого подхота не встретил, наверно плохо искал
Как говорится вот вам TApplication в руки, иделайте что хотите все прекрасно пишется на ООП но для классов "чужого" приложения. Rrader, да инжект грубо, но работает да антивирь может ругаться (у меня и не пикнул) да и все прочее. Не спорю, Ваш пример прекрасен, уже повесил на стену. Но подмена событий насколько понимаю невозможна, работа с данными конечно виртуозна, но перенести ее на другие компоненты будет стольше трудно как и написать все заново. Идея у меня родилась давно, когда занимался написанием экспертов. т.к. эксперт получает примерно такой же доступ к среде как и инжект и может манипулировать всем чем нужно (интерфейсы не в счет). А учитывая что среда разработки и программы которые ею создаются имеют одинаковые модели, то и появилось желание проверить подход "экспертов". Это сообщение отредактировал(а) drkot - 24.12.2009, 17:18 -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 70 Всего: 191 |
drkot, я тоже делал подобные эксперты, но требование равенства версий создавало очень много проблем.
Возможна. Легальный способ - использование ловушек (или хуков) - это альтернатива прямому внедрению. Не нужно создавать поток. Дело в том, что обработчики событий, как правило, все находятся в секции published. А значит:
Так и будем писать, например, 'OnMouseMove'. Как правило, управление такими свойствами осуществляется геттерами/сеттерами-полями (по 64 бита). Для сравнения - есть еще геттеры/сеттеры-методы. Различие между группами - в RTTI маске-доступа. После получения адреса нужно заменить обработчик на наш собственный. Подход будет работать из любой версии Delphi в "любую" версию Delphi. При этом неважно, используется Unicode или нет. Это касается того кода, что я написал. |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
только адресное пространство не то, и опять же нужно внедрение кода нашего обработчика в чужой процесс. ну здесь не все так запущено, в принципе вцл не так часто менялась и если юзать "ретро" функции то влияние версий минимально. в остальном я согласен. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 70 Всего: 191 |
Неправильно меня поняли. При использовании хуков наша библиотека загружается в АП чужого процесса, поэтому никакого дополнительного инжекта не требуется. Это то же самое, что и эксперт IDE, но для любого Delphi-приложения. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |