Üdv,
Lenne nekünk egy gépünk aminek van egy protokollja, aminek nincs meg a forráskódja,
és most kommunikálni kellene vele egy új szoftverből is, és a checksum-ot kellene
kiszámolnom.
Az alábbiak ismertek :
A checksum úgy keletkezik, hogy a karakterek értékét összeadom és hozzáadok 0xD-t.
pl.:
RDY -> R(0x52) + D(0x44) + Y(0x59) + 0xD = 0xFC ebből lesz 0xFC
SYN -> S(0x53) + Y(0x59) + N(0x4E) + 0xD = 0x107 ebből lesz 0x87
RTD -> R(0x52) + T(0x54) + D(0x44) + 0xD = 0xF7 ebből lesz 0x77
GTD -> G(0x47) + T(0x54) + D(0x44) + 0xD = 0xEC ebből lesz 0xEC
RTY1-> R(0x52) + T(0x54) + Y(0x59) + 1(0x31) + 0xD = 0x13D ebből lesz 0x3D
Ehhez vannak 8 bites regisztereink, meg carry meg overflow meg parity bitjeink.
Szóval aki kedvet érez egy kis fejtörő megoldására az írjon ide pár sort.
Előre is köszönöm mindenkinek.
Update:
Akkor a feladat pontosabb meghatározása.
Adott egy gép ami kommunikál, minden kommunikációs csomagot egy
checksum zár le, ennek a checksumnak a kiszámítása az örök bitmezőkre
távozott, és én azt a feladatot kaptam, hogy írjak egy progit
ami ezzel a géppel kommunikál, eddig minden megvan, csak az a fránya
checksum számító algoritmusom nincs meg. Ezt kell kitalálnom.
És adott az egyszerű összegzéssel kapott checksum pl. RDY esetén
0xFC, csakhogy a gép az RDY üzenet esetén checksumként a 0xFC bájtot
várja, a feladat egy olyan algoritmus amely a checksumból az 'ebből lesz'
értéket előállítja.
A 0xD valóban azért kell, mert ez a termináló karakter a protokollban.
Előre is köszi.
Update: 2 További példák
Ezek kicsit hosszúak, de az algoritmust jobban lehet rajta tesztelni.
SAT11 000007D00032000A00050014000A006400050000A0A0 00 -> 0xB4 kellene, hogy legyen
SAT139 000007D00032000A00050014000A006400050000A0A0 00 -> 0xCF kellene, hogy legyen
SAT135 000007D00032000A00050014000A006400050000A0A0 00 -> 0xCB kellene, hogy legyen
Előre is köszi.
- 5505 megtekintés
Hozzászólások
Számomra nem igazán derült ki, hogy itt mi is a feladat de a 0xD a \n (sorvége, enter) kódja szokott lenni ...
- A hozzászóláshoz be kell jelentkezni
ne sugj! hatha rajon magatol.
- A hozzászóláshoz be kell jelentkezni
A 0x0D az a CR ("\r"), az LF ("\n") az 0x0A.
- A hozzászóláshoz be kell jelentkezni
én itt az "ebből lesz"-et nem értem, ha már tudjuk checksum keletkezését, akkor mi ez a másik szám.
- A hozzászóláshoz be kell jelentkezni
mi a kérdés
- A hozzászóláshoz be kell jelentkezni
az egybetűs függvények működése.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
azok nem függvények te józsi
- A hozzászóláshoz be kell jelentkezni
ezt benéztem
akkor én se tudom.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
modulo 0x100 után ha kapott & 0x10 = 0x10, akkor msb-t invertál
(ha az utolsó el van írva, és 0xBD, akkor ennél egyszerűbb)
- A hozzászóláshoz be kell jelentkezni
Az utolsot osszeadogattam, es nekem is 0x013D jon ki, szoval sima egy byte-os osszeadas.
- A hozzászóláshoz be kell jelentkezni
de a kérdés az, hogyan lett az 'ebből lesz' érték a sima sumokból, erre értettem, hogy ha ott 0x13D->0xBD lenne, egyszerűbb lenne a magyarázat
- A hozzászóláshoz be kell jelentkezni
igen ha az 0xBD lenne, annak én is nagyon örülnék :)
--
"Megtanultam a zenét, de nem csináltam, s azóta tudással, de irigység nélkül hallgatom.
Megtanultam egy sereg tudományt, mesterséget és művészetet, értek hozzájuk, de nem csinálom, s így érdektelenül tudom azokat élvezni. "
Hamvas Béla
- A hozzászóláshoz be kell jelentkezni
Igen, csak nekem az 'ebből lesz' byte-ot kell elküldenem. Amit nem tudok, az az,
hogy milyen aritmetikai műveletek során jön ki az 'ebből lesz' érték.
--
"Megtanultam a zenét, de nem csináltam, s azóta tudással, de irigység nélkül hallgatom.
Megtanultam egy sereg tudományt, mesterséget és művészetet, értek hozzájuk, de nem csinálom, s így érdektelenül tudom azokat élvezni. "
Hamvas Béla
- A hozzászóláshoz be kell jelentkezni
A srác úgy érti, hogy ki kell számolni az
RDY\r checksum-ját.
ami összegzés lenne, de neki 8bites chsum-ot kell számolnia.
R(0x52) + D(0x44) + Y(0x59) + 0xD = ???
A gép szerint ennek a chsum-ja 0xFC és az a kérdés, hogy ez hogyan jön ki neki.
A gép szerint a következő üzenetek chsum-ja
SYN\r = 0x87
RTD\r = 0x77
GTD\r = 0xEC
RTY1\r = 0x3D
A kérdés, hogy ezek az értékek, hogyan jönnek ki a gépnek?
- A hozzászóláshoz be kell jelentkezni
Meg egy par peldat tudnal irni? (minel tobb, annal jobb)
- A hozzászóláshoz be kell jelentkezni
0xfc -> 0xfc
0xf7 -> 0x77
Ha 0x08 == 0, akkor invertálja az msb-t, nem?
- A hozzászóláshoz be kell jelentkezni
kösz, elírtam, a második bitet akartam maszkolni, az bináris 10
de, az is jó, hogy az alsó nibble felső bitje 0
- A hozzászóláshoz be kell jelentkezni
Jah, az is jó.. Az a baj hogy a második nibble-re csak három input érték van.
- A hozzászóláshoz be kell jelentkezni
Ha kommunikálni akarsz vele, akkor nem értem miért neked az "ebből lesz". Te akarsz üzenetet küldeni vagy ellenőrizni, ahhoz ki kell számítani a checksumot, de minek az inverz?
Egyértelmű inverz függvény erre nincs. Mivel egy tetszőleges X értéket úgy is kaphatod, hogy X + 0x00 + 0x00 + 0xFF de úgy is, hogy X + 0xFF + 0x00 + 0xFF stb. Bármelyik checksumra végtelen sok jó megoldás van, amiből lehetett. (Ha korlátos hosszúak az üzenetek, akkor a lehetőségek száma itt is korlátos.)
Legegyszerűbb megoldás a brute force: 8 bites értékekből kipróbálni mind a 255-t nem túl megterhelő. Ennél gyorsabb, ha visszafelé számolsz a checksumból. Az össszeadás inverz művelete a kivonás. Vond ki a checksumból amit biztosan tudsz, hogy benne volt (pl. a \n-t). Ami megmarad, az tetszőleges olyan számok összeadásából keletkezhetett, ami ezt az összeget adja.
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
A gép szerint ezek a checksum-ok
RDY -> R(0x52) + D(0x44) + Y(0x59) + 0xD = 0xFC
SYN -> S(0x53) + Y(0x59) + N(0x4E) + 0xD = 0x87
RTD -> R(0x52) + T(0x54) + D(0x44) + 0xD = 0x77
GTD -> G(0x47) + T(0x54) + D(0x44) + 0xD = 0xEC
RTY1-> R(0x52) + T(0x54) + Y(0x59) + 1(0x31) + 0xD = 0x3D
Ezek 8 bitesek. A kérdés, hogyan jönnek ki ezek az értékek?
- A hozzászóláshoz be kell jelentkezni
csak ennyiből pl így
- A hozzászóláshoz be kell jelentkezni
Mintha a carry alapján addig vonna ki 0x80 -at (128), hogy 8 bites maradjon az összeg.
try it.
Ez milyen device-hoz van amugy?
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
ez az 'RTD' példán bukik meg
- A hozzászóláshoz be kell jelentkezni
rájöttem, ott csak úgy kivonja, de az RTY1-nél meg sima 8bites összeadás van, a carry leszarásával, ott meg 2x kivonás kijön.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
En is erre tippeltem, csak ez a harmadik sornal nem jo :-)
RTD -> R(0x52) + T(0x54) + D(0x44) + 0xD = 0x77
- A hozzászóláshoz be kell jelentkezni
itt is kijön, hogy (RTD\n ==) 0xF7 - 0x80 == 0x77
csak az nem, hogy itt miért vonta ki, mert nem volt túlcsordulás bytehatáron...
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
ha az összegnél (a 0xd-vel együtt) van átvitel másik bájtra, akkor kivonunk 0x80-at, valamint ha az alsó bitje 1, akkor szintén kivonunk 0x80-at?
vagy túl fáradt vagyok.
szerk: ja, ez nem jó :) akkor fáradt vagyok.
----------------------------------
feel the beat - it's everywhere!
- A hozzászóláshoz be kell jelentkezni
akár működhetne is, de elég nehéz elképzelni, hogy eleve modulo összeadás helyett valaki a kevésbé szofisztikált kivonogatással szivatná és korlázotná (pl 'ZZZZZ\n') magát ebben a környezetben
- A hozzászóláshoz be kell jelentkezni
kellene még pár példa
- A hozzászóláshoz be kell jelentkezni
írtam még egy kettőt, de az hosszú.
tesztelek még egy két rövidet.
köszi.
--
"Megtanultam a zenét, de nem csináltam, s azóta tudással, de irigység nélkül hallgatom.
Megtanultam egy sereg tudományt, mesterséget és művészetet, értek hozzájuk, de nem csinálom, s így érdektelenül tudom azokat élvezni. "
Hamvas Béla
- A hozzászóláshoz be kell jelentkezni
SYN //87
RDY //FC
RTD //77
RTY1 //3D
GTD //EC
RST // 86
EOD // 65
SAT01 000007D00032000A00050014000A006400050000A0A0 00 // 33
SAT11 000007D00032000A00050014000A006400050000A0A0 00 // B4
SAT139 000007D00032000A00050014000A006400050000A0A0 00 // CF
SAT135 000007D00032000A00050014000A006400050000A0A0 00 // CB
Plusz minden sor végén a 0x0D amit még hozzá kell adni.
- A hozzászóláshoz be kell jelentkezni
Az nem lehet, hogy hibás kommunikációt figyeltél meg? Ez egy sima modulo 256 checksumnak néz ki, a legtöbb csomagnál stimmel, néha van egy bit eltérés. Leht, hogy ezeknél kommunikációs hiba van.
--
Soli Deo Gloria
- A hozzászóláshoz be kell jelentkezni
Meg jó lenne ismerni a deviceot is.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni