Czy można wyodrębnić kod z tablicy arduino?


14

Czy istnieje sposób na wyeksportowanie kodu dla arduino nawet jako plik hex?


2
Tak, używając avrdude z wiersza poleceń, chyba że został ustawiony bezpiecznik bezpieczeństwa. Może to być nawet możliwe, ale celowo o wiele trudniejsze i nie wiadomo, czy ktokolwiek jeszcze pokonał ten mechanizm bezpieczeństwa.
Chris Stratton

@ChrisStratton Słuchałem rozmowy o defconach, podczas której rozmawiali o tym, jak została pokonana. Nie pamiętam, który to był, ale Google może pamiętać.
Hair_of_the_Dog

Został pokonany dla niektórych mikrokontrolerów, a jeszcze nie (przynajmniej dla publicznej wiadomości, bez fizycznego rozbioru) dla innych.
Chris Stratton

Tak, jestem prawie pewien, że zostało to zbadane.
Hair_of_the_Dog

Odpowiedzi:


7

Patrząc na kod źródłowy bootloaderów Arduino na https://github.com/arduino/Arduino/tree/master/hardware/arduino/bootloaders wydaje się, że w rzeczywistości obsługują one funkcję odczytu stk500 dla pamięci flash, dzięki czemu można osiągnij swój cel za pomocą programu klienckiego, takiego jak avrdude.

Tak więc odpowiedź na pytanie brzmi: jeśli możesz uzyskać dostęp do bootloadera, to tak, możesz odczytać zawartość pamięci flash w formacie binarnym lub szesnastkowym, bez uciekania się do zewnętrznego programisty.

Jeśli nie możesz uzyskać dostępu do programu ładującego (zresetować problemy lub nie ma nienaruszonego programu ładującego), możesz to zrobić za pomocą zewnętrznego programatora, pod warunkiem, że ustawienia bezpiecznika nie zapobiegną temu.


1
Okazuje się, że nie tylko obsługiwany jest odczyt, ale opiera się na domyślnym avrdudezachowaniu weryfikacyjnym , ponieważ działa poprzez odczytywanie bufora i przeprowadzanie porównania na komputerze. Zasadniczo każdy, kto kiedykolwiek przesłał kod do Arduino opartego na ATmega, pozwalając IDE na wywołanie avrdudez domyślną konfiguracją, również domyślnie go odczytał.
Chris Stratton

5

Tak, udało mi się pobrać jądro rozruchowe z jednej płyty Arduino za pośrednictwem ISCP i przesunąłem je na inną. Bezpieczniki bezpieczeństwa nie zostały ustawione. gdzie avrdude będzie działać. Wtedy korzystałem z AVR Studio ze STK500, ponieważ miał GUI i nie musiałem uczyć się wszystkich przełączników avrdude. Albo zadziała.

Ustawienie bezpiecznika pokonuje open source. Powiedział, że jądro rozruchowe znajduje się w IDE. .. \ Arduino \ hardware \ arduino \ bootloaders \ atmega8 \ ATmegaBOOT.hex wraz z innymi wariantami układów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.