Goto page 1, 2 Next
kwia-Tec
Guest
Thu Nov 30, 2006 8:50 pm
Witam wszystkich grupowiczow.
Mam pewien problem. Komputer porozumiewa sie z maszyna za pomoca zlacza rs.
Komenda sklada sie z paczki 12 bajtow, z czego 2 ostatnie sa dla mnie
zupelnie nie zrozumiale. prawdopodobnie jest to CRC-16 lubo cos podobnego.
Chcialbym sie dowiadziec jak to wyliczyc, poniewaz moje zadanie polega na
zasymulowaniu oryginalnego programu. Jezeli zmieni sie jakikolwiek bit w
sygnale - maszyna nie odpowiada.
Ponizej podaje kilka przykladow takiego sygnalu.
00 01 10 00 00 00 00 00 00 00 A1 65
00 01 11 00 00 00 00 00 00 00 C4 55
00 01 12 00 00 00 00 00 00 00 6B 05
00 01 12 01 00 00 00 00 00 00 EB 65
00 01 12 02 00 00 00 00 00 00 0E C5
00 01 12 0A 00 00 00 00 00 00 FF B8
00 01 12 00 00 01 00 00 00 00 4B AE
00 01 12 00 00 01 00 00 00 00 4B AE
00 01 12 00 00 02 00 00 00 00 2B 78
00 01 12 00 00 0A 00 00 00 00 4E A7
00 01 12 0A 00 0A 00 00 00 00 DA 1A
00 01 12 B4 00 F0 00 00 00 00 53 18
Prosze o pomoc w jaki sposob mozna dojsc do tego jak wyliczyc ostatnie 2
bajty.
W ww przykladach moge zmieniac 4, 5, 6 i 7 bajt sygnalu. Moge jeszcze
podac inne przyklady, w ktorych wartosci sa juz z gory narzucone przez
wymogi maszyny.
00 01 22 14 BF 04 00 00 00 00 D4 8D
00 01 67 14 BF 04 00 00 00 00 89 A2
01 00 00 22 00 00 00 00 00 00 FF 13
01 00 71 22 92 00 00 00 00 04 41 0F
00 01 21 29 5F 02 00 00 00 00 D6 5F
00 01 67 29 5F 02 00 00 00 00 24 20
01 00 00 21 00 00 00 00 00 00 1A B3
01 00 02 21 00 BE 04 00 00 00 65 C4
00 01 22 29 5F 02 00 00 00 00 79 0F
00 01 67 29 5F 02 00 00 00 00 24 20
01 00 00 22 00 00 00 00 00 00 FF 13
01 00 71 22 92 00 00 00 00 04 41 0F
00 01 21 29 77 00 00 00 00 00 DB 4D
00 01 67 29 77 00 00 00 00 00 29 32
01 00 00 21 00 00 00 00 00 00 1A B3
01 00 02 21 00 EE 00 00 00 00 68 8C
Z gory dziekuja za pomoc
pozdrawiam
kwia-Tec
projekt
Guest
Thu Nov 30, 2006 9:50 pm
Quote:
Mam pewien problem. Komputer porozumiewa sie z maszyna za pomoca zlacza
rs.
Komenda sklada sie z paczki 12 bajtow, z czego 2 ostatnie sa dla mnie
zupelnie nie zrozumiale. prawdopodobnie jest to CRC-16 lubo cos podobnego.
Chcialbym sie dowiadziec jak to wyliczyc, poniewaz moje zadanie polega na
zasymulowaniu oryginalnego programu. Jezeli zmieni sie jakikolwiek bit w
sygnale - maszyna nie odpowiada.
Prawdopodobnie nie jest to crc16 lecz jakia suma kontrolna obliczana innym
sposobem, albo tez przy liczeniu sumy nie sa uwzgledniane wszystkie bajty
ciagu.
Jesli jest to zabezpieczenie (a rozumiem, ze jest) to bedzie ci ciezko
zgadnac jakiego algorytmu uzyl tworca urzadzenia. Najlatwiej w takiej
sytuacji uzyc metody bruteforce i dla wszystkich interesujacych cie ciagow
obliczyc sumy (sprawdzic kombinacje z zakresu 0000-FFFF, ktoras musi
pasowac) i zapisac je w tablicy.
Jesli chcesz poczytac o crc16 to to sa linki (google twoim przyjacielem):
http://www.tkdami.net/~roman72/pdf/dtr/dtr_sum_ctrl.pdf
http://www.maxim-ic.com/an27
a tu sa programy do liczenia crc16 (miedzy innymi):
http://www.lammertbies.nl/comm/info/crc-calculation.html
http://www.ustr.net/files/crc16.exe
Pozdrowka.
/PM
kwia-Tec
Guest
Fri Dec 01, 2006 6:57 am
Użytkownik projekt <xxx@xxx.pl> w wiadomości do grup dyskusyjnych
napisał:ekng84$sek$1@nemesis.news.tpi.pl...
Quote:
Jesli jest to zabezpieczenie (a rozumiem, ze jest) to bedzie ci ciezko
zgadnac jakiego algorytmu uzyl tworca urzadzenia.
Tez tak na poczatku myslalem, ale stwierdzilem, ze po co ktos mialby wymyslc
nowy algorytm, skoro jest tyle gotowcow. Wydaje mi sie, je jest to tylko
zabezpieczenie transmisji, zeby maszsyna nie wykonala jakiegos glupstwa przy
bledzie transmisji.
Quote:
Najlatwiej w takiej
sytuacji uzyc metody bruteforce i dla wszystkich interesujacych cie ciagow
obliczyc sumy (sprawdzic kombinacje z zakresu 0000-FFFF, ktoras musi
pasowac) i zapisac je w tablicy.
Wg mnie to chyba nie bedzie suma, poniewaz przy minimalnyej zmianie jednego
z bajtow, wynik zmienia sie diametralnie.
Ale, czy noglbys jeszcze raz lopatologicznie wyjasnic sumy czego mam
obliczyc? Bo chyba uzyles jakiegos skrotu myslowegi i nie zaskoczylem
Bede probowal wszystkich mozliwosci.
Quote:
Na temat crc juz troszke czytalem, ale wlasnie nie pasowaly mi wyniki, wiec
pomyslalem, ze zapytam fachowcow co to moze byc.
pozdrawiam
kwia-Tec
kwia-Tec
Guest
Fri Dec 01, 2006 6:59 am
Jezeli ktos mam jakiekolwiek pomysly, jak to rozwiklac , bede wdzieczny za
pomoc :)
Z gory dziekuje i pozdrawiam
kwia-Tec
J.F.
Guest
Fri Dec 01, 2006 10:06 am
On Fri, 1 Dec 2006 06:59:53 +0100, kwia-Tec wrote:
Quote:
Jezeli ktos mam jakiekolwiek pomysly, jak to rozwiklac , bede wdzieczny za
pomoc
Zaczales dobrze - trzeba analizowac dane rozniace sie jednym bitem.
Mnie to wyglada faktycznie na CRC. Przydaloby sie zaczac
od samych zer i potem dodawac skrajne jedynki - na poczatek namierzyc
od ktorej strony bajtu bity sa wprowadzane i jak wyprowadzane -
bo na razie to mamy za duzo mozliwosci.
I zobacz jeszcze czy twoja funkcja jest xorowalna, tzn
f(03) = f(00) xor f(01) xor f(02)
I podobnie dla kombinacji bitow na innych pozycjach
Moze wystarczy ci tablica sum kontrolnych dla poszczegolnych bitow
danych, potem tylko xorujesz odpowiednie.
Bo namierzenie wielomianiu CRC i wartosci poczatkowej moze byc
klopotliwe.
J.
neuron
Guest
Fri Dec 01, 2006 12:05 pm
Quote:
Tez tak na poczatku myslalem, ale stwierdzilem, ze po co ktos mialby
wymyslc
nowy algorytm, skoro jest tyle gotowcow. Wydaje mi sie, je jest to tylko
zabezpieczenie transmisji, zeby maszsyna nie wykonala jakiegos glupstwa
przy
bledzie transmisji.
A od drugiej strony ? Z czym sie laczysz ? Wiem z maszyną, ale chyba nie z
pompa hydrauliczna tylko ze sterownikiem. Jakim?
A co do algorytmu transmisji - tu tez moze byc roznie - crc 8 i crc 16
oieraja sie na tblicach danych co w czasie kiedy procesor mial do dyspozycji
2k na program mialo znaczenie - choc wtedy po co 2 bajty sumy. Moze tez byc
tak jak w moim golemie - suma kontrolna ma dwie funkcje - kontrole
poprawnosci i zabezpieczenie programu - koncentrator jest jednoczesnie
kluczem dla programu. choc ja mam jeszcze szyfrowanie transmisji i sygnatury
wogole nie sciagnisz.
Mozliwy jest jeszcze jeden trik - moze to byc suma crc8 lub suma xor -
pierwszy bajt i powtorzenie tego bajtu dla wtornej kontroli
np [suma], [ nx xor suma] albo [suma], [(not suma) xor nx ] itd itp
Sprawdz tez sume crc16 dla zakresu
00 01 [12 00 00 00 00 00 00 00] 6B 05 00 01 [12 00 00 00 00 00 00] 00 6B
05
bo moze byc tak ze ktos umyslil sobie ze ma ramke [start] [dane] [stop]
[suma] a suma jest tylko z danych
pozdrawiam wojtek
www.neuron.com.pl
CMMS Maszyna
Golem OEE
Produkt - Baza Wiedzy
Pawel \"O'Pajak\"
Guest
Fri Dec 01, 2006 11:50 pm
Powitanko,
Quote:
Wg mnie to chyba nie bedzie suma, poniewaz przy minimalnyej zmianie jednego
z bajtow, wynik zmienia sie diametralnie.
I tak powinno byc
Quote:
Na temat crc juz troszke czytalem, ale wlasnie nie pasowaly mi wyniki, wiec
pomyslalem, ze zapytam fachowcow co to moze byc.
Dorzuce jeszcze pare sznurkow:
http://www.lammertbies.nl/comm/info/crc-calculation.html?crc=ff0510&method=hex
http://www.zorc.breitbandkatze.de/crc.html
Ktorys z tych 2 liczyl dobrze crc16. Jak kiedys rozpracowywalem temat,
to tych crc jest od groma, nawet AFAIR crc16 sa 2 rodzaje i inaczej sie
je liczy. Pozostaje podstawiac do kalkulatorow i sprawdzac.
Pozdroofka,
Pawel Chorzempa
--
"-Tato, po czym poznać małą szkodliwość społeczną?
-Po wielkiej szkodzie prywatnej" (kopyrajt: S. Mrożek)
******* >>> !!! UWAGA: ODPOWIADAM TYLKO NA MAILE ->:
> pavel(ten_smieszny_znaczek)klub.chip.pl <<<<*******
J.F.
Guest
Sat Dec 02, 2006 12:45 am
On Fri, 01 Dec 2006 23:50:08 +0100, Pawel "O'Pajak" wrote:
Quote:
Powitanko,
Wg mnie to chyba nie bedzie suma, poniewaz przy minimalnyej zmianie jednego
z bajtow, wynik zmienia sie diametralnie.
I tak powinno byc
A w dodatku nie "diametralnie" tylko o kilka bitow - i tak ma byc :-)
Quote:
http://en.wikipedia.org/wiki/Cyclic_redundancy_check
Przy czym cala masa innych wielomianow tez moze byc uzyta.
J.
lwh
Guest
Sat Dec 02, 2006 3:03 pm
Użytkownik "kwia-Tec" <Krzys@spam.wsieci.net> napisał w wiadomości
news:ekog81$m83$1@node4.news.atman.pl...
Quote:
Tez tak na poczatku myslalem, ale stwierdzilem, ze po co ktos mialby
wymyslc
nowy algorytm, skoro jest tyle gotowcow.
Po to , by utrudnić życie "oglądaczom" ?
kwia-Tec
Guest
Sat Dec 02, 2006 8:51 pm
Chyba dam sobie spokoj... zapisze sobie wszystkie potrzebne komendy do
tablicy i juz. W sumie to nie jest ich tak duzo... tylko 384 :)
Dzieki za checi i zainteresowanie.
pozdrawiam
kwia-Tec
Arkadiusz Kaczmarek
Guest
Sat Dec 02, 2006 11:15 pm
kwia-Tec wrote:
Quote:
Witam wszystkich grupowiczow.
Mam pewien problem. Komputer porozumiewa sie z maszyna za pomoca
zlacza rs. Komenda sklada sie z paczki 12 bajtow, z czego 2 ostatnie
sa dla mnie zupelnie nie zrozumiale. prawdopodobnie jest to CRC-16
lubo cos podobnego. Chcialbym sie dowiadziec jak to wyliczyc,
poniewaz moje zadanie polega na zasymulowaniu oryginalnego programu.
Jezeli zmieni sie jakikolwiek bit w sygnale - maszyna nie odpowiada.
Ponizej podaje kilka przykladow takiego sygnalu.
Nie podałeś najważniejszego - jaki procek odbiera te dane
Większość możliwości można wykluczyć na tej podstawie.
Wiadomo przecież, że nikt nie zaimplementuje jakiegoś "chorego" algorytmu w
20C51.
J.F.
Guest
Sun Dec 03, 2006 9:30 am
On Sat, 2 Dec 2006 23:15:30 +0100, Arkadiusz Kaczmarek wrote:
Quote:
Nie podałeś najważniejszego - jaki procek odbiera te dane
Większość możliwości można wykluczyć na tej podstawie.
Wiadomo przecież, że nikt nie zaimplementuje jakiegoś "chorego" algorytmu w
20C51.
Akurat crc na '51 bardzo prosto sie robi. Moze nawet prosciej niz na
innych - choc dluzej.
J.
projekt
Guest
Sun Dec 03, 2006 2:39 pm
Quote:
Chyba dam sobie spokoj... zapisze sobie wszystkie potrzebne komendy do
tablicy i juz. W sumie to nie jest ich tak duzo... tylko 384
O tym wlasnie mowilem w pierwszym poscie
/PM
projekt
Guest
Sun Dec 03, 2006 2:55 pm
Quote:
Ale, czy noglbys jeszcze raz lopatologicznie wyjasnic sumy czego mam
obliczyc? Bo chyba uzyles jakiegos skrotu myslowegi i nie zaskoczylem
Bede probowal wszystkich mozliwosci.
Powiedzmy, ze wysylasz do urzadzenia taki ciag:
00 01 10 00 00 00 00 00 00 00 [XX] [XX]
ale nie wiesz jaka wartosc powinny miec ostatnie 2 bajty, czyli [XX][XX]
W takim razie podstawiasz za [XX][XX] wszyskie kombinacje od [00][00] do
[FF][FF] (szesnastkowo)
Ciag zakonczony ktoras z tych kombinacji zostanie zaakceptowany i ta
koncowke zapisujesz sobie w tablicy. Sumy w tablicy trzeba oczywiscie jakos
zaindeksowac. Aby tablica byla jak najmniejsza, mozesz robic zwykle crc8 lub
crc16 dla kazdego ciagu ktory sprawdzasz, w tym wypadku dla ciagu 00 01 10
00 00 00 00 00 00 00 obliczasz crc16 (np) i to bedzie indeks. Do tego
indeksu bedzie przypisana wlasciwa koncowka [XX][XX] ktora wczesniej
"znalazles". Tablice wystarczy posortowac wedlug indeksow (np od
najmniejszego do najwiekszego).
Teraz jesli wysylasz do swojego urzadzenia jakis ciag i nie znasz koncowki,
to robisz po kolei:
1.obliczasz dla niego zwykle crc16
2.dla tego obliczonego crc16 szukasz w tablicy odpowiedniej koncowki.
3.uzupelniony ciag mozesz wyslac do urzadzenia.
Pozdrawiam.
/PM
Gregor
Guest
Sun Dec 03, 2006 3:16 pm
"kwia-Tec" napisal:
Quote:
Tez tak na poczatku myslalem, ale stwierdzilem, ze po co ktos mialby wymyslc
nowy algorytm, skoro jest tyle gotowcow. Wydaje mi sie, je jest to tylko
zabezpieczenie transmisji, zeby maszsyna nie wykonala jakiegos glupstwa przy
bledzie transmisji.
Np. dlatego że nie potrafi zaimplementować CRC albo chce utrudnić życie komuś
takiemu jak ty :)
Quote:
Na temat crc juz troszke czytalem, ale wlasnie nie pasowaly mi wyniki, wiec
pomyslalem, ze zapytam fachowcow co to moze byc.
Zawsze możliwe że autor oryginału walnął się w implementacji - np. mnie się
coś takiego przytrafiło - liczyłem crc32 z niewłaściwym endianem, wszystko
było w porządku dopóki maszynki gadały tylko z "rodziną", aż któregoś dnia
dołączono do systemu urządzenie innej firmy... ale był obciach.
GRG
Goto page 1, 2 Next