eXeL@B —› Софт, инструменты —› Посоветуйте ПО для определения адреса TLabel в чужом ПО |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 19 апреля 2014 17:53 · Личное сообщение · #1 Здравствуйте! Посоветуйте инструмент (программу), которая позволит осуществить следующее: В чужом ПО, написанном на Delphi, мне нужно получить текст метки. Я бы мог это сделать с помощью ReadProcessMemory, зная, что это TLabel и зная его смещение. Чем определить класс я уже нашел (но пока не определил, доступ к жертве в понедельник): 1) rtdoi (Run time Delphi / C++ Builder forms object inspector 2) Delphi Application Peeper обе работают по принципу щелкнул мышью по контролу - получил инфу. А нет ли такой программы, чтобы получить и адрес этого контрола ? Желательно чтоб работала без инсталляции. В принципе давно использую по мелочам WinHex версии 15.4. Может с помощью него это возможно ? Если да, то подскажите как. А то я с его помощью даже не смог найти в памяти приложения текст нужной метки. Также, пробовал декомпилировать программу в DeDe - тоже не нашел. Или может посоветуйте другие способы ? Спасибо. |
|
Создано: 19 апреля 2014 18:04 · Личное сообщение · #2 |
|
Создано: 19 апреля 2014 18:10 · Личное сообщение · #3 |
|
Создано: 19 апреля 2014 18:13 · Поправил: dimka_new · Личное сообщение · #4 То есть вы хотите отслеживать текст лабела и производить какие-то дейтвия ? Тогда курите FindWindow. А вообще если имеется делфи под рукой, напишите программку с лабелом (желательно текст на английском и изучайте). Еще почитайте про AutoIt В аттаче скрин с ресторатора - простая программа с одним лабелом. 1f44_19.04.2014_EXELAB.rU.tgz - label.jpg |
|
Создано: 19 апреля 2014 18:24 · Личное сообщение · #5 В чужом ПО открывается форма, моя программа обнаруживает создание формы и должна прочитать текст метки на этой форме и оповестить пользователя. Лейблы не имеют хендла, поэтому FindWindow их не найдет. Тестовую программу для себя конечно сделал, и успешно читаю метки функцией ReadProcessMemory, зная его смещение (которое определил с помощью DeDe) |
|
Создано: 19 апреля 2014 18:25 · Поправил: dimka_new · Личное сообщение · #6 |
|
Создано: 19 апреля 2014 18:25 · Поправил: travnik · Личное сообщение · #7 спасибо за совет, попробовал, тоже не видит метки, как и WinSpy. в целом всё, что делают эти программы я и сам могу. даже начинал когда то подобную прогу писать e9ed_19.04.2014_EXELAB.rU.tgz - wndcmd.png а что это скрины как кощеево сердце заворачиваются ? |
|
Создано: 19 апреля 2014 18:48 · Поправил: dimka_new · Личное сообщение · #8 Приколы сервера, а для исследования программ на делфи лучше использовать - Interactive Delphi Reconstructor, темка где-то есть на форуме, dede уже устарел Ну если прога не секретная можешь отправить в личку с описанием чего надо, попробую может чем помогу. | Сообщение посчитали полезным: travnik |
|
Создано: 19 апреля 2014 18:59 · Личное сообщение · #9 |
|
Создано: 19 апреля 2014 19:17 · Личное сообщение · #10 |
|
Создано: 19 апреля 2014 19:48 · Поправил: travnik · Личное сообщение · #11 |
|
Создано: 19 апреля 2014 22:05 · Личное сообщение · #12 |
|
Создано: 19 апреля 2014 22:52 · Личное сообщение · #13 |
|
Создано: 19 апреля 2014 23:05 · Личное сообщение · #14 crc1 пишет: FindWindowEx поможет вам Не поможет. Инфа сотка. Мельком глянул под отладчиком где находится текст TLabel, при присваивании нового текста, адреса постоянно меняются, но в целом находятся в небольшой области, скорее всего где-то есть указатель на текущий адрес содержимого лэйбла, но искать лениво было) |
|
Создано: 19 апреля 2014 23:39 · Личное сообщение · #15 |
|
Создано: 20 апреля 2014 00:04 · Личное сообщение · #16 |
|
Создано: 20 апреля 2014 00:23 · Поправил: travnik · Личное сообщение · #17 crc1 Это хорошо, что помогает, но вы заблуждаетесь. В делфи TLabel действительно графический контрол, при его создании не вызывается CreateWindow(Ex), RegisterClass(Ex) и соответственно не имеет хендла. Те лейблы, которые находит FindWindow(Ex) - это окна с классом Static (ну может еще какие-то есть). А в TLabel в делфях просто рисуется функцией DrawText. Еще в VB вроде также. |
|
Создано: 20 апреля 2014 00:25 · Личное сообщение · #18 Как говорилось выше, тебе помогает со Static, а не TLabel. Если же хочешь доказать обратное, выкладывай рабочий пример для приаттаченой проги. По щелчку на форме текст меняется, если ты сможешь написать программу, которая получает текст лэйбла через FindWindowEx, то признаю себя идиотом 2c2b_20.04.2014_EXELAB.rU.tgz - Project1.exe |
|
Создано: 20 апреля 2014 00:27 · Поправил: tihiy_grom · Личное сообщение · #19 |
|
Создано: 20 апреля 2014 00:35 · Личное сообщение · #20 |
|
Создано: 20 апреля 2014 01:18 · Личное сообщение · #21 travnik пишет: это как из пушки по воробьям. не хочу, чтобы мой хук стал причиной зависаний и падения программы Про TextOut я ошибся. Сделайте тестовой приложение, в котором будет менять Caption у TLabel - и посмотрите в IDR что и как при этом происходит. Ищите нужное место, инжектируйте туда свой код, который будет передавать строку вашему приложению - ничего сложного в этом нет |
|
Создано: 20 апреля 2014 13:03 · Личное сообщение · #22 Делюсь секретом. Самый простой и надежный способ - выяснить версию Delphi, которой собран exe. Далее собрать dll в той же версии компилятора, заинжектить её в процесс и поставить хук на TCustomForm.Show Одна и таже версия Delphi позволит без особых извратов общаться к RTTI, т.е. прямо в захуканной ф-ии можно привести передаваемые ук-ль к TForm, и через TForm.Components, перечислив все имеющиеся на ней контролы получить текст с TLabel. Ну а далее либо по таймеру мониторить нужный Label, либо запомнить его хендл и хукать ф-ю, меняющую текст на нем, уже не помню, что там, SetControlText, кажется. |
|
Создано: 20 апреля 2014 14:02 · Личное сообщение · #23 |
|
Создано: 20 апреля 2014 15:05 · Поправил: travnik · Личное сообщение · #24 GroundHog пишет: Одна и таже версия Delphi позволит без особых извратов общаться к RTTI, т.е. прямо в захуканной ф-ии можно привести передаваемые ук-ль к TForm, и через TForm.Components, перечислив все имеющиеся на ней контролы получить текст с TLabel. а сработает, если в этом ПО практически нет стандартных компонентов, даже вместо TForm какой-то специфичный наследник от TTntForm ? |
|
Создано: 20 апреля 2014 15:54 · Личное сообщение · #25 |
|
Создано: 20 апреля 2014 16:19 · Личное сообщение · #26 travnik пишет: а сработает, если в этом ПО практически нет стандартных компонентов, даже вместо TForm какой-то специфичный наследник от TTntForm ? TntForms.pas пишет: TTntForm = class(TForm{TNT-ALLOW TForm}) Техника от этого не меняется, хендл компонета при показе формы всё равно получите, класс через Component.ClassName тоже. IDR поможет найти метод, который меняет текст на этом нестандартном контроле. Хук на метод + фильтр по хендлу = текст. А вообще надо точнее ставить задачу, а то сначала Form, Label, а теперь оказывается unicode-компоненты TTntxxx |
|
Создано: 20 апреля 2014 17:07 · Личное сообщение · #27 dimka_new пишет: а вы не трольте даже не думал. спросил серьезно, т.к. не очень разбираюсь. GroundHog пишет: А вообще надо точнее ставить задачу, а то сначала Form, Label, а теперь оказывается unicode-компоненты TTntxxx Не сочтите за хамство… Я вопрос поставил довольно точный в первом сообщении: получить адрес TLabel в чужом ПО Про Form не говорил, но говорил и продолжаю говорить про TLabel, т.к. пока я работаю со своей тестовой жертвой. В принципе частично разобрался, еще есть несколько вопросов: IDR дал такой код: Code:
В комментариях, как я понимаю, относительные адреса, например //f2FC. Но реально я нахожу все эти контролы по адресам $02FC и т.д., т.е. … 0 вместо F. DeDe тоже дал $02FC. Не подскажите, почему в IDR f2FC ? На первый взгляд не существенно, но вдруг от Вас что важное узнаю |
|
Создано: 20 апреля 2014 17:50 · Поправил: travnik · Личное сообщение · #28 Еще вопрос, если позволите (их много впереди ). С помощью WinHex ищу в памяти своей тестовой программки строку (текст метки). WinHex находит его в нескольких адресах. Можно ли определить какой из адресов относится к Label а какой просто мусор ? Или еще упрощу вопрос: код тестовой программки: Code:
В памяти строка '51515151' находится по двум адресам (один адрес статичной строки, присваиваемой переменной S, а второй собственно адрес значения переменной S). Как с помощью WinHex, глаз и рук (и небольшого кол-ва мозга) определить по какому адресу находится значение переменной S ? |
|
Создано: 20 апреля 2014 18:06 · Личное сообщение · #29 travnik К сожалению, мы с Вами говорим на разных языках. Вы пытаетесь найти статичное смещение в коде программы и читать из него значение Label. Если это текстовое значение меняется(а скорее всего это так, иначе зачем получать его значение), то строка каждый раз будет выделяться динамически в памяти и полю объекта Text будет присваиваться адрес строки. Могу ответить на конкретные вопросы по технике, что описал выше, но если она вам не понятна - в запросы. |
|
Создано: 20 апреля 2014 18:13 · Поправил: travnik · Личное сообщение · #30 GroundHog пишет: К сожалению, мы с Вами говорим на разных языках. да, к сожалению. Потому что адрес текста хоть и меняется, но неизменным остается адрес, в котором находится актуальный указатель на текст. GroundHog пишет: Вы пытаетесь найти статичное смещение в коде программы и читать из него значение Label. И это мне удается, поверьте, ничего сложного |
. 1 . 2 . >> |
eXeL@B —› Софт, инструменты —› Посоветуйте ПО для определения адреса TLabel в чужом ПО |