2012-09-15 6 views
5

Potrzebuję inżynierii wstecznej algorytm CRC/suma kontrolna zaimplementowana przez plik wykonywalny systemu Windows CE. Będąc protokołem właściwości, nie mówi nic o algorytmie CRC/sumy kontrolnej. Istnieje jednak interfejs konsoli, który donosi poprawić/obliczoną sumę kontrolną i mogę budować własne wiadomości z losowych bitów jeśli protokół wiadomość jest poprawna:Metody utrwalania algorytmu 16-bitowego CRC/sumy kontrolnej używanego w pliku wykonywalnym Windows CE?

Zauważyłem, że

  • Zmiana pojedynczego bitu zmiany wiadomości Całkowite bajty sumy kontrolnej.

  • Algorytm wydaje się być zależny od położenia, ponieważ podałem kilka pojedynczych 1-bitowych komunikatów w różnych pozycjach danych komunikatów z resztą bitów zero i przez cały czas konsola zgłosiła inną sumę kontrolną. Jeśli byłaby to prosta suma kontrolna dodatków, suma kontrolna byłaby identyczna.

Zgłosiłem wspólnego XOR, LRC, dodatku algorytmy sumy kontrolnej, wspólne wielomiany CRC (Standerd, CCITT, X-modem) i przeszedł [CRC reverse engineering esej] [2], ale niestety nie mogę przejść obok wydedukowania wielomian, ponieważ typ komunikatu jest poprawiony, więc nie można utworzyć pojedynczego 1-bitowego komunikatu.

Moje pytania:

  1. Czy istnieją jakieś algorytm CRC Właściwości/suma kontrolna że mogę przetestować przed komunikatów do określenia, czy algorytm jest suma kontrolna CRC lub wielomian opiera?

  2. Czy istnieje sposób na powiązanie komunikatu o błędzie widocznego podczas demontażu programu z instrukcjami montażu Corrosponding?

  3. Jakie są sposoby debugowania/lokalizowania kodu demontażu w momencie, gdy zgłasza poprawną sumę kontrolną na konsoli? Zrzut pamięci czy coś takiego?

+0

powinno być oznaczone [reverse-engineering], a także, jak sądzę. – moooeeeep

+0

Zastąpiony „algorytmem” tag „reverse-engineering” –

Odpowiedz

4

Wypróbuj CRC RevEng. Niektóre szybkie próby z twoimi danymi były bezowocne, ale nie próbowałem bardzo mocno. Rozważ próbowanie nie tylko wszystkich dziesięciu bajtów wiadomości, ale także ostatnich ośmiu i ostatnich sześciu.

Ponadto można znaleźć na tej samej stronie most comprehensive list of known CRCs, że jestem świadomy.

Aktualizacja:

Jest wysoce prawdopodobne, że jest to pewnego rodzaju CRC albo przynajmniej liniowa praca nad GF (2). Ma tę właściwość, którą posiadają CRC: jeśli dwie sekwencje mają taką samą wyłączność - lub, to ich CRC mają również te same wyłączności. Na przykład z danych (upuszczenie wspólny prefiks, choć należy zauważyć, że w tym prefiksu lub jego część nie zmienia wynik):

00000000000122b5^0000000000022421 = 0000000000030694 
0447080a300130A1^0447080a30023635 = 0000000000030694 

i

0447080a300130A1^0447080a30043A36 = 0000000000050a97 
00000000000122b5^0000000000042822 = 0000000000050a97 

Biorąc pod uwagę ten fakt, że to sposób na zbudowanie procedury obliczania wartości kontrolnej bez określania, czy jest to CRC, czy parametry CRC.

Generowanie 16-bitowej wartości kontrolnej dla wszystkich wiadomości jednobitowych, tj.pojedynczy bit ustawiony w sześciu bajtach danych komunikatu, z resztą danych bitów danych zero. Komunikaty te są kompletnym zbiorem wektorów bazowych dla tego pola liniowego. Jest ich 48. Wygeneruj także wartości kontrolne dla całego komunikatu zerowego. Masz już zaczynają się, że ze wszystkimi zerami dając 2020, ostatni zestaw nieco dając 22b5 itp Exclusive-lub wartości wyboru dla wszystkich zer (2020) z każdym innym. Masz teraz 49 wartości, z których 48 jest dla wektorów bazowych, a jedna jest poprawką dla wektora zerowego (która jest niezerowa prawdopodobnie z powodu kondycjonowania przed i po CRC i bajtów prefiksów). Na przykład wartość wektora bazowego z ostatnio ustawionym bitem to 0295.

Teraz można korzystać z tych wartości od 49 do obliczenia wartości wyboru dowolnej wiadomości sześciu bajtów. Ekskluzywne - lub razem wartości wszystkich odpowiednich bitów, które są ustawione na jeden w tym komunikacie. Wyłącznie - lub z wartością kontrolną równą zero. Wynik będzie wartością kontrolną dla tej wiadomości.

+0

Potrzebuję pomocy następujących ostatniego paragrafu, Czy należy opracować, Czy muszę zachować tabelę przeglądową wartości kontrolnych przez pozycji bitowej? Oto wektor podstawowy dla pierwszych 5 wiadomości w checksum.txt; Ostatni zestaw bitów, drugi zestaw bitów i tak dalej ... (1): 2020^22b5 = 0295 (2): 2020^2421 = 0401 (3): 2020^2822 = 0802 (4): 2020^3024 = 1004 (5): 2020^0028 = 2008 –

+0

Tak. Potrzebujesz tabeli 48 wartości kontrolnych, po jednej dla każdej pozycji bitu. Gdy wyłączasz - lub razem wpisy w tej tabeli, które odpowiadają 1 bitowi w komunikacie, robisz jeszcze jedno wyłączne - lub z 0x2020 dla odpowiedzi. –

Powiązane problemy