Ещё задумка

Модератор: Хакер

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Ещё задумка

Сообщение Хакер » 05.12.2010 (Вс) 1:58

Вот чего я люблю, так это делать с VB какие-нибудь вещи, которые мне легко, а вам интересно и радостно. Ну, там, написать на VB стабильный драйвер виртуального дискового тома, например ;)

Так вот, родилась очередная мысль: есть, допустим, у нас стороннее приложение, написанное на VB6.
Какая одна из частых просьб новичков в новичковом разделе? Хотят порулить элементами внутри окон чужого приложения в стиле VB, вроде следующего:
Код: Выделить всё
' Как получить текст из TextBox-а в чужом приложении?
' Хочу получить результат вычисления из калькулятора (calc.exe), но
MsgBox GetChuzhayaProga("calc.exe").Okno.tbResult.Text ' так не получается 0_0


Объясняешь им, что так нельзя, потому что элементы в чужих приложениях VB-контроллами не являются, но новичкам невдомёк. Они об окнах, классах, стилях и сообщениях не слышали, поэтому в их наивном сознании у любой видимой кнопки где-то в глубине есть свойства «Caption», «Visble» и так далее.

Так вот, объясняешь им, что элементы в чужих приложениях VB-контроллами не являются...

Стоп машина! :) В чужих VB-приложениях элементы как раз являются VB-контроллами.

И здесь проблема уже в другом: как из своего приложения получить ссылку на объект в другом приложении. Просто найти объект в чужой памяти и скопировать к себе адрес — не пройдёт, этот адрес в контексте нашего приложения будет просто недействительным, а попытка использовать такую ссылку на объект приведёт к краху нашего приложения.

А теперь сама идея:

Утилита, которая позволяет прицепиться (attach) к любому скомпилированному чужому (у нас нет ни исходных кодов, никаких знаний о нём) приложению, написанному на VB6 и:
  • Получить список его форм и созданных экземпляров форм
  • Получить список элементов на этих формах.
  • Посмотреть свойства этих экземляров форм и элементов, на них находящихся
  • Поменять какие-нибудь свойства :)
  • И вообще порулить формами и любыми объектами, которые из них можно выудить, используя встроенное в утилиту VBScript-основанное окно «Immidiate Pane» (как бонус: с плюшками вроде IntelliSense и подсказок).

Разумеется, утилита сможет подключиться к любому (ничего не подозревающему) VB-приложению, а не только к тому, в которое вы добавили специальный код, который бы передавал чужой утилите информацию о своих формах и их содержимом.

Ы?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Ещё задумка

Сообщение iGrok » 05.12.2010 (Вс) 2:07

Ыыы!
Рульная, кстати, штука бы получилась.
Универсальных управлялок окнами, в общем-то, есть. Например InqSoft Window Scanner.

А вот чтобы рулить не окнами, а объектами приложения, это уже круто. )
label:
cli
jmp label

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Ещё задумка

Сообщение Joo » 05.12.2010 (Вс) 6:26

В качестве спортивного интереса, идея привлекательна.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Ещё задумка

Сообщение Хакер » 06.12.2010 (Пн) 2:38

Что-то никто не комментирует больше. Никому не интересно что-ли?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Ещё задумка

Сообщение Debugger » 06.12.2010 (Пн) 14:44

Какая одна из частых просьб новичков в новичковом разделе?

Новичкам эта тема была бы интересна, но их тут нет.

Чтобы посмотреть, как такое делается - интересно. Серьезной практической пользы нет.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Ещё задумка

Сообщение Денис » 06.12.2010 (Пн) 14:48

Это через ActiveX делается?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Ещё задумка

Сообщение Хакер » 06.12.2010 (Пн) 14:56

Денис писал(а):Это через ActiveX делается?

В каком смысле?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Ещё задумка

Сообщение Денис » 06.12.2010 (Пн) 16:19

Хакер писал(а):В каком смысле?

В смысле, как планируется получать объекты? Через ActiveX?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Ещё задумка

Сообщение Хакер » 06.12.2010 (Пн) 16:46

Денис писал(а):В смысле, как планируется получать объекты? Через ActiveX?

Маршаллинг, моникеры. Получать — это пренебрежительно просто, по сравнению с «найти».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Ещё задумка

Сообщение Diamock » 06.12.2010 (Пн) 19:20

Очень интересно, особенно сам механизм работы программы.
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Ещё задумка

Сообщение Денис » 06.12.2010 (Пн) 22:44

Но ведь в VB6 для маршаллинга нет средств, ЕМНИП?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Ещё задумка

Сообщение Хакер » 06.12.2010 (Пн) 22:58

Ну, жди когда я напишу утилиту, посмотришь :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 231
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Ещё задумка

Сообщение hclubmk » 06.12.2010 (Пн) 23:06

Если "делать" или "не делать" зависит от количества голосов, то мой голос в пользу "делать". Не просто интересно.
Debugger писал(а):Серьезной практической пользы нет

практическая польза в том и состоит,
Debugger писал(а):Чтобы посмотреть, как такое делается
Научились ли Вы радоваться трудностям?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Ещё задумка

Сообщение Хакер » 07.12.2010 (Вт) 20:37

Кстати, можно сделать и так, чтобы сторонняя утилита получала доступ не только в экземплярам форм, но и вообще ко всем объектам VB-приложения(ий).

Это несколько более сложно, и акцент смещается от самой фишки с сторону техники.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Ещё задумка

Сообщение SLIM » 07.12.2010 (Вт) 21:38

Это уже интересней.
Было бы вообще здорово, если бы это была некая библиотека функций управления.
Это возможно?
Пишите жизнь на чистовик.....переписать не удастся.....

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Ещё задумка

Сообщение Денис » 10.12.2010 (Пт) 10:48

Хм, кстати, какой-то аналог RTTI получается, если я правильно понимаю.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Ещё задумка

Сообщение Хакер » 10.12.2010 (Пт) 14:51

Реализация IProvideClassInfo это и есть RTTI.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SergeyZuzic
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 20.03.2009 (Пт) 14:36

Re: Ещё задумка

Сообщение SergeyZuzic » 18.12.2010 (Сб) 21:40

Было бы интересно посмотреть, когда примерно планируется выход утилиты?

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Ещё задумка

Сообщение 1Steps » 19.12.2010 (Вс) 4:21

Ну, что-то похожее уже есть. Можно получить все классы и контролы. Правда сама не цепляется. :D
http://inqsoft-window-scanner.software.informer.com/
Удалена за ненадобностью.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Ещё задумка

Сообщение Хакер » 19.12.2010 (Вс) 7:26

Это совершенно не то. Ничего общего.

Эта утилита получает информацию о окнах (с точки зрения Windows) и их классах (Window-class), точно так же, как это делает Spy++ от MS или WndViewer нашего Twister-а.

Моя же получает ссылки на экземпляры форм, то есть ссылки на ООП-ные COM-объекты.

Если, например, у вас в приложении есть форма, в которой объявлен Public Sub, его можно будет вызвать прямо из моей утилиты. Если в форме есть Public-переменная/свойство со ссылкой на какой-нибудь просто ваш внутренний программный объект (не форму, а просто какой-то класс), его свойствами и методами тоже можно поуправлять (читать/писать значения свойств, вызывать методы).

Это как Immediate Pane в VB6 IDE, только применительно к уже скомпилированной VB6-программе.

Упомянутой тобою программе такое не снилось.

P.S. Единственная общая вещь: наличие фичи а-ля перетащите мышкой перекрестие на нужное окно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Ещё задумка

Сообщение BV » 19.12.2010 (Вс) 15:42

И много ли существует чужих VB-приложений?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Ещё задумка

Сообщение Хакер » 19.12.2010 (Вс) 15:48

Неужели не доходит, что цель не в серьёзном использовании утилиты, а в демонстрации реализации утилиты.

Ну и да, чужие VB-приложения таки есть: какие-нибудь криво-написанные старые или не очень корпоративные приложения, которые от своей кривонаписанности зависли, а отвесить их можно при помощи доступа к объектной модели форм. Или которые не предусматривают никаких экспортируемых (юридически) интерфейсов доступа со стороны, но с помощью которых нужно провести масштабную операцию импорта/экспорта данных.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Ещё задумка

Сообщение BV » 19.12.2010 (Вс) 16:44

Хакер писал(а):Неужели не доходит, что цель не в серьёзном использовании утилиты, а в демонстрации реализации утилиты.

Мне больше кажется, что цель мероприятия по созданию утилиты -- исключительно твой личный интерес, теоретический, не практический.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Ещё задумка

Сообщение Хакер » 19.12.2010 (Вс) 17:09

Тогда я бы её создал, не создавая топик и не интересуясь, хочет ли, так сказать, общественность посмотреть на исходники подобной утилиты. Ты не находишь? Столь высокоуровневое ООП-aware IPC, причём такое, что одна из сторон IPC для этого специально заранее никак не подготовлена, должно удивить очаровать по моему предположению.

У меня никакого интереса нет: с моникерами я вдоволь наигрался два года назад, когда никто на твоём гадком форуме не смог ответить на мой вопрос (ни на один, ни на второй). С внутренними недокументированными структурами VB — ещё раньше, при работе над FNDLL-1 и особенно FNDLL-2.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Da$aD
Новичок
Новичок
Аватара пользователя
 
Сообщения: 30
Зарегистрирован: 13.09.2009 (Вс) 22:01
Откуда: Протвино

Re: Ещё задумка

Сообщение Da$aD » 19.12.2010 (Вс) 23:53

Мне посмотреть на реализацию было бы интересно - никогда таким не занимался.
Все, что могу сказать :)

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Ещё задумка

Сообщение SLIM » 20.12.2010 (Пн) 0:57

Хакер писал(а):С внутренними недокументированными структурами VB — ещё раньше, при работе над FNDLL-1 и особенно FNDLL-2.

Судя по работоспособности обоих мы так и не увидим утилиту...
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Ещё задумка

Сообщение Хакер » 28.12.2010 (Вт) 3:31

Хех. В ходе написания утилиты пришлось написать анализатор кода.

Вы ему на вход: кусок своего кода (или не своего).
Он вам на выход два списка: все используемые в указанном фрагменте кода внешние сущности, все ссылки (в указанном фрагменте) на внешние сущности и информация о типе ссылки (прямая, косвенная).

Получается модуль с самостоятельной нужностью: например, вы можете написать функцию, которая использует кучу API и рантаймовых функций и внедрить её в чужой процесс. А анализатор скажет, какие места копируемого кода поправить. :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Мой блог

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

    TopList