Nie określiłeś układu, poniższe dotyczą głównie 8-bitowych urządzeń atmega, ale są to informacje ogólne. Przeczytaj sekcję „Programowanie pamięci”, aby uzyskać informacje na temat konkretnego układu scalonego, aby uzyskać bardziej szczegółowe informacje!
To powiedziawszy, i jak powiedziałeś, wszystkie urządzenia AVR zawierają dwa bity Lock o nazwie LB1 i LB2. Zaprogramowanie ich (do 0, niski) zapewni ochronę zawartości zapisanej w pamięciach Flash i EEPROM zgodnie z poniższą tabelą. Poziom ochrony jest podzielony na trzy tryby, w których tryb 1 nie zapewnia ochrony, a tryb 3 oferuje maksymalną ochronę. Możliwe jest przejście do wyższego trybu ochrony po prostu przez przeprogramowanie bitów blokady.
AVR pozwala na zmianę „wysokich” bitów na „niskie”, ale nie na odwrót. Nie można zmienić „niskiego” bitu blokady na „wysoki”, dlatego obniżenie poziomu ochrony nie jest możliwe. Aby wyczyścić bity blokady, wymagane jest pełne wymazywanie, które usuwa pamięć Flash.
Te same 2 bity blokujące (LB1 i LB2), gdy są niskie, zapobiegną wykryciu przez oprogramowanie 99,9% ludzi! Prawdopodobnie ponad 99,9%. Prawie zawsze łatwiej byłoby odtworzyć kod.
Więc nie ma sposobu, aby użytkownik zaktualizował oprogramowanie układowe za pomocą niestandardowego programu ładującego i chroniłby flash przed odczytem w tym samym czasie?
Zgodnie z moją najlepszą wiedzą (mogę się mylić, ale myślę, że miałbym z tym wcześniej problem) na urządzeniach, które mają bezpieczniki ochrony bootloadera (BLB12 i BLB11), możesz zablokować niestandardową sekcję bootloadera , wyłączyć SPI i być chronione przed 97-98% ludzi.
Jednak gdy żaden z bitów blokady nie jest zaprogramowany, funkcje blokady pamięci nie są włączone !!! Wyłączenie ISP wystarczy, aby zablokować 70% ludzi.
W celu uzyskania dodatkowych informacji, bity blokady i bezpieczniki nie znajdują się w normalnej pamięci flash lub w pamięci EEPROM, ani nie są dostępne w oprogramowaniu, z wyjątkiem bitów blokady związanych z modułem ładującym w urządzeniach z funkcją autoprogramowania. Tabela 2 w tej notatce aplikacji pomoże ci określić, co możesz zrobić dla swojego konkretnego urządzenia!
Linia AVR firmy Atmel nie jest urządzeniem o wysokim poziomie bezpieczeństwa (chyba że wyraźnie zaznaczono!) I jako takie absolutnie nie ma żadnej gwarancji bezpieczeństwa kodu, ani też nie powinny! Podobnie jak wszystkie niezabezpieczone urządzenia (i niestety nawet niektóre bezpieczne), są one podatne na częste ataki!
Edytować
Wstawię nagłówek interfejsu programowania HV. Ale czy ktoś może użyć programatora HV do odczytania pamięci flash? Wiem, że programista HV może wymazać układ, nawet ISP / Jtag są wyłączone.
Nie sądzę, że powinieneś włączyć programator HV do swojego projektu płyty, chyba że jest to absolutnie potrzebne i wiesz na pewno, że nie spowoduje to żadnych problemów. Programatory WN (sygnały 12 woltów) są dostępne tylko jako środek bezpieczeństwa do programowania blokowanych (głównie zablokowanych błędów) układów. Teoretycznie ma to jedynie na celu zaprogramowanie urządzenia, aby niczego nie czytało. I nigdy nie słyszałem o exploicie, który umożliwiłby czytanie.
Do aktualizacji bootloadera (okazjonalnie) wstawię nagłówek interfejsu programowania HV. Ale czy ktoś może użyć programatora HV do odczytania pamięci flash? Wiem, że programista HV może wymazać układ, nawet ISP / Jtag są wyłączone.
Myślę, że może istnieć sposób na aktualizację zablokowanej pamięci flash za pomocą programu ładującego (może to mieć coś wspólnego z wewnętrzną flagą zapisu i / lub ISR?) Ale muszę przeszukać moje notatki i być może będę musiał to przetestować. Nie będę w stanie tego robić przez ~ 20 godzin; więc bardzo polecam zadać nowe pytanie dotyczące tylko tego i wspomnianego procesora. To bardzo dobre pytanie !
LB1
iLB2
, który opisałem również w moim pytaniu, jako ograniczającą opcję używania bootloadera do celów aktualizacji. Więc to nie jest opcja. Co doBLB12
iBLB11
- tego nie rozumiem. (ciąg dalszy nastąpi)Możesz użyć bitów blokujących na niektórych urządzeniach ATMega i nadal aktualizować kod za pomocą bootloadera.
Zaprogramowałem LB1 i LB2 na ATMega 328. Następnie uruchomiłem program ładujący, zaktualizowałem program główny - wszystko działało idealnie.
ISP nie może ani czytać, ani pisać bezpieczników flash / eeprom / bezpieczników, ale bootloader nadal może pisać sekcję aplikacji.
Chip Erase z ISP wyczyści bity blokujące (LB1 i LB2), ale również usunie całą pamięć flash / eeprom, dzięki czemu możesz chronić swój kod (jednak musisz upewnić się, że nie można zhakować bootloadera)
źródło