Сейчас на форуме: rmn, exp50848 (+9 невидимых)

 eXeL@B —› Основной форум —› Исследование Qt программм
Посл.ответ Сообщение

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

Создано: 28 ноября 2014 18:36 · Поправил: Wyfinger
· Личное сообщение · #1

Добрый день друзья!

Есть простая программа-клиент к умному браслету Iwown Smart Bracelet, http://ge.tt/9lXsKR52/v/0.
(На сайте производителя сейчас этой программы не найти).

Браслет вообще говоря должен общаться со смартфоном по BLE 4, но может также работать по USB для чего при подключении ставится драйвер виртуального COM порта (драйвер кстати от идентичного браслета Vidonn).
Т.е. при работе по USB фактически общение ПК и браслета происходит по COM.

Я успешно разобрал протокол работы браслета Vidonn (его программа для ПК написана на .Net, там все просто), но не могу разобраться с Iwown. Приложение написано на Qt. Вижу библиотеку QtSerialPort, смотрел примеры работы с ней в интернете, но IDA и Olly показывают какие-то адовые функции, экспортируемые этой библиотекой.

Мне нужно найти только функции send/write и read, которые пишут в / читают из в COM порта.

Уже пробовал на все экспортируемые этой библиотекой функции ставить бряки, бестолку.

Подскажите пожалуйста в каком направлении копать. Возможно есть какие-то специальные инструменты для анализа программ на Qt или сигнатуры для IDA (я пытался создать их сам в FLAIR, но опыта у меня в этом ноль..). Как например найти обработчик клика по кнопке?

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

Заранее спасибо за помощь.




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 28 ноября 2014 19:20
· Личное сообщение · #2

Сам с QT дел тесных не имел, но вот что с ходу нагуглилось, может что-то из этого ещё не видели:
--> Link <--
--> Link <--
--> Link <--
--> Link <--

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 28 ноября 2014 19:21
· Личное сообщение · #3

Qt прога как юзает, статически или динамически?

-----
Everything is relative...




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 28 ноября 2014 20:02
· Личное сообщение · #4

Wyfinger пишет:
Уже пробовал на все экспортируемые этой библиотекой функции ставить бряки, бестолку.

Этой, это какой простите?

Code:
  1. .idata:004C0E00 ; Imports from QtSerialPort.dll
  2. .idata:004C0E00 ;
  3. .idata:004C0E00                 extrn _ZN15QSerialPortInfo14availablePortsEv:dword
  4. .idata:004C0E00                                         ; CODE XREF: sub_4705AC+2Ep
  5. .idata:004C0E00                                         ; DATA XREF: sub_4705AC+2Er
  6. .idata:004C0E04


Добавлено спустя -45 минут
Так, туплю. QtSerialPort это QIODevice, но в данном случае они используют его лишь для того, чтобы убедиться, что нужный COM порт открывается с нужными правами. Само чтение происходит внутри pm1.dll - экспортируемая uart_open, например, открывает порт и настраивает его.

Code:
  1. .text:0046FCF7                 mov     [esp], ebx
  2. .text:0046FCFA                 call    pm_getPMStat
  3. .text:0046FCFF                 test    al, al

Вот чтение данных из COM-порта.

P.S. На будущее. Для работы с COM-портами Qt, как и любая другая библиотека не использует магии. Должен вызываться обычный ReadFile, можно было от него плясать и вы бы сразу все нашли.

Добавлено спустя -33 минут
Wyfinger пишет:
Как например найти обработчик клика по кнопке?

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

Вот вам для домашней работы:
Code:
  1. .rdata:00497751                                         ; .text:0046D94Ao
  2. .rdata:00497767 a2clicked       db '2clicked()',0       ; DATA XREF: sub_46D4AC+12Eo
  3. .rdata:00497767                                         ; sub_46D4AC+15Eo ...

Что такое сигналы и слоты?
Почему в начале строки стоит '2'?
Как устроена QObject::connect изнутри?

Готовый ответ: 0x470E94 - поставьте сюда точку останова.



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

Создано: 29 ноября 2014 05:57
· Личное сообщение · #5

Спасибо, похоже нашел то что нужно.


 eXeL@B —› Основной форум —› Исследование Qt программм
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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