Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Достать текст из Label чужого приложения, текст из Label 
:(
    Опции темы
Prospekt
Дата 23.12.2012, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.5.2012

Репутация: нет
Всего: 1



Собственно вопрос озвучен, есть приложение, и у него есть несколько Label-ов. Как получить текс с них? Принимаются к рассмотрению любые извращения.

Идентицифировать (различать) Label-ы можно, например, зная или их Id (index) или их расположение.

Темы: 
http://forum.vingrad.ru/topic-94012.html#st_15_view_0
http://forum.vingrad.ru/topic-186181.html
прочитаны, задача пока актуальна.

Мне нужно именно считать текст, а не изменять.

PM MAIL   Вверх
Illusion Dolphin
Дата 23.12.2012, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 4
Всего: 63



TLabel - графический котрол, своего окна не имеет и данные хранит по какому-то адресу в памяти, искать его я бы не стал. 

Имхо тут поможет только OCR ( http://stackoverflow.com/questions/4043876...ry-should-i-use )


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Prospekt
Дата 23.12.2012, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.5.2012

Репутация: нет
Всего: 1



Это было первое, что пришло мне в голову. Но почему-то кажется, что это не оптимальное решение, что найти этот самый Label всеже будет проще.
Ещё предложения?
PM MAIL   Вверх
Illusion Dolphin
Дата 23.12.2012, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 4
Всего: 63



Цитата

 что найти этот самый Label всеже будет

Удачи! 


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
northener
Дата 23.12.2012, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: нет
Всего: 20



Цитата(Prospekt @  23.12.2012,  18:32 Найти цитируемый пост)
что найти этот самый Label всеже будет проще

Если этот самый Label это TLabel, то его нельзя "найти".


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 23.12.2012, 19:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



попробуй перехватить api отрисовки текста, и вычислить нужную строку по хендлу окна-родителя TLabel и координатам в нём


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Prospekt
Дата 23.12.2012, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.5.2012

Репутация: нет
Всего: 1



Цитата

попробуй перехватить api отрисовки текста, и вычислить нужную строку по хендлу окна-родителя TLabel и координатам в нём 

А можно пример. Каким образом можно перехватить?
PM MAIL   Вверх
Ne1tr1n0
Дата 23.12.2012, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 1.3.2009

Репутация: 2
Всего: 8



PM MAIL   Вверх
northener
Дата 24.12.2012, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: нет
Всего: 20



Цитата(Prospekt @  23.12.2012,  13:31 Найти цитируемый пост)
есть приложение, и у него есть несколько Label-ов. Как получить текс с них?

Кстати сначала стоит убедиться, что это именно Label-ы. Вполне вероятно, что это стандартные Windows контролы STATIC TEXT. И хуки никакие не нужны будут.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 24.12.2012, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(Prospekt @  23.12.2012,  21:01 Найти цитируемый пост)
А можно пример. Каким образом можно перехватить? 

загугли "перехват api"


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Prospekt
Дата 24.12.2012, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.5.2012

Репутация: нет
Всего: 1



Цитата

Кстати сначала стоит убедиться, что это именно Label-ы. Вполне вероятно, что это стандартные Windows контролы STATIC TEXT. И хуки никакие не нужны будут. 


Процентов 95, что стандартные лейбы, текст изменяется при работе программы, а как я понимаю static text - это неизменяемый текст. Да и смысла городить там что-то другое нет.

Ne1tr1n0, я не разобрался. Я конечно погуглю отлавливание api, но если не сложно объясните словами, как это возможно впринципе. Залесть в цикл обработки сообщений своей программы это понятно, а вот чужой, без декомпиляции и исходного кода. Объясните идиологию такого подхода. Пока у меня непонимание и на тактическом уровне и на стратегическом.

Это сообщение отредактировал(а) Prospekt - 24.12.2012, 09:02
PM MAIL   Вверх
Illusion Dolphin
Дата 24.12.2012, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 4
Всего: 63



Цитата

объясните словами, как это возможно впринципе.

Допустим имеется сторонняя программа, работающая от лица пользователя (ring3). 
Мы пишем программу, которая делает:
1) Запускает необходимую нам программу (для Vista, Win7, 8 - в режиме SUSPENDED, с XP тут проблемы)
2) С помощью CreateRemoteThread создаём в этой программе поток, который загружает нами написанную dll в адресное пространство программы
3) Эта длл должна просмотреть секцию импорта exe-файла и найти там выховы системных функций, в данном случае DrawTextA и DrawTextW
4) Адреса функций перезаписываются нашими функциями, которые будут принимать данные, обрабатывать и по желанию - запускать оригинальные функции
5) Профит

Трудность, с которой придётся столкнуться: нет ни одного толкового примера в интернете, работающего в XP-Win8, тем более с учётом x64, так что если надо универсальность - придётся попотеть.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Prospekt
Дата 24.12.2012, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.5.2012

Репутация: нет
Всего: 1



Спасибо всем за помощь.
Вопрос снимается, прогулгил тему. Как бы так сказать, меня отталкивает даже не то, что это сложновато (для меня пока сложно), а некрасивость решения, менять чужую прогу хоть и на время, пусть и динамически - это не то.
Лучше уж действительно считывать изображение и собирать таким образом информацию, тем более что шрифт постоянен и известен, как и цвет. Плюс в большинстве случаев значением является число, проще будет по семплам разбирать картинку.
PM MAIL   Вверх
bems
Дата 24.12.2012, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(Illusion Dolphin @  24.12.2012,  09:49 Найти цитируемый пост)
Запускает необходимую нам программу (для Vista, Win7, 8 - в режиме SUSPENDED, с XP тут проблемы)
какие проблемы?



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Illusion Dolphin
Дата 24.12.2012, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 4
Всего: 63



Проблема только для XP, делается:
CreateProcess с флагом CREATE_SUSPENDED
CreateRemoteThread
WaitForSingleObject (созданный поток)
ResumeThread (оригинальный поток приложения).
В результате имеем что программа завершает работу :( Читал форумы, люди на это наталкиваются: 
http://stackoverflow.com/questions/9695370...-primary-thread
http://www.wasm.ru/forum/viewtopic.php?pid=308079 
http://www.gamedeception.net/threads/17964...s-what-the-fuck
http://bugtraq.ru/cgi-bin/forum.mcgi?type=...=6&m=143610
http://forum.sources.ru/index.php?showtopic=266627 тут тоже проблемы у людей

Кто-то пишет что в XP странный загрузчик и если запускать с CREATE_SUSPENDED, то exe ещё недоинициализирован, что исправили в поздних виндах. Но если есть идеи - я могу создать отдельную ветку для обсуждения. 


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Rrader
Дата 24.12.2012, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



Можно через RTTI вытащить текст с TLabel. Нужно знать только имя меток в коде (типа Label1, Label2 и т.п.)


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
bems
Дата 24.12.2012, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Illusion Dolphin, угу, вижу. Странно что у меня это когда-то нормально работало под ХР


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Чучмек
Дата 24.12.2012, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Цитата(Illusion Dolphin @  24.12.2012,  11:35 Найти цитируемый пост)
Проблема только для XP

Могу скинуть готовую программу для внедрения dll. Писал для себя. Могу и исходник поискать.



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
bems
Дата 24.12.2012, 12:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Чучмек, скажи на словах как ты решаешь эту проблему


--------------------
Обижено школьников: 8
PM MAIL   Вверх
northener
Дата 24.12.2012, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: нет
Всего: 20



Цитата(Prospekt @  24.12.2012,  08:32 Найти цитируемый пост)
Процентов 95, что стандартные лейбы, текст изменяется при работе программы, а как я понимаю static text - это неизменяемый текст. Да и смысла городить там что-то другое нет.

Стандартный лейбл для Windows это именно STATIC. А TLabel это порождение Борланда.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Prospekt
Дата 24.12.2012, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.5.2012

Репутация: нет
Всего: 1



Думаю, имеет смысл "добить тему", вопрос не такой уж и редкий, кому-то пригодится. Возможно когда-нибудь даже мне.
Хотя в моем случае ОС не важна, у меня есть возможность выбора.

Так стоп, Rrader, а можно сделать не зная имен? Можно получить ВЕСЬ СПИСОК и потом из него выколупывать нужное? Можно как-нибудь перебором выявить ИМЕНА этих Label?
Т.е. поступить так:
1) долго и очень догло колупаться и узнать имена нужных меток.
2) работать с уже найденными именами.

northener, хорошо, будем надеятся, что ты прав. Как узнать Static или TLabel? Какие от меня действия? Рекурентное сканирование всего ФРЕЙМА нашло все элементы, за исключением надписей. Самый плохой варинат, если они рисуются программно "ручками", но обычно так не делают. Значит либо Static либо TLabel. Во всяком случае это что-то не являющееся окном, иначе я бы его нашел.

Это сообщение отредактировал(а) Prospekt - 24.12.2012, 13:20
PM MAIL   Вверх
bems
Дата 24.12.2012, 13:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(Prospekt @  24.12.2012,  13:09 Найти цитируемый пост)
Можно как-нибудь перебором выявить ИМЕНА этих Label?

открой экзешник редактором ресурсов с поддержкой dfm-ресурсов дельфи и посмотри там. Хотя есть вероятность что это label создаётся динамически


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Чучмек
Дата 24.12.2012, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Цитата(bems @  24.12.2012,  12:24 Найти цитируемый пост)
Чучмек, скажи на словах как ты решаешь эту проблему 

Проблема??? Да не встречал. Проблема в том, что не всякую dll можно внедрять.  Из-за недоинициализации приложения на момент загрузки нашей dll не все api можно вызывать.
p.s. я другим путем пошел,наверное. createprocess-VirtualAllocEx-readprocessmemory/writeprocessmemory-ResumeThread

Добавлено @ 20:15
Цитата(Illusion Dolphin @  24.12.2012,  11:35 Найти цитируемый пост)
Но если есть идеи - я могу создать отдельную ветку для обсуждения.  

Присоединяюсь. Перехват+Внедрение


Это сообщение отредактировал(а) Чучмек - 24.12.2012, 20:33


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Illusion Dolphin
Дата 24.12.2012, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 4
Всего: 63



Цитата

Присоединяюсь. Перехват+Внедрение

http://forum.vingrad.ru/forum/topic-360472...sumethread.html


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
northener
Дата 25.12.2012, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: нет
Всего: 20



Цитата(Prospekt @  24.12.2012,  13:09 Найти цитируемый пост)
northener, хорошо, будем надеятся, что ты прав. Как узнать Static или TLabel? Какие от меня действия? Рекурентное сканирование всего ФРЕЙМА нашло все элементы, за исключением надписей. Самый плохой варинат, если они рисуются программно "ручками", но обычно так не делают. Значит либо Static либо TLabel. Во всяком случае это что-то не являющееся окном, иначе я бы его нашел.

Ну если рекурсивный поиск окон был выполнен правильно и не нашел окон с таким текстом, то да это либо TLabel (если сторонняя программа сделана на Дельфи или на Билдере), либо "непомню как называется" (если сторонняя программа сделана на VB). Или это просто надписи выводимые ручками (неважно на чем сделана программа). И это точно не STATIC! Ибо статик это окно. Таким образом единственно надежный способ прочитать эти надписи программно - перехват API функций ответственных за вывод текста.


Это сообщение отредактировал(а) northener - 25.12.2012, 01:52


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Delvish
Дата 26.12.2012, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 13.12.2006

Репутация: 2
Всего: 4



а если действовать сродни какому-нибудь редактору ресурсов? например, Resource  Hacker разбирает Делфевое приложение по косточкам, прекрасно показывая где какой лэйбл лежит. Т.е. можно бы наверное комбинировать поиск нужной координаты текста с чтением непосредственно из экзешника зашитой инфы

Код

object Form1: TForm1
  Left = 192
  Top = 124
  Width = 252
  Height = 182
  Caption = 'Form1 caption'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 16
    Top = 8
    Width = 71
    Height = 13
    Caption = 'Label1isThere'
  end
  object Label2: TLabel
    Left = 16
    Top = 32
    Width = 105
    Height = 13
    Caption = 'ThereIsLabelNumber2'
  end
  object Label3: TLabel
    Left = 24
    Top = 64
    Width = 24
    Height = 13
    Caption = 'Third'
  end
end

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1208 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.