Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как получить текст из чужого приложения не понятно из какого класса.

[PRO]Vitaly Ученик (149), на голосовании 11 лет назад
Т. е. объект не унаследован (содержащий текст) , а написан с 0. Этот объект не отвечает на сообщения windows.

Данные надо получать быстро и постоянно, т. к. они меняются.
Dump памяти не рассматривается, долго + вероятно приложение написано на управляемом C++, и адрес переменной с текстом меняется.

Искал на форумах и в поисковике - ничего дельного нет.

Идеи, предложения. Язык программирования - любой.
Дополнен 11 лет назад
Спс. Не 1й раз отвечаешь тут, причем мне)

Уже копал, пустота.
Это тоже самое что где-то в памяти есть массив с символами и его нестандартно выводят чуть ли не рисованием на форму.
В конечном итоге есть только массив в памяти, не к чему не привязанный.

Идея 1на. Возможно ли найти функцию, перехватить ее и скопировать данные в инжектированную переменную. Если внедриться в память чужого процесса, там точно можно найти на лету. Пробовал такое вытворять? Насколько мне помниться это реально.

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

Вопросы - Как найти функцию вывода. (Главный вопрос)
Если сталкивался с материалом по инжекту, то скинь что-нибудь.

Кстати копаясь в чужих приложениях я не раз втыкался что не могу стащить данные, мутированные Edit'ы StringGrid итд не всегда реагируют на win message
Дополнен 11 лет назад
С алгоритмом согласен. Не send не post естественно ничего по тексту не передают (или бы не было смысла в обсуждении) .
Непосредственно не ясно как искать функцию. Никогда не делал. Намекните на какую нить прогу. Чтонить проще чем Soft Ice. Как нибудь так - нахожу адрес памяти, ставлю там брейк, как только туда чтонить обращается я вижу точку вызова.

Так же не ясно.
Если приложение онлайн, и естественно постоянно работает, не повиснет ли оно при начале отладки.
Голосование за лучший ответ
kaiu Высший разум (115780) 11 лет назад
Что-то я уже это сегодня видел и сказать ничего не могу, не понятно, что такое быстро.... воровать из потока чтоль.... да если защифрован он в том не ясном классе, то гиблое дело.
Пиши подробней, может ты все же ошибаешься на счет написанного с нуля.
Есть всякие проги определители на чем написан exe, прогони ими, глянь на чем все же эта приблуда (программа непонятная для меня)
vasileman1984 Гуру (4302) 11 лет назад
Одного-единственного, всегда работающего точного алгоритма здесь нет - иначе хакером мог бы стать любой. Работать пока придется в отладчике над конкретным исполняемым файлом, вручную. Примерный алгоритм такой:
Так как текст выводится контролом, то нужно искать точку, где он передается системе. Это могут быть либо разнообразные варианты DrawText, TextOut, etc (если это кастомный контрол - написанный с нуля) , либо SendMessage, PostMessage, etc (текст будет передаваться в аргументах сообщения) . Будет много вызовов, которые нам не нужны. Далее, анализируя листинг, нужно найти функцию, которая обновляет текст, и то место, где он сохраняется (либо переменную-указатель, которая указывает на область памяти с текстом - это более вероятный расклад) . После этого можно приступать к кодингу - писать инжектируемую библиотеку, которая будет читать найденный текст, а также перехватывать функцию, которая изменяет его.
Похожие вопросы