![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Prospekt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 прочитаны, задача пока актуальна. Мне нужно именно считать текст, а не изменять. |
|||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 4 Всего: 63 |
TLabel - графический котрол, своего окна не имеет и данные хранит по какому-то адресу в памяти, искать его я бы не стал.
Имхо тут поможет только OCR ( http://stackoverflow.com/questions/4043876...ry-should-i-use ) -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
Prospekt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 30.5.2012 Репутация: нет Всего: 1 |
Это было первое, что пришло мне в голову. Но почему-то кажется, что это не оптимальное решение, что найти этот самый Label всеже будет проще.
Ещё предложения? |
|||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 4 Всего: 63 |
Удачи! -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: нет Всего: 20 |
Если этот самый Label это TLabel, то его нельзя "найти". -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
попробуй перехватить api отрисовки текста, и вычислить нужную строку по хендлу окна-родителя TLabel и координатам в нём
-------------------- Обижено школьников: 8 |
|||
|
||||
Prospekt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 30.5.2012 Репутация: нет Всего: 1 |
А можно пример. Каким образом можно перехватить? |
|||
|
||||
Ne1tr1n0 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 1.3.2009 Репутация: 2 Всего: 8 |
||||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: нет Всего: 20 |
Кстати сначала стоит убедиться, что это именно Label-ы. Вполне вероятно, что это стандартные Windows контролы STATIC TEXT. И хуки никакие не нужны будут. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
загугли "перехват api" -------------------- Обижено школьников: 8 |
|||
|
||||
Prospekt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 30.5.2012 Репутация: нет Всего: 1 |
Процентов 95, что стандартные лейбы, текст изменяется при работе программы, а как я понимаю static text - это неизменяемый текст. Да и смысла городить там что-то другое нет. Ne1tr1n0, я не разобрался. Я конечно погуглю отлавливание api, но если не сложно объясните словами, как это возможно впринципе. Залесть в цикл обработки сообщений своей программы это понятно, а вот чужой, без декомпиляции и исходного кода. Объясните идиологию такого подхода. Пока у меня непонимание и на тактическом уровне и на стратегическом. Это сообщение отредактировал(а) Prospekt - 24.12.2012, 09:02 |
|||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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 |
|||
|
||||
Prospekt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 30.5.2012 Репутация: нет Всего: 1 |
Спасибо всем за помощь.
Вопрос снимается, прогулгил тему. Как бы так сказать, меня отталкивает даже не то, что это сложновато (для меня пока сложно), а некрасивость решения, менять чужую прогу хоть и на время, пусть и динамически - это не то. Лучше уж действительно считывать изображение и собирать таким образом информацию, тем более что шрифт постоянен и известен, как и цвет. Плюс в большинстве случаев значением является число, проще будет по семплам разбирать картинку. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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 |
|||
|
||||
Rrader |
|
|||
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 29 Всего: 191 |
Можно через RTTI вытащить текст с TLabel. Нужно знать только имя меток в коде (типа Label1, Label2 и т.п.)
|
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Illusion Dolphin, угу, вижу. Странно что у меня это когда-то нормально работало под ХР
-------------------- Обижено школьников: 8 |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Могу скинуть готовую программу для внедрения dll. Писал для себя. Могу и исходник поискать. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Чучмек, скажи на словах как ты решаешь эту проблему
-------------------- Обижено школьников: 8 |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: нет Всего: 20 |
Стандартный лейбл для Windows это именно STATIC. А TLabel это порождение Борланда. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Prospekt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 30.5.2012 Репутация: нет Всего: 1 |
Думаю, имеет смысл "добить тему", вопрос не такой уж и редкий, кому-то пригодится. Возможно когда-нибудь даже мне.
Хотя в моем случае ОС не важна, у меня есть возможность выбора. Так стоп, Rrader, а можно сделать не зная имен? Можно получить ВЕСЬ СПИСОК и потом из него выколупывать нужное? Можно как-нибудь перебором выявить ИМЕНА этих Label? Т.е. поступить так: 1) долго и очень догло колупаться и узнать имена нужных меток. 2) работать с уже найденными именами. northener, хорошо, будем надеятся, что ты прав. Как узнать Static или TLabel? Какие от меня действия? Рекурентное сканирование всего ФРЕЙМА нашло все элементы, за исключением надписей. Самый плохой варинат, если они рисуются программно "ручками", но обычно так не делают. Значит либо Static либо TLabel. Во всяком случае это что-то не являющееся окном, иначе я бы его нашел. Это сообщение отредактировал(а) Prospekt - 24.12.2012, 13:20 |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
открой экзешник редактором ресурсов с поддержкой dfm-ресурсов дельфи и посмотри там. Хотя есть вероятность что это label создаётся динамически -------------------- Обижено школьников: 8 |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Проблема??? Да не встречал. Проблема в том, что не всякую dll можно внедрять. Из-за недоинициализации приложения на момент загрузки нашей dll не все api можно вызывать. p.s. я другим путем пошел,наверное. createprocess-VirtualAllocEx-readprocessmemory/writeprocessmemory-ResumeThread Добавлено @ 20:15
Присоединяюсь. Перехват+Внедрение Это сообщение отредактировал(а) Чучмек - 24.12.2012, 20:33 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 4 Всего: 63 |
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: нет Всего: 20 |
Ну если рекурсивный поиск окон был выполнен правильно и не нашел окон с таким текстом, то да это либо TLabel (если сторонняя программа сделана на Дельфи или на Билдере), либо "непомню как называется" (если сторонняя программа сделана на VB). Или это просто надписи выводимые ручками (неважно на чем сделана программа). И это точно не STATIC! Ибо статик это окно. Таким образом единственно надежный способ прочитать эти надписи программно - перехват API функций ответственных за вывод текста. Это сообщение отредактировал(а) northener - 25.12.2012, 01:52 -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Delvish |
|
|||
![]() oO ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 13.12.2006 Репутация: 2 Всего: 4 |
а если действовать сродни какому-нибудь редактору ресурсов? например, Resource Hacker разбирает Делфевое приложение по косточкам, прекрасно показывая где какой лэйбл лежит. Т.е. можно бы наверное комбинировать поиск нужной координаты текста с чтением непосредственно из экзешника зашитой инфы
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |