Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

P87C52SFAA i szyfrowana pamięć programu mikrokontrolera

stopi 31 Dec 2008 18:39 3471 14
Computer Controls
  • #1
    stopi
    Level 28  
    Witam! Zczytałem niedawno zawartość mikrokontrolera P87C52SFAA i potrzbuję wgrać tę zawartość programu do drugiego takiego samego, celem naprawy pewnego urządzenia, w którym spalił sie mikrokontroler.

    Wszystko byłoby w porządku gdyby nie fakt, że posiada on takie coś jak enkrypcja (szyfrowanie) pamięci programu. Napisano tam, że jest w nim pamięć programu (8kB), a potem 64-bajtowa macierz enkrypcji, która może być zaprogramowana lub też nie (wtedy zawiera same "1").

    W nocie katalogowej napisano takie coś:

    If the 64 byte encryption table has been programmed, the data
    presented at port 0 will be the exclusive NOR of the program byte
    with one of the encryption bytes. The user will have to know the
    encryption table contents in order to correctly decode the verification
    data. The encryption table itself cannot be read out.

    Czyli wynika z tego, że mogłem zczytać z niego tę "zaszyfrowaną" zawartość (która jest funkcją EX-NOR bajtów programu i bajtów macierzy enkrypcji) a nie właściwe bajty programu? Czy jak wgram to co zczytałem do drugiego to będzie działał?

    Druga sprawa to taka, że jest to wersja OTP. Czyli, jeśli dobrze rozumiem, można go zaprogramować tylko raz? Napisano tam, że tej tablicy enkrypcji nie można odczytać (the encryption table cannot be read out) i że użytkownik powinien znać jej zawartość żeby poprawnie zdekodować zawartość programu.

    Jeśli tylko raz, to fakt jest taki, że gdy wgram nie to co trzeba to już po mikrokontrolerze. Całość robię na programatorze Wellon VP-980. Jest tam właśnie ptaszek i pole wyboru "Encryption", potem "Lock Bit 1" "Lock Bit 2", które można zaznaczać lub odznaczać, gdy wybiorę w nim układ P87C52SFAA.
  • Computer Controls
  • #2
    mirekk36
    Level 42  
    Takie szyfrowanie stosuje się w celu zabezpieczenia przed nielegalnym/nieautoryzowanym kopiowaniem zawartości programu, które właśnie chcesz dokonać. Producenci takich scalaków słusznie wbudowują w nie różne tego typu zabezpieczenia. Jeśli więc nie jesteś autorem programu - a nie jesteś skoro nie znasz tablicy enkrypcji to słusznym jest, że nie powinno ci się to udać. Trza wydać kaskę na zakup nowego zaprogramowanego procka lub urządzenia.
  • #3
    stopi
    Level 28  
    No właśnie. Ale jest szansa zatem, że program nie jest zakodowany?

    Problemem jest to, że takie urządzenie kosztuje 700EUR netto :/ A naprawa sprowadza się do zaprogramowania nowego procka (koszt 90zł) programem ze sprawnego urządzenia, ale coś czuję, że chyba wyjdzie lipa... Czytam jednak, że Wellon ma opcję edycji i programowania tablicy enkrypcji, ale skoro nie jest ona odczytywalna (tak piszą w dokumentacji) , a tylko programowalna, to może spróbować zaprogramować całą tablicę wartościami "0xFF" w tym działającym procku, a potem zczytać program i dostanę program "odkodowany" (bo w tablicy będą same "1").

    Czy to by zdało egzamin?

    Tylko jeszcze nie wiem czy do końca dobrze to rozumiem: po prostu to, co w tej chwili zczytałem to może być program, ale "pomnożony" za pomocą funkcji "EX-NOR" z bajtami tablicy enkrypcji, tak?
  • #4
    asembler
    Level 32  
    Co to za urządzenie? mozesz powiedziec?
  • #5
    MarasK
    Level 18  
    możliwości są dwie - tablica szyfrowania jest używana i to co odczytałeś to jest zaszyfrowany kod maszynowy
    druga - tablica jest nieużywana i odczytałeś dobry kod. Po wgraniu do nowego procka powinien ruszyć (tablica szyfrowania wyłączona - ustawiona cała na 0xFF)

    Liczyłbym bardziej na tą pierwszą opcję - niestety jak powiedzieli koledzy wyżej - zostaje kupić nowy procek od producenta.

    Też się zastanawiam co to za urządzonko :)
  • Computer Controls
  • #6
    stopi
    Level 28  
    To urządzenie to sterownik chłodni samochodowej - Carrier Transicold Integra 20S. Jest trochę tutaj:

    http://www.carier.pl/html/alarmy_integra20s.html

    Niestety wywalić ponad 3500zł na nowy nie jest prosto :/ Cena jest kosmiczna, bo w konstrukcji nic nadzwyczajnego nie ma tak na prawdę. Płytka 15x20cm zawierająca obwody z przekaźnikami, tranzystorami mocy, diodami, układami I2C, a na niej druga mniejsza "piętrowa" zawierającą procek i do całości padzik (podłączany kablem) z paroma przyciskami do włączania, ustawiania temperatury, itp.

    Schematu (ani instrukcji obsługi (!) ) firma nie udostępnia... bo niby po co.. Przecież lepiej naciągnąć klienta na zakup nowego. Na stronie firmy są tylko kody błędów w przypadku awarii. Porażka...

    Dopiero po znalezieniu właściciela drugiego takiego samego sterownika upewniłem się, że to procek (i jeszcze się okazało, że mała pamięć 24C02) są uszkodzone, no ale z nowym prockiem bez programu niewiele zdziałam.

    Wracając do tematu - właśnie sobie uświadomiłem, że ta szyfrująca pamięć 64-bajtów pewnie jest też programowalna tylko 1x (tak jak pamięć programu) więc chyba wykasować ją wartościami 0xFF będzie ciężko.

    Pozostaje mi chyba tylko liczyć na to, że zczytałem właściwy kod, ale z drugiej strony coś mi się średnio chce wierzyć, że taki programator jak Wellon VP-980 sobie z tą enkrypcją nie poradzi...

    A może po prostu prześledzić ten kod bajt po bajcie, rozłożyć go na instrukcje procesora i spróbować odbudować kod programu tak jakby był zapisany w asemblerze, a potem sprawdzić, czy ma on sens
  • #7
    asembler
    Level 32  
    to co napisales na koncu ma tylko sens. jezeli kod programu nie bedzie mial sensu to po kolei mozesz przepuszczac program i znow sprawdzac czy ma sens
    Drugim rozwiazaniem jest podmiana procesora na jakis z pamiecią flash i napisanie wlasnego programu sterującego co niestety bedzie sie wiazalo z duzym wysilkiem czasowy ale nie jest nie do zrobienia. Dodatkowa korzyscia bedzie to ze w przypadku nastepnej awarii bedzie mozna w tani sposob podmienic procesor np atmega162 ma podobna minologie.
  • #8
    stopi
    Level 28  
    Napisanie programu to byłby już hardcore :) Tak na prawdę nie wiem dokładnie czym i jak to ma sterować (co na jakich wyjściach itd). Specjalistą od spraw chłodniczych akurat nie jestem :)

    Na tej płytce są złącza do których idą wiązki z samochodu i przez które procek zapewne monitoruje różne czujniki z auta i steruje (poprzez tranzystory) różnymi innymi rzeczami (jakiś silnik tam jest itd....). Do tego dochodzi sterowanie wyświetlaczem na tym padziku i obsługa przycisków... Masakra..Nie ma nawet skąd wziąć instrukcji, żeby jakiś algorytm działania mieć...

    Myślę jeszcze, żeby zakupić jakiś z procków tej serii w PLCC-44 (tak aby rozkład pinów i portów się zgadzał) ale takim, który jest programowalny wielokrotnie. Na nim można by sprawdzić chociaż, czy ten program pójdzie. Tylko z tego co widzę to...nigdzie nie widzę za bardzo możliwości zakupu takiego w Polsce.
  • #9
    asembler
    Level 32  
    89s53 i niekoniecznie musi byc w obudowie takiej jak podajesz.


    Co do programu to jest do napisania. Podstawowa sprawa ze masz caly blok wykonawczy i wszyskie czujniki. Wyswietlanie i obsluga pada to akurat maly pikus jest. z drugiej strony jezeli bedzie sie pisac program od zera to wcale nie trzeba bedzie dokladnie kopiowac starego. Na przyklad zamiast rozgryzac jakie czujniki temperatury mozna zastosowac wlasne.
    Co do algorytmow to tez mozna jakos wyczaic.
    Innymi slowy to jest do zrobienia kwestia czasu i pieniedzy.
    Program na AVR bedzie mial okolo 5.5kB. a wiec wystarczy Atmega8 a co ilosci wejsc/wyjsc tez powinno wystarczyc no ewentualnie wezmie sie drugą Atmege8 lub mozna przejsc na atmege16, Tam odpada sterowanie koscia pamieci EEPROM poniewaz mamy ja w srodku atmegi.
  • #10
    stopi
    Level 28  
    asembler wrote:
    89s53 i niekoniecznie musi byc w obudowie takiej jak podajesz.


    Co masz na myśli? A jak niby miałbym podłączyć procek w innej obudowie do koszyczka PLCC-44? Na zabawę w łączenie pinów to raczej nie mam czasu. Są przejściówki z PLCC na DIP i inne, ale w odwrotną stronę nie widziałem. Z resztą mniejsza z tym.

    Mam jeszcze pytanko: czy istnieje jakiś darmowy programowy symulator na kompa dla 51' aby sprawdzić co zrobi ten kod, który mam zczytany? Kiedyś jak bawiłem się Bascomem to pamiętam, że coś tam było takiego. Można było sobie zobaczyć symulacje obudowy procka na kompie i sprawdzić stany jakie się na wyjściach pojawią, czyli nie posiadając ani programatora, ani procka, ani układu w którym ma pracować zasymulować pracę napisanego kodu.
  • #11
    Pituś Bajtuś
    Level 28  
    stopi wrote:
    Napisano tam, że tej tablicy enkrypcji nie można odczytać (the encryption table cannot be read out) i że użytkownik powinien znać jej zawartość żeby poprawnie zdekodować zawartość programu.

    Niby nie można jej odczytać, ale w pewnej sytuacji jest to możliwe na podstawie 'zakodowanego' pliku odczytanego z mikrokontrolera. Możesz zamieścić hexa (lub bina) z progamem?
  • #12
    stopi
    Level 28  
    Proszę bardzo. Oto i plik, który zczytałem z mikrokontrolera. Wszystko się zgadza z jego parametrami, czyli ma rozmiar 8192B czyli 8kB.
  • #13
    olekewaagata
    Level 25  
    Witam w nowym roku
    Program który zaprezentowałeś jest zakodowany.
    Nie masz żadnych szans na jego rozkodowanie.
    Program wczytałem do symulatora i nie mam co do tego żadnych wątpliwości
  • #14
    stopi
    Level 28  
    Kurde. Lipa na maksa. Firma w odpowiedzi na zapytanie co do dostępności zaprogramowanego procka lub programu napisała:

    "Are You trying to replace or re-program microcontroller?"

    I tyle się "widziałem" z firmą.... Potem zero odpowiedzi.

    Dodano po 2 [godziny] 16 [minuty]:

    Haha! Udało się! :) Zaryzykowałem i zaprogramowałem w ciemno procek, tym wsadem, który zczytałem z drugiego urządzenia i... działa!! :D
    Muszę przyznać, że serducho mi biło jak talala, gdy po zaprogramowaniu włożyłem go, żeby sprawdzić czy zadziała (fakt faktem, jest to wersja OTP i to jeszcze za prawie stówke, więc jakby się nie udało to lipa na maksa).

    Jednak coś ten symulator nie ten teges jest, bo program działa, czyli wniosek taki, że tablica szyfrująca nie była zaprogramowana w tym pierwszym procku.
  • #15
    Pituś Bajtuś
    Level 28  
    Gdyby program był zaszyfrowany, to na końcu nie było by ciągu bajtów o wartości FF. Pozatym pierwszą instrukcją jest SJMP.