Получение текста с посторонней апликации(перехват API)
От: alexey_ma Израиль  
Дата: 20.07.04 11:43
Оценка:
Моя задача:
Написать программу, которая будет получать текст с посторонних апликации. Обычный метод GetWindowText не всегда работает т к есть апликации которые скрывают свои window handles (HWND) от системы. Например ActiveX — ы или программа откомпилированная в VB. Статик текст в этих программах рисуется TextOut (у него нету собственного HWND).
Я написал программу перехватчик для API functions которые рисуют текст на экране:
DrawTextA
DrawTextW
DrawTextExA
DrawTextExW
TextOutA
TextOutW
ExtTextOutW
ExtTextOutA
TabbedTextOutA
TabbedTextOutW

Этот метод работает не во всех случаях. Мне кажется что я перегрузил не все API functions. Скажите мне пожалуйста есть ли ещё API функции, которые выводят текст или символы на DC.
Re: Получение текста с посторонней апликации(перехват API)
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 20.07.04 15:13
Оценка:
Бывает еще PolyTextOut, причем простой поиск по MSDN ее выявляет

А еще есть GDI+. GdipDrawString, например: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/GDIPlus/GDIPlusreference/flattext.asp.

Ну и OpenGL c Direct3D.

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re: Получение текста с посторонней апликации(перехват API)
От: rus blood Россия  
Дата: 20.07.04 15:16
Оценка:
Здравствуйте, alexey_ma, Вы писали:

_>Моя задача:


А как твоя программа будет определять, какой именно текст надо взять?
Скажем, в том же случае со статиком на vb-программе ?
Имею скафандр — готов путешествовать!
Re[2]: Получение текста с посторонней апликации(перехват API
От: alexey_ma Израиль  
Дата: 21.07.04 06:05
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>А как твоя программа будет определять, какой именно текст надо взять?

RB>Скажем, в том же случае со статиком на vb-программе ?

Прямоугольная область относительно окна родителя.
В этом случае можно вызвать перерисовку прямоугольника и прехватить DrawText.
Re: Получение текста с посторонней апликации(перехват API)
От: Valerio Россия linkedin.com/in/boronin
Дата: 25.07.04 07:10
Оценка:
Здравствуйте, alexey_ma, Вы писали:

_>Я написал программу перехватчик для API functions которые рисуют текст на экране:

_>DrawTextA
_>DrawTextW
...
_>TabbedTextOutA
_>TabbedTextOutW
зачем кстати перехватывать A ф-ии если они в итоге все равно позовут W?

_>Этот метод работает не во всех случаях. Мне кажется что я перегрузил не все API functions. Скажите мне пожалуйста есть ли ещё API функции, которые выводят текст или символы на DC.

Конечно он не будет работать во всех т.к. это ненадежный путь по своей природе. не хочу обсуждать все минусы API hooking, здесь уже все сказано давно. Лично я стараюсь обходиться без таких вещей по возможности.

да и к примеру в новых версиях могут появиться новые GDI ф-ии — всего так вы не предусмотрите никогда.

Я бы пошел по пути mirror drivers и корректном перехвате GDI для NT платформ (NT4 потребует доп усилий, лучше ориентироваться на 2000+):

Суть проблемы у Вас в том, что сам движок GDI что-то может сделать в обход ваших перехватчиков, вызовы внутри ядра также не будут замечены (а их много — GDI оптимизирует несколько вызовов в 1 или наобоот что-то может разбить какой-то вызов в совершенно иные, которые Вами не перехватываются ибо вывод текста произойдет через вывод кэшированных глифов, т.е. картинками. Тут кстати новшества XP тем и прочие штучки дают интересные эффекты, мне говорили).

Если Вы спуститесь на уровень DDI (например почитав Feng Yang и DDK), то там написано, что весь вывод текста сведется к DrvTextOut в графическом драйвере (есть еще ф-я DrvGetGlyphMode которую в DDK относят к ф-м ответственным за вывод текста, но здесь это несущественно)

Вам следует перезватить ее в своем драйвере-фильтре GDI (mirror driver) и тогда все будет честно и ничто не пройдет мимо незамеченным. Конечно здесь речь идет о kernel development, Рихтер тут не понадобится.
... << Rsdn@Home 1.1.4 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[2]: Получение текста с посторонней апликации(перехват API
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 25.07.04 08:17
Оценка:
Погодь-погодь Движок GDI и правда много может насочинять, но без спросу он текст всяко выводить не станет, а попросить его можно только через апишки, так ведь?
Так что можно аккуратно проверять при запросе на вывод, пересекается ли выводимый текст с нужным прямоугольником, и если да — запоминать его. А потом можно как-то сшить это дело воедино (на случай, если вывод выполняется порционно). Опять же, если считать, что удалось перехвать все соответствующие апишки.

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[2]: Получение текста с посторонней апликации(перехват API
От: King of a Stellar War Украина  
Дата: 25.07.04 08:20
Оценка:
Здравствуйте, Valerio, Вы писали:


V>Я бы пошел по пути mirror drivers и корректном перехвате GDI для NT платформ (NT4 потребует доп усилий, лучше ориентироваться на 2000+):


А не подскажете, где можно подробно почитать про mirror drivers ?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: Получение текста с посторонней апликации(перехват API
От: Valerio Россия linkedin.com/in/boronin
Дата: 25.07.04 14:25
Оценка: 18 (1)
Здравствуйте, Slicer [Mirkwood], Вы писали:

SM>Погодь-погодь Движок GDI и правда много может насочинять, но без спросу он текст всяко выводить не станет, а попросить его можно только через апишки, так ведь?

Сам конечно сочинять не станет. В этом смысле перехватить все ф-ии можно действительно найти и перехватить и надеяться что из ядра никто не решит чего-то подрисовать (здесь я не уверен что никто не решит — в том-то и дело.) или наоборот GDI решит проигнорировать вызов! и что следующий сервис пак или winupdate не сломает чего-нибудь и т.п. свойственные API hooking методу проблемы. Зачем это надо когда есть легальные методы?

Думаю, о деталях внутренностей движка GDI применительно к тексту можно будет говорить поигравшись с DDIMon FengYang или написав свой или спросив кого-нибудь вроде sev, который специализируется на такого рода вещах не первый год.

Кстати вот ветка абсолютно с таким же вопросом
Автор: geng
Дата: 15.12.02


SM>Так что можно аккуратно проверять при запросе на вывод, пересекается ли выводимый текст с нужным прямоугольником, и если да — запоминать его. А потом можно как-то сшить это дело воедино (на случай, если вывод выполняется порционно). Опять же, если считать, что удалось перехвать все соответствующие апишки.


ИМХО вместо того чтобы строить догадки о внутренностях GDI, все же проще разобраться с mirror driver методом — для указанной задачи он получится весьма простой.
... << Rsdn@Home 1.1.4 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[3]: Получение текста с посторонней апликации(перехват API
От: Valerio Россия linkedin.com/in/boronin
Дата: 25.07.04 14:25
Оценка: 9 (1)
KOA>А не подскажете, где можно подробно почитать про mirror drivers ?
соотв раздел в DDK/MSDN:
Display and Print Devices: Windows DDK
Mirror Drivers

PS don't forget about online MSDN on msdn.microsoft.com and online DDK on osr.com
... << Rsdn@Home 1.1.4 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[4]: Получение текста с посторонней апликации(перехват API
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 25.07.04 14:37
Оценка:
Да ведь догадки о внутренностях здесь не причем. Отслеживать можно не то, что делает GDI, а то, что его просит сделать программа. Вот и вся идея. Хотя, согласен, API hooking — не лучшее решениев смысле перехвата абсолютно всех возможностей.

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[5]: Получение текста с посторонней апликации(перехват API
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 25.07.04 15:22
Оценка:
Здравствуйте, Slicer [Mirkwood], Вы писали:

SM>Да ведь догадки о внутренностях здесь не причем. Отслеживать можно не то, что делает GDI, а то, что его просит сделать программа. Вот и вся идея. Хотя, согласен, API hooking — не лучшее решениев смысле перехвата абсолютно всех возможностей.


Не опускаемся в бред Программа может попросить что-то сделать GDI только средствами вызова API GDI . В любом случае — все сводится к хукингу функций GDI. Либо я не понял, о чем вы вели речь

Впрочем, Valerio (пользуясь случаем — респект ) уже озвучил самый грамотный вариант: надо заинтересовать Евгения Суходолина на предмет пространной беседы по теме. Имхо — лично я узнал бы много нового, это точно.
Re[6]: Получение текста с посторонней апликации(перехват API
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 25.07.04 15:40
Оценка:
Mama mia!

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

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[6]: Получение текста с посторонней апликации(перехват API
От: sev http://www.demoforge.com
Дата: 25.07.04 17:15
Оценка: +1
Приветствую!

> Впрочем, Valerio (пользуясь случаем — респект ) уже озвучил самый

> грамотный вариант: надо заинтересовать Евгения Суходолина на предмет
> пространной беседы по теме. Имхо — лично я узнал бы много нового, это точно.

А о чём там можно пространно беседовать? Всё основное Валерий уже
сказал. А остальное — детали реализации. И он прав на 100%, что перехват
API это ненадёжно и криво.

С уважением,
Евгений Суходолин
http://www.demoforge.com
Posted via RSDN NNTP Server 1.9 beta
Re[7]: Получение текста с посторонней апликации(перехват API
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 25.07.04 20:27
Оценка:
Здравствуйте, Slicer [Mirkwood], Вы писали:

SM>Mama mia!


Все понял Я не наезжал, просто недопонял, о чем ты. Мир, бир, рок-н-ролл?
Re[8]: Получение текста с посторонней апликации(перехват API
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 25.07.04 20:34
Оценка: :)
В крайнем случае можно даже без рок-н-ролла

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.