2016-03-22 64 views
8

Mam starą tablicę LED, do której wysłałeś jakiś tekst i powiesiłeś go gdzieś ... został wyprodukowany w 1994/95 i komunikuje się przez port szeregowy z 16-bitową aplikacją MS-DOS, w której możesz wpisać jakiś tekst.Jak mogę odwrócić ten prosty wyglądający algorytm?

Tak więc, ponieważ prawdopodobnie nie można go uruchomić w dowolnym miejscu, z wyjątkiem korzystania z DOSBox lub podobnych lew, postanowiłem przerobić go w C#.

Po portu monitorowania oryginalny dos-exe Odkryłam, że to naprawdę nie interesuje Cię odbudowy go - wnioski należy odpowiedzieć odpowiednie różnym bajtów, wstępnie wysłane wiadomości „ping”, itp ...

Być może znasz podobną rutynową procedurę/wzór, jak to robi mój dos-exe, lub możesz dać jakieś wskazówki, próbując ją odwrócić ... Dodatkowo, ponieważ znam tylko programowanie i nie spędzałem wiele czasu na metody odwracania i/lub analizowania protokołów, proszę mnie nie osądzać, jeśli ten temat jest trochę głupi. - Cieszę się, że otrzymam pomoc ...

Wiadomość naprawdę zawierająca tekst, który powinien wyświetlane jest 143 bajtów (tylko tak długo, ponieważ stawia bajtów wypełniających jeśli nie wykorzystać całą przestrzeń z tekstu), w tym MSG zauważyłem następujące wzory:

  • Czwarty bajt (który wciąż należy do nagłówka msg) zmienia się z listy 6 lub 7 powtarzających się wartości (w moich przykładach ten bajt zawsze będzie wynosił 0F).

  • Funkcja Ostatnie dwa bajty w kontrolnej

Przykłady:

  • wyświetlany tekst: "123" (Hex "31 32 33") kontrolna hex: "45 52"
  • tekst: "132" ("31 33 32"), suma kontrolna hex: "55 FF"
  • tekst: "122" ("31 32 32"), suma kontrolna w zapisie szesnastkowym: "95 F4"
  • tekst: "133" ("31 33 33") kontrolna Hex "85 59"
  • tekst: "112" ("31 31 32"), kontrolna Hex "C5 -C8"
  • tekst : "124" ("31 32 34"), suma kontrolna w kodzie szesnastkowym: "56 62"
  • tekst: "134" ("31 33 34"), suma kontrolna hex: "96 69"
  • tekst: "211" ("32 31 31") kontrolna Hex "5D 63"
  • tekst: "212" ("32 31 32"), kontrolna Hex "3C A8"
  • tekstu {pusty} kontrolna hex: "DB BA"
  • tekst: "1" ("31"), sprawdź suma hex: „AE 5F”

tej pory jestem całkowicie pewien, że suma kontrolna naprawdę nie zależy na tym czwarty bajt w nagłówku, bo jeśli to się nie zmieni, sumy kontrolne będą zupełnie inaczej na ten sam tekst będzie wystawiany.

Oto przykład pełnego 143 bajtów-string wyświetlania „123”, tylko daje lepszą orientację:

02 86 04 0F 05 03 01 03 01 03 01 03 00 01 03 00 ............... 
00 31 00 32 00 33 00 20 00 20 00 20 00 20 00 20 .1.2.3. . . . . 
00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 . . . . . . . . 
00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 . . . . . . . . 
00 20 00 20 00 20 00 20 00 20 00 FE 03 01 03 01 . . . . . .þ.... 
04 01 03 00 01 03 00 00 20 00 20 00 20 00 20 00 ........ . . . . 
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . . 
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . . 
20 00 20 00 20 00 20 00 20 00 20 00 20 45 52 

(informacja tekst zaczyna się od 2 bajt 2-giej linii " 00 (...)”

Niestety na całym internecie, nie istnieją żadne instrukcje obsługi, dokumentacje, nawet prawdziwy dowód, że ta informacja board-urządzenie kiedykolwiek istniał.

+0

Hmmmm a twoje pytanie jest? Skąd bierze się wartość tego czwartego bajtu? Jakiego rodzaju sumy kontrolnej (lub CRC) używają? –

+1

Google "[algorytm sumy kontrolnej] (https://www.google.ch/search?q=checksum+algorithm)" i "[suma kontrolna online] (https://www.google.ch/search?q=checksum + online) ". Jeśli masz szczęście, znajdziesz ten, który był używany. –

+4

Prawdopodobnie jest to format Motorola S. Pierwszy bajt 02 wskazuje, że dane mają dwa bajty. Zaczęło się w latach siedemdziesiątych od S1 (jeden bajt), potem S2 (dwa bajty) i wreszcie S4 (cztery bajty). Zobacz stronę http://www.amelek.gda.pl/avr/uisp/srecord.htm – jdweng

Odpowiedz

6

Napiszę F (s) dla sumy kontrolnej, którą otrzymasz, gdy karmisz ciągiem s.

Zauważmy, że:

  • F ("122") XOR C ("123") = 95 F4 XOR 45 52 = D0 A6
  • F ("132") XOR C ("133") = 55 FF xor 85 59 = D0 A6
  • F ("123") xor F ("124") = 45 52 xor 56 62 = 13 30
  • F ("133") xor F ("134") = 85 59 xor 96 69 = 13 30

z których wszystkie są zgodne z sumą kontrolną lowing property, które sumy kontrolne nierzadko mają: zmiana danego bitu na wejściu zawsze XORs wyjście z tym samym rzeczą.

Przewiduję, że np. F ("210") = F ("211") xor D0 A6 = 8D C5, i podobnie, że F ("222") = 3C A8 xor C5 C8 xor 95 F4 = 6C 94.

Jeśli jest to prawdą, to poniższy sposób daje brutalny-force-y sposób obliczenia sumy kontrolnej w ogóle, pod warunkiem, że masz czarne pole, które wylicza dla ciebie sumy kontrolne (które najwyraźniej masz):

  • Znajdź sumę kontrolną wejścia, którego wszystkie bity to 0. Wywołanie tej a.
  • Dla każdej pozycji bitowej k znajdź kontrolną wejście którego wszystkie bity mają wartość 0, z wyjątkiem bitu K co 1. Połączenie to XOR b (K).
  • Teraz kontrolna dowolnego wejścia jest XOR każdy b (K) w nieco K jest na wejściu.

Zwykle b (k) będą ściśle ze sobą powiązane - zwykle wzór jest, że karmisz bitów w rejestrze przesuwnym - więc powyższe jest bardziej brute-utwardzana w podwyŜszonej y, niż potrzebujesz, biorąc pod uwagę algorytm. Ale oczekuję, że to zadziała, jeśli jesteś w stanie podać dowolnie wybrane wzorce bitowe jako dane wejściowe.

Jeśli nie, możesz nadal być w stanie to zrobić. Na przykład., załóżmy, że wszystko, co faktycznie wybierzesz, to 29 7-bitowych wartości znaków ASCII, na pozycjach 17,19, ... 73 twojego wejścia. Następnie możesz w pierwszej kolejności podać wszystkie spacje (0x20), a następnie XOR po kolei z 1-bitami w pozycjach 0..6. To nie da ci wszystkich bK88230230936928510(). Ale da ci wystarczająco dużo dla dowolnych wejść znaków 29-ASCII.