Сейчас на форуме: jinoweb (+4 невидимых)

 [email protected] —› Программирование —› Delphi. Список контролов в чужом приложении
Посл.ответ Сообщение

Ранг: 3.4 (гость)
Активность: 00.01
Статус: Участник

Создано: 14 января 2020 13:46
· Личное сообщение · #1

Доброго дня, подскажите куда копать, что читать?

Дано, есть x32 приложение, предположительно написанное на Delphi, в нем есть кастомный TPanel, и на нем куча кастомных TImage, при наведении на которые всплывает маленькое окошечко с некоторой инфой..
Как можно прочитать список этих контролов на TPanel и дополнить текст в всплывающем окошке своими данными (которые могут меняться, т.е. вшить ничего не получится)?

пробовал стандартным FindControl, но происходит access violation
...в разделе программ для декомпилятора указана аннотация - "вместо содержания процедур pas файлов вы увидите виртуальный адрес памяти, где будет находится процедура во время работы исполняемого файла - знать этот адрес может быть полезно для того, чтобы поставить туда прерывание и отлаживать программы", теоретически я бы поставил прерывание на метод наведения мыши onMouseEnter, практически - я даже не знаю как это делать (но с удовольствием что-нибудь почитаю), да и непонятно что дальше с этим адресом делать, ведь в область памяти я не могу ничего записать..

спасибо!



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 14 января 2020 13:53
· Личное сообщение · #2

Для того, чтобы дополнить текст вам вовсе не обязательно искать список контролов и ковыряться в дельфовском коде.
Вам нужно просто найти этот текст и поменять его в редакторе ресурсов (если вам повезет)



Ранг: 3.4 (гость)
Активность: 00.01
Статус: Участник

Создано: 14 января 2020 13:57
· Личное сообщение · #3

_MBK_ пишет:
Вам нужно просто найти этот текст и поменять его в редакторе ресурсов (если вам повезет)

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



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 14 января 2020 14:04
· Личное сообщение · #4

То есть вам надо модифицировать программу так, чтобы придать ей дополнительные функции? Подозреваю, что если у вас проблема уже с поиском контрола, то полный реверс ее в паскалевский код вы точно не осилите, а иначе навряд ли можно



Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 14 января 2020 14:18
· Личное сообщение · #5

пишешь дллку, хукаешь метод типа "SetText" (имя в зависимости от контрола куда он выводиться), профит
elite001 пишет:
я бы поставил прерывание на метод наведения мыши onMouseEnter, практически - я даже не знаю как это делать

F2 в OllyDbg.

elite001 пишет:
пробовал стандартным FindControl, но происходит access violation

да ну, и как бы ты это заюзал в чужой проге)



Ранг: 20.2 (новичок), 16thx
Активность: 0.020.01
Статус: Участник

Создано: 14 января 2020 14:29
· Личное сообщение · #6

Есть две метода, позволяющие решить эту задачу.

1) Встроиться в RTTI этого приложения и написать dll в той же версии Delphi, что и exe. Это даст возможность оперировать с формой(в терминах Delphi) и находящимися на ней контролами и обработчиками их событий, с возможностью модификации и прочего.
2) Обойтись хуками WinAPI: TextOut, CreateWindow и т.п., через что там тултипы выводятся надо смотреть. Тогда, навесив небольшую логику можно фильтровать/модифицировать вывод текста, проверяя, что он именно на нужном тултипе выводится.

Я бы посоветовал хуки, как более простой вариант для ТС. Гуглить: Delphi + WinAPI + hooks.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 14 января 2020 14:56
· Личное сообщение · #7

SReg пишет:
да ну, и как бы ты это заюзал в чужой проге)

Я так понял, он имел в виду Find Window в утилите SpyXX
Странно почему крэшится



Ранг: 20.2 (новичок), 16thx
Активность: 0.020.01
Статус: Участник

Создано: 14 января 2020 15:03 · Поправил: GroundHog
· Личное сообщение · #8

SReg пишет:
хукаешь метод типа "SetText" (имя в зависимости от контрола куда он выводиться)

Да, только имя контрола туда не передается, только неявный параметр TObject, я уже не помню, меняется он для статичных контролов от запуска к запуску или нет. Для создаваемых в рантайме должен.
Впрочем, если ТС знает текст, который прилетает, этого достаточно ему будет.

| Сообщение посчитали полезным: elite001


Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 14 января 2020 16:26
· Личное сообщение · #9

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

-----
2 оттенка серого




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 14 января 2020 22:37 · Поправил: Модератор
· Личное сообщение · #10

GroundHog
Имя контрола и не нужно знать.
И также, у нет данных от ТС по контролу, переопределен ли метод в нем или нет.
По большому счету достаточно знать указатель на экземпляр и от этого можно плясать.
f13nd как вы будете вытаскивать "все целиком, вместе с взаимосвязями" и самое главное зачем это делать?

f13nd пишет:
х32 приложения склонны хранить некоторую инфу в некоторых структурированных формах, чаще всего в виде связанных первичным ключем таблиц, называемых базами данных. Текст в контроле может быть содержимым полей нескольких таблиц, иногда выбранными по не совсем очевидным критериям из базы. Если задача эти данные заполучить - придется искать способ переработать базу, если дополнить их - тоже без хотя бы понимания как она устроена - мартышкин труд.


Достаточно открыть исходники vcl, а это выглядит как обсуждение непонятно чего.

| Сообщение посчитали полезным: elite001


Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 14 января 2020 22:52 · Поправил: f13nd
· Личное сообщение · #11

SReg пишет:
как вы будете вытаскивать "все целиком, вместе с взаимосвязями" и самое главное зачем это делать?

elite001 пишет:
есть x32 приложение, предположительно написанное на Delphi, в нем есть кастомный TPanel, и на нем куча кастомных TImage, при наведении на которые всплывает маленькое окошечко с некоторой инфой

х32 приложения склонны хранить некоторую инфу в некоторых структурированных формах, чаще всего в виде связанных первичным ключем таблиц, называемых базами данных. Текст в контроле может быть содержимым полей нескольких таблиц, иногда выбранным по не совсем очевидным критериям из базы. Если задача эти данные заполучить - придется искать способ переработать базу, если дополнить их - тоже без хотя бы понимания как она устроена - мартышкин труд.

Добавлено спустя 24 минуты
SReg пишет:
Достаточно открыть исходники vcl, а это выглядит как обсуждение непонятно чего.

Для меня это тоже выглядит как обсуждение непонятно чего, потому что об объекте ни малейшего представления не дано. Поэтому общие рассуждения об абстрактных вещах.

-----
2 оттенка серого


| Сообщение посчитали полезным: elite001

Ранг: 3.4 (гость)
Активность: 00.01
Статус: Участник

Создано: 16 января 2020 13:05
· Личное сообщение · #12

всем спасибо за наводки - в ApiMonitor поставил отслеживание вызова ShowWindow, нашел форму, которая всплывает, правда в саму форму информация выводится через DrawText.. форма висит в памяти и просто скрывается когда не нужна
?я же могу на это окно повесить новый event, что то типа onDrawText (нашел инфу про субклассинг и подмену функции отрисовки, но пока не понял можно ли это применять на чужие процессы)?
также - при вызове EnumProps у данной формы находятся 2 свойства со странными именами (что то типа Delphi0002727 и Ofs0000004090), как я могу получить доступ к этим свойствам и их структуре, чтобы посмотреть что в них (что в них вообще может быть?)?



Ранг: 43.1 (посетитель), 20thx
Активность: 0.160.29
Статус: Участник

Создано: 16 января 2020 14:18
· Личное сообщение · #13

elite001 пишет:
я же могу на это окно повесить новый event

В теории возможно, на практике нужны соответствующие знания. К тому же неизвестно как реализованы контролы в целевой программе, там могут использовать стандартные контролы винды (с такими работать проще), а могут быть самописные, т.е. по сути с точки зрения винды может быть обычная панелька, а в внутри нее все может рисоваться вручную собственным кодом, и тогда вклиниться в этой код чутка сложнее, чем просто добавить свой OnDrawText



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 16 января 2020 14:48
· Личное сообщение · #14

elite001 пишет:
я же могу на это окно повесить новый event, что то типа onDrawText (нашел инфу про субклассинг и подмену функции отрисовки, но пока не понял можно ли это применять на чужие процессы)?

На чужие нет, вам придется иньектировать вызов своей функции в процедуру отрисовки. Если вы, конечно, не хотите паскалевский код реверсировать ;)



Ранг: 1.6 (гость)
Активность: 0.01=0.01
Статус: Участник

Создано: 17 января 2020 06:51
· Личное сообщение · #15

Возможно стоит применить вариант с IDR ? Если приложение написано на дельфи.

https://exelab.ru/f/?action=vthread&forum=3&topic=15434&page=47

Добавлено спустя 8 минут
Выложите файл в паблик и дело пойдет быстрее


 [email protected] —› Программирование —› Delphi. Список контролов в чужом приложении
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати