LINUX.ORG.RU

Снифинг протоков проприетарного ПО или что-то лучше Вайршарка?

 


1

2

Всем салют.

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

Для нее есть тулза (одна) - Плеер: задать нужные параметры и наслаждаться. Возможности довольно широки но требуется автоматизация, иначе никак.

В доментах что я находил, ни слова об этом нет.

Оборудование я поменять не могу (приобретено клиентом и уже смонтировано).

Я снифал протокол но он слишком сложный: пакетов много, попытки «притвориться» плеером результата не дают.

Подскажите, хотяб, что-то удобнее Вайршарка для этого дела.

Пока пытаюсь анализировать протокол через сравнение цепочек Вайршарка, но слишком много мусора.

Данные как бинарные так и XML.

Может я просто чего-то не знаю?

В качестве костыля пытался сделать через автоматизацию управением GUI самого Плеера но компонента ввода текста RichText (скорей всего там какой-то веб браузер) и все падает на шаге втором шаге (получить фокус).

trashymichael ★★★
() автор топика

расковырять контроллер, слить прошивку, декомпилировать - об этом думал? делал так для для проприетарных телефонов панасоник лет 15 назад, способ рабочий. Ребята помогли выцепить прошивку, потом сидел с IDA-ой разбирался с блобом, потом написал софт для управления и доку на протокол. Кое-какие белые пятна всёравно остались, да. Wireshark тоже юзал, конечно, он еще назывался по-другому тогда. Инструментов много не бывает!

zendrz ★★
()

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

anonymous
()
Ответ на: комментарий от trashymichael

Нет бюджета, короче говоря

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

anonymous
()

А можешь выложить куда-нибудь дамп трафика и саму программу, которая общается с устройством?

anonymous
()
Ответ на: комментарий от trashymichael

В качестве костыля пытался сделать через автоматизацию управением GUI самого Плеера но компонента ввода текста RichText (скорей всего там какой-то веб браузер) и все падает на шаге втором шаге (получить фокус). Плохо пытался. Курсор наводи и тыкай.

anonymous
()

Всегда при реверсинге обходился вдумчивым созерцанием HEX dump’а.

Я снифал протокол но он слишком сложный: пакетов много, попытки «притвориться» плеером результата не дают

Что значит «пакетов много»? Тебе же не пакеты нужно считать, а содержимое TCP сессии смотреть.

Пока пытаюсь анализировать протокол через сравнение цепочек Вайршарка, но слишком много мусора

Звучит так как будто ты ищёшь лёгких путей - их при реверсинге не бывает. Собирай как можно больше сессий, смотри содержимое, сравнивай, сопоставляй с событиями, пробуй повторить.

slovazap ★★★★★
()
Ответ на: комментарий от trashymichael

На чём gui то хоть? Может там dll есть какая рядышком?

pon4ik ★★★★★
()
Ответ на: комментарий от slovazap

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

trashymichael ★★★
() автор топика

что-то лучше Вайршарка Тебе нужен ИИ который сделает за тебя всю работу?

anonymous
()
Ответ на: комментарий от trashymichael

Просто в гугл вбив «hdplayer» и получил: «HDPlayer 5.3.98.0. Программа для управления полноцветным LED экраном на контроллерах HD (C10-C30-A10-A30-D10-D20).»

Контроллеры же указаны.

anonymous
()
Ответ на: комментарий от anonymous

Прошивки похоже идут сразу с программой:

$ ls -lh *.bin
-rw-rw-r--. 1 im im  34M Jul 15 08:16 BoxPlayer_7_1_52_0.bin
-rw-rw-r--. 1 im im 2.4M Jul 15 07:50 BoxPlayerBase.bin
-rw-rw-r--. 1 im im  21M Jul 15 07:50 iMax6Depend.bin
-rw-rw-r--. 1 im im  20M Jul 15 07:50 ZX296702Depend.bin

$ tail -c +$(( 0x25c )) iMax6Depend.bin | tar vzt | head -n 40
drwxr-xr-x wulong/wulong     0 2018-04-17 11:25 A30/
-rwxr--r-- wulong/wulong 1695937 2018-11-15 14:40 A30/8188eu.ko
-rwxr--r-- wulong/wulong 3952816 2018-07-16 12:14 A30/uImage
-rwxr--r-- wulong/wulong  144395 2016-06-30 13:08 A30/fpgaA30+.img
-rwxr--r-- wulong/wulong  199152 2018-12-13 08:06 A30/u-boot.bin
-rwxr--r-- wulong/wulong   33924 2018-07-16 12:14 A30/mxc_ipuv3_fb.ko
-rwxr--r-- wulong/wulong  192356 2018-04-17 11:20 A30/fpgaA30.img
drwxr-xr-x wulong/wulong       0 2018-07-10 12:50 A60X/
-rwxrwxrwx wulong/wulong 1696033 2018-12-13 12:17 A60X/8188eu.ko
-rwxrwxrwx wulong/wulong  157048 2018-07-10 12:47 A60X/fpgaA603.img
-rwxrwxrwx wulong/wulong 3843856 2018-11-09 08:27 A60X/uImage
-rwxrwxrwx wulong/wulong  145960 2016-06-30 12:35 A60X/fpgaA601,A602.img
-rwxrwxrwx wulong/wulong  199648 2018-12-13 08:07 A60X/u-boot.bin
-rwxrwxrwx wulong/wulong   33948 2017-11-20 13:59 A60X/mxc_ipuv3_fb.ko
-rwxr--r-- wulong/wulong    1358 2016-01-11 14:27 dhcpd.conf
drwxr-xr-x wulong/wulong       0 2016-01-31 08:38 ffmpeg/
-rwxr--r-- wulong/wulong  275244 2016-01-31 08:38 ffmpeg/libSDL-1.2.so.0.11.4
-rwxr--r-- wulong/wulong 1068720 2016-01-31 08:38 ffmpeg/libx264.so.148
-rwxr--r-- wulong/wulong  275244 2016-01-31 08:38 ffmpeg/libSDL.so.0.11.4
-rwxr--r-- wulong/wulong  119684 2016-01-31 08:38 ffmpeg/libffplay.so
-rwxr--r-- wulong/wulong   71968 2016-01-31 08:38 ffmpeg/libpostproc.so.54
-rwxr--r-- wulong/wulong 1729884 2016-01-31 08:38 ffmpeg/libavformat.so.57
-rwxr--r-- wulong/wulong 1331240 2016-01-31 08:38 ffmpeg/libavfilter.so.6
-rwxr--r-- wulong/wulong   52768 2016-01-31 08:38 ffmpeg/libavdevice.so.57
-rwxr--r-- wulong/wulong 10314900 2016-01-31 08:38 ffmpeg/libavcodec.so.57
-rwxr--r-- wulong/wulong   360852 2016-01-31 08:38 ffmpeg/libswscale.so.4
-rwxr--r-- wulong/wulong   393500 2016-01-31 08:38 ffmpeg/libavutil.so.55
-rwxr--r-- wulong/wulong    82300 2016-01-31 08:38 ffmpeg/libswresample.so.2
-rwxr--r-- wulong/wulong   834796 2016-01-29 07:14 libglib-2.0.so.0.2200.1
-rwxr--r-- wulong/wulong    25332 2016-01-29 07:14 libiw.so.29
drwxrwxr-x wulong/wulong        0 2016-08-19 08:33 mtp/
lrwxrwxrwx wulong/wulong        0 2016-08-19 08:21 mtp/libmtp.so -> libmtp.so.9.2.0
-rwxr--r-- wulong/wulong    11440 2016-01-29 07:14 mtp/libgpg-error.so
lrwxrwxrwx wulong/wulong        0 2016-01-27 07:45 mtp/libgcrypt.so.11 -> libgcrypt.so
-rwxr--r-- wulong/wulong   451396 2016-01-29 07:14 mtp/libgcrypt.so
-rwxr-xr-x wulong/wulong   755262 2016-08-19 08:21 mtp/libmtp.so.9.2.0
lrwxrwxrwx wulong/wulong        0 2016-08-19 08:21 mtp/libmtp.so.9 -> libmtp.so.9.2.0
lrwxrwxrwx wulong/wulong        0 2016-01-27 07:59 mtp/libgpg-error.so.0 -> libgpg-error.so
lrwxrwxrwx wulong/wulong        0 2016-01-27 07:59 mtp/libgpg-error.so.0.5.0 -> libgpg-error.so.0
-rwxr-xr-x wulong/wulong    39420 2016-01-29 07:14 mtp/libusb-1.0.so.0.0.0

Там просто tar.gz идёт после заголовка и XMLки.

anonymous
()
Ответ на: комментарий от anonymous

В общем вот вам скрипт для распаковки *.bin:

#!/usr/bin/env python3

import gzip
import sys
import xml.dom.minidom


_MAGIC = b'HDPLAYER'
_HDR_LEN = 0x1c  # header before XML

_GZIP_MAGIC = b'\x1f\x8b\x08'

_READ_BUF_SZ = 4096


def _skip():
    with open(sys.argv[1], 'rb') as f:
        magic = f.read(len(_MAGIC))
        assert magic == _MAGIC

        # Skip the rest of the header.
        _ = f.read(_HDR_LEN - len(_MAGIC))

        read_buf = True
        buf = b''
        gzip_offset = None
        while read_buf:
            read_buf = f.read(_READ_BUF_SZ)
            if read_buf:
                buf += read_buf
                p = buf.find(_GZIP_MAGIC)
                if p != -1:
                    buf = buf[:p]
                    gzip_offset = p
                    break

        assert gzip_offset is not None

    dom = xml.dom.minidom.parseString(buf)
    print(dom.toprettyxml(), file=sys.stderr)

    assert not sys.stdout.isatty()

    with open(sys.argv[1], 'rb') as f:
        f.seek(gzip_offset + _HDR_LEN)
        with gzip.GzipFile(fileobj=f, mode='rb') as gz:
            read_buf = True
            while read_buf:
                read_buf = gz.read(_READ_BUF_SZ)
                if read_buf:
                    sys.stdout.buffer.write(read_buf)


_skip()

Сами бинарники «плеера» под разные платы похоже лежат в BoxPlayer_7_1_52_0.bin:

$ skipxml.py BoxPlayer_7_1_52_0.bin | tar t
<?xml version="1.0" ?>
<FirmwareInfo>
	<Version>7.1.52.0</Version>
	<Decompress>killall -1 BoxDaemon; tar zxvf %s -C %s </Decompress>
	<Script>upgrade.sh</Script>
	<Type>FPGA</Type>
	<Type>BoxPlayer</Type>
	<DeviceType>A30,A30+,A601,A602,A603,C10,C30,D10,D20,D30,C30+,C10+,A3,C15,C35,A4,A5,A6,D15,D35</DeviceType>
	<Info>
		<L2052/>
		<L1028/>
		<L1033/>
		<L1055/>
		<L1031/>
		<L1034/>
		<L1065/>
		<L1041/>
		<L1042/>
		<L1049/>
		<L1045/>
		<L1057/>
		<L1025/>
		<L1040/>
		<L1036/>
		<L1032/>
		<L3098/>
		<L2070/>
		<L1086/>
		<L1054/>
		<L1066/>
	</Info>
</FirmwareInfo>

ZX296702_BoxPlayerC10,C30,D10,D20,D30.tar.gz
iMax6_BoxPlayerA30,A30+,A601,A602,A603.tar.gz
Android_rk3188_BoxPlayer.tar.gz
Android_rk3288_BoxPlayer.tar.gz
PX30_BoxPlayerD15.tar.gz
log.config
upgrade.sh

Чтобы продолжить ковырять нужно больше инфы:

  • дампы трафика,
  • какие на девайсе открыты порты (nmap),
  • есть ли у девайса UART или RS232 с линуксовой консолью (очень удивлюсь если нету).
im-0
()
Ответ на: комментарий от im-0

давай, мне просто текст показать нужно, модель D30

trashymichael ★★★
() автор топика
Ответ на: комментарий от trashymichael

ну а что в нем упаковано раз «просто tar»

Куча разных бинарников (в смысле скомпиленных программ) под ARM. Судя по названиям - под разные процы/платы. Под Android и без него (просто кастомный линукс под конкретную плату).

Скорее всего за нужные тебе функции отвечает

$ file BoxPlayer/BoxPlayer 
BoxPlayer/BoxPlayer: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.31, stripped

Кроме самого исполнимого файла там же лежит куча либ. Куда и на что смотреть - прямо так сложно сказать. Как я уже написал выше: надо больше инфы чтобы продвинуться дальше.

Кроме распаковки вот этих обновлений прошивок и тыканья в их файлы при помощи file и strings я больше ничего не пытался делать.

im-0
()
Ответ на: комментарий от trashymichael

Если не очень понятно откуда вообще я взял эти файлы и как они могут помочь:

  • Ты выше кинул ссылку на HDPlayer - программу для работы с твоей LED-панелью.
  • После установки в drive_c/Program Files/HDPlayer лежит несколько файлов *.bin.
  • На самом деле они являются архивами *.tar.gz, в которых лежит что-то очень похожее на прошивки/части прошивок/обновления прошивок для похожих LED-панелей.
  • Внутри этих прошивок лежит программа, похожая на программу управления LED-панелью (но это не точно).
  • Её можно засунуть в дизассемблер или декомпилятор чтобы понять что именно и как она делает. Например, как работает парсер пакетов, которые ей отправляет виндовая программа. Но она довольно большая (если учитывать либы).
im-0
()
Ответ на: комментарий от im-0

Эти файлы мало что дают. Девайс по WIFI подключлючаются к общей сети, я могу выбрать режим. Затем эта прога HDPlayer находит девайс с любого компа в сети. Далее я в HDPlayer имею разные варианты, меня интересует только лишь текст. Проблема в том что вместо традиционного «запрос-ответ» там идет постоянный обмен данными (включая UDP) а в самих двух TCP пакетах где уже идут данные о параметрах что я для текста задал, не только лишь XML о параметрах шрифта, но и 50% бинарных данных, постараюсь их доставить, но не уверен что смогу. Гуглинг не дает результата, как и прочие эксперименты.

trashymichael ★★★
() автор топика
Ответ на: комментарий от trashymichael

Мне нужно просто заскриптовать этот вывод текста грубо говоря, без пердолинга с мышью. Никаких инструментов для этого нет. Реверсить протокол неоправдано долго.

trashymichael ★★★
() автор топика
Ответ на: комментарий от trashymichael

Простая подмена данных в XML на актуальные результата не дает (то-есть некий контроль целостности). Все.

trashymichael ★★★
() автор топика
Ответ на: комментарий от trashymichael

Я пробовал LED либу для Python - она не подошла, панель мертвая.

trashymichael ★★★
() автор топика
Ответ на: комментарий от trashymichael

Реверсить протокол неоправдано долго.

Мы всё ещё ждём дамп трафика. А лучше несколько, например два задания одинаковых данных (текста) и одно задание других данных. Чтобы было с чем сравнивать.

im-0
()
Ответ на: комментарий от im-0

Ты выше кинул ссылку на HDPlayer - программу для работы с твоей LED-панелью.

мне нужно из скрипта, не руками

trashymichael ★★★
() автор топика
Ответ на: комментарий от im-0

Это я и сам понимаю, постараюсь завтра доставить

trashymichael ★★★
() автор топика
Ответ на: комментарий от im-0

Я просто не пойму, как можно делать такой софт и не давать средств автоматизации (скриптования)

trashymichael ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.