Reverzní zjištění struktury protokolu

Reverzní zjištění struktury protokolu
« kdy: 29. 05. 2020, 17:55:22 »
Ahoj,

mám jedno průmyslové zařízení od Danfossu, které umí posílat chybové stavy na určenou adresu, kde běží jejich software, Potřebuji tento software nahradit vlastním, protože mu schází potřebná funkčnost.

Přes wireshark jsem si odposlechl komunikaci, které nevypadá složitě a zřejmě budu podle toho schopný vytvořit vlastní aplikaci, která data příjme. Každopádně podobnou věc dělám prvně a tak pokud by někdo pomohl radou, jak co nejlépe identifikovat strukturu těch dat, dost by mi to pomohlo.

Příklad komunikace je zde: https://pastebin.com/LTtetm6N
Delší data jsou od zařízení a počítač potvrzuje vždy příjem. Jde mi o to získávat textové části.

Co mi není moc jasné, proč je každý znak oddělený 0x00 hodnotou. Samozřejmě se toho dá zbavit, ale přijde mi divné, že by takovou strukturu dat volil Danfoss jen tak z rozmaru, takže spíše bych to tipoval na nějakou strukturu, která se běžně používá, každopádně nemám zkušenosti, tak to nejsem schopný rozklíčovat.

Děkuji za případné postřehy / rady.



Re:Reverzní zjištění struktury protokolu
« Odpověď #1 kdy: 29. 05. 2020, 18:10:38 »
Co mi není moc jasné, proč je každý znak oddělený 0x00 hodnotou. Samozřejmě se toho dá zbavit, ale přijde mi divné, že by takovou strukturu dat volil Danfoss jen tak z rozmaru, takže spíše bych to tipoval na nějakou strukturu, která se běžně používá, každopádně nemám zkušenosti, tak to nejsem schopný rozklíčovat.
To bude dvoubajtové uložení znaků, nejspíš nějaké kódování Unicode – buď UTF-16 nebo UCS-2.

RDa

  • *****
  • 2 935
    • Zobrazit profil
    • E-mail
Re:Reverzní zjištění struktury protokolu
« Odpověď #2 kdy: 29. 05. 2020, 21:17:30 »
A to je nejaky custom protokol? Nebo standardni BACnet ? :-)
Pak je mozne, ze na to existuji libky.. a neni treba vynalezat kolo a resit neocekavane stavy.

Re:Reverzní zjištění struktury protokolu
« Odpověď #3 kdy: 29. 05. 2020, 21:57:19 »
Bohužel to vypadá, že to bude přímo jejich protokol. Už se mi podařilo ty zrávy nasimulovat, že ji ten jejich software přijal. Takže ještě tozprovoznit naopak a snad to nějak půjde.

alex6bbc

  • *****
  • 1 753
    • Zobrazit profil
    • E-mail
Re:Reverzní zjištění struktury protokolu
« Odpověď #4 kdy: 29. 05. 2020, 22:26:27 »
kdybych si vzpomel jak se jmenoval ten uzitecny program, do ktereho se nalila hromada bajtu mysi jsi klikal na vybrany offset a nasledujici bajty se zobrazily jako string, uint8, int8, uint16,int16, float, double v obou endianitach, dokonce to umelo i unixtime a podobne datove typy, takze clovek postupne prosel vsechny offsety a zaroven videl ruzne reprezentace a mohl dojit ke strukture.

nekdy je to slozite, ze se cisla double zapisuji treba jako int, long a musi se vydelit nejakou konstantou.
tam uz je treba trochu znat o jaka data se muze jednat, treba stringy, gps data, atd. takze dost jde i o zkusenost.
poprve jsem taky neveril, ze to rozlousknu a dnes uz i od oka dokazu odhadnout co to muze byt za datovy typ.


_Jenda

  • *****
  • 1 624
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Reverzní zjištění struktury protokolu
« Odpověď #5 kdy: 30. 05. 2020, 00:53:54 »
kdybych si vzpomel jak se jmenoval ten uzitecny program, do ktereho se nalila hromada bajtu mysi jsi klikal na vybrany offset a nasledujici bajty se zobrazily jako string, uint8, int8, uint16,int16, float, double v obou endianitach, dokonce to umelo i unixtime a podobne datove typy, takze clovek postupne prosel vsechny offsety a zaroven videl ruzne reprezentace a mohl dojit ke strukture.
okteta a zmáčknout Tools → Decoding table.