logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zmodyfikować wsad do uC? C8051F340.

seg 14 Lis 2022 22:34 609 17
REKLAMA
  • #1 20285235
    seg
    Poziom 13  
    Czym zmodyfikować wsad do uC jak w tytule, aby urządzenie zapracowało po jego wgraniu. Wsad, który posiadam nie jest plikiem oryginalnie wgrywanym przez producenta, a jedynie aktualizacją. Po załadowaniu tego "aktualizacyjnego" hex'a np do MiniPro widzę, że do adresu 0x2000 mam FF, potem właściwy program. Wniosek z tego taki, że soft wgrywany fabrycznie przez producenta posiada bootloader "na początku" programu. Czym i jak (i czy to ma sens) zmodyfikować hex'a bez bootloadera - nie wiem przesunąć go do adresu "zero" - aby to zadziałało? Czy to ma sens? Rozumiem, że tracę w takim wypadku opcję aktualizacji przez USB, ale czy to w ogóle ma rację bytu?
  • REKLAMA
  • #2 20285249
    excray
    Poziom 41  
    A jesteś pewien, że ten wsad nie jest zaszyfrowany?
  • #3 20285255
    seg
    Poziom 13  
    Posiada rozszerzenie hex i po "zaciągnięciu" go do MiniPro (pomimo, że soft nie obsługuje tego procka) to typowy Intel hex. To samo po otwarciu w notatniku.
  • REKLAMA
  • #4 20285259
    excray
    Poziom 41  
    Tak, ale chodzi mi o to, że dane w tym hexie mogą być zaszyfrowane - bootloader sobie je rozszyfrowuje i dopiero wtedy wgrywa je do flash. Zazwyczaj bootloadery w sprzęcie komercyjnym szyfrują przesyłane dane. Jako plik to będzie oczywiście hex, ale dane wgrane bezpośrednio do pamięci będą bezużyteczne.
  • #5 20285264
    seg
    Poziom 13  
    Mam powody aby twierdzić, że nie jest zaszyfrowany.

    Dodano po 7 [minuty]:

    Czym mogę przesunąć "origin" do adresu ZERO, aby to dalej był zgodny z intelowskim hex?
  • REKLAMA
  • #6 20285312
    excray
    Poziom 41  
    Zazwyczaj programatory mają wbudowane narzędzia do edycji hexów. Nie znam MiniPro, ja używam Wellona i dedykowanego oprogramowania i tam jest taka opcja. W ostateczności możesz sobie wgrać oprogramowanie do Wellona, uruchomić w trybie demo i tam obrobić plik.
  • #7 20285319
    seg
    Poziom 13  
    Tak, ale jak to fizycznie zrobić? Skopiować pożądany fragment i wkleić go od adresu 0x00 oraz zapisać jako hex? A co z wielkością pamięci danego procka? Czy hex ma to gdziś zaszyte? Przypominan, że MiniPro nie obsługuje tego modelu, którego dotyczy wątek. Używam tego oprogramowania tylko do podglądu.

    Dodano po 55 [sekundy]:

    Czy Twoim zdaniem takie przeniesienie interesującej partii kodu ma sens w ogóle? Czy to ma prawo zadziałać?
  • #8 20285333
    excray
    Poziom 41  
    seg napisał:
    Tak, ale jak to fizycznie zrobić? Skopiować pożądany fragment i wkleić go od adresu 0x00 oraz zapisać jako hex?

    Tak - tak to wygląda w Wellonie.
    seg napisał:
    A co z wielkością pamięci danego procka? Czy hex ma to gdzieś zaszyte?

    Intel Hex ma zaszyte adresy i sumy kontrolne w swojej strukturze dlatego do przesunięcia należy użyć odpowiedniego programowania które to umiejętnie przesunie - to o czym pisałem w poprzednim poście:
    https://pl.wikipedia.org/wiki/Intel_Hex
    seg napisał:
    Czy Twoim zdaniem takie przeniesienie interesującej partii kodu ma sens w ogóle? Czy to ma prawo zadziałać?

    Ciężko powiedzieć. Jeśli kod był pisany relatywnie to tak, jeśli były odwołania do konkretnych adresów (wielce prawdopodobne) to po przesunięciu program skoczy w jakieś śmieci. Wydaje mi się, że lepiej będzie go po prostu wgrać tak jak go teraz otrzymałeś. Kod 0xFF to jest MOV R7,A jednobajtowy więc cpu sobie spokojnie przeklika się aż do adresu 0x2000 gdzie trafi na właściwy kod.
  • #9 20285338
    seg
    Poziom 13  
    excray napisał:
    Wydaje mi się, że lepiej będzie go po prostu wgrać tak jak go teraz otrzymałeś. Kod 0xFF to jest MOV R7,A jednobajtowy więc cpu sobie spokojnie przeklika się aż do adresu 0x2000 gdzie trafi na właściwy kod.

    Niestety, nie działa.
  • REKLAMA
  • #10 20285339
    excray
    Poziom 41  
    Więc prawdopodobnie jest zaszyfrowany. Możesz go tutaj wrzucić?
  • #11 20285340
    seg
    Poziom 13  
    No raczej nie - mam oryginalne urządzenie i kod zaczyna sie i kończy podobnymi danymi, więc biorąc pod uwagę fakt, że jest nowszy niż w moim urządzeniu (bo jest aktualizacją) jest tym samym kodem.

    Zapytasz - to dlaczego idioto nie skopiujesz kodu do nowego procka? :) No cóż soft do obsługi tych procków zapisuje kod wyssany z procka w formie pliku txt. W miejsce bootloadera zaś wskakują ZERA. To tak jakby bootloader był zabezpieczony przed odczytem. Chyba, że źle myslę.
  • #12 20285349
    excray
    Poziom 41  
    Szczerze, to nie bardzo rozumiem jak to wygląda. A jest opcja abyś wrzucił tutaj tego hexa? Po samej strukturze danych czasami można stwierdzić czy mają one sens.

    Dodano po 10 [minuty]:

    To co mi podesłałeś nie wygląda jak prawidłowy kod. Na mój gust są to ewidentnie zaszyfrowane dane. HEXy do '51 są dość charakterystyczne - na początku jest lista wektorów przerwań, która wygląda dość specyficznie, czego nie widać w Twoich danych. Pliki się nie różnią zbytnio gdyż zazwyczaj poszczególne aktualizacje nie niosą za sobą znaczących zmian w kodzie. A więc i po zaszyfrowaniu pliki mogą wyglądać podobnie jeśli używamy jakiegoś stałego klucza szyfrującego.
  • #13 20285371
    seg
    Poziom 13  
    OK, załóżmy, że masz rację. Ale kod wyssany z procka nie będzie zaszyfrowany. Jak zamienić ten txt w Intel'owskiego hex'a? :)
  • #14 20285375
    excray
    Poziom 41  
    Ale pobrałeś ten kod przez bootloader? Czy jak?
  • #15 20285377
    seg
    Poziom 13  
    Posiadam urządzenie fabryczne,
    Wyssałem kod programatorem, ale soft programatora nie ma możliwości zapisania tego jako hex - zapisuje to do idiotycznej postaci*.txt.
    Dwa znaki i następna linia..
  • #16 20285741
    tmf
    VIP Zasłużony dla elektroda
    Nap[isz sobie np. w pythonie prosty program, który ten txt przekonwertuje na bin i potem od razu wgraj bin, lub zamień bin na hex - do tego znajdziesz bez problemu narzędzia.
    Ale zakładając, że producent szyfruje aktualizacje firmware, to byłbym mocno zaskoczony, gdyby pozwalał na odczyt FLASH - byłoby to niezbyt logiczne... To, że coś tam z MCU odczytujesz, nie znaczy, że te dane mają sens.Nie prościej byłoby się skontaktować z producentem i ew. wysłać urządzenie do serwisu, zamiast kombinować, najprawdopodobniej bez skutku?
    Przesunięcie adresu od któego łądujesz kod najpewniej nie zadziała - nie każdy kod jest relokowalny, a hex nie ma mechanizmów umożliwiających relokowalność kodu. Jeśli od domyślnego adresu nie działa, a jak wskazano, 0xff wskazuje na neutralne instrukcjie, to start od innego adresu też nie zadziała.
  • #17 20285773
    seg
    Poziom 13  
    Znalazłem inny program osługujący programator, który umożliwia zapisanie pliku jako BIN, sczytałem kod z fabrycznego procka, wgrałem do czystego i nic. Nie rozumiem tego. Przypomniało mi się - można sczytać ten wsad, ale przy wgrywaniu BIN'a do pustego uC wyskakuje błąd (ale we flash'u pomimo błędu kod się pojawia). Później napiszę jaki to komunikat. Dzięki za chęć pomocy Panowie.
  • #18 20288088
    seg
    Poziom 13  
    To, co udało się zassać z uC fabrycznego wgrałem do czystego. Wygląda na to, że bootloader jest w obszarze początkowym flash'a zabezpieczonym przed odczytem (sczytane zera na adresach początkowych), potem są FF'ki, potem program, który "widać" potem kilka ZER i znowu FF'ki. Problem w tym, że urządzenie jest na USB i tylko tego złącza używa do komunikacji z kompem i wymiany danych oraz do zasilania urządzenia. W bootloaderze musi byc więc zapisana procedura komunikacji po USB, a że tego nie ma (ZERA) program nie rusza. Taka jest moja opinia.

Podsumowanie tematu

Użytkownik poszukuje sposobu na modyfikację wsadu do mikrokontrolera C8051F340, aby urządzenie działało po wgraniu zmodyfikowanego pliku. Wskazuje, że posiadany plik hex nie jest oryginalnym wsadem, a jedynie aktualizacją, która zawiera bootloader. Dyskusja koncentruje się na problemie przesunięcia kodu do adresu 0x00 oraz na możliwościach edycji pliku hex. Uczestnicy rozmowy sugerują, że dane mogą być zaszyfrowane, co uniemożliwia ich poprawne wgranie. Pojawiają się również pytania o narzędzia do konwersji plików oraz o możliwość odczytu i zapisu kodu z mikrokontrolera. Użytkownik zauważa, że bootloader może być zabezpieczony przed odczytem, co komplikuje proces aktualizacji.
Podsumowanie wygenerowane przez model językowy.
REKLAMA