Firmware-Schutz auf AVR- und PIC-Controllern

Kann jemand die HEX-Datei extrahieren, die ich in einem von mir bereitgestellten Mikrocontroller brenne?

Wenn das möglich ist, wie kann jemand sicherstellen, dass sein Code in eingebetteten Systemen gesichert ist? Wie kann man im Fall von PIC- und AVR-Mikrocontrollern ihre Firmware vor Reproduktion schützen?

In Fall Nr. 1 scheinen Sie vorzuschlagen, dass Sie Ihren Clients die Hex-Datei zur Verfügung stellen. In diesem Fall können sie sie einfach auf mehrere Klongeräte schreiben, ohne dass der Code wirklich dekompiliert werden muss , obwohl dies möglich ist. Im Fall eines gesperrten Geräts (Nr. 2) hängt es normalerweise davon ab, wie entschlossen sie sind, den Code zu erhalten (mit anderen Worten, wie viel sie bereit sind, auszugeben), aber normalerweise ist es möglich.
Früher waren es zwei Jahre, aber der Schutz wird heutzutage bei gängigen Geräten im Durchschnitt in ein oder zwei Tagen aufgehoben. im Grunde, sobald jemand entschieden hat, dass es sich lohnt, es zu tun. Wenn Sie wirklich Sicherheit wollen, müssen Sie in das Chipgeschäft einsteigen, mit kommerziellen Teilen von der Stange werden Sie keine bekommen.

Antworten (2)

Die meisten Mikrocontroller verfügen heutzutage über teile- oder herstellerspezifische Methoden zum Schutz des eingebetteten Firmware-Codes. Dies erfolgt im Allgemeinen durch Sperren der Schaltkreise, die normalerweise das Auslesen des Codespeichers ermöglichen. (Sie müssen nach teilespezifischen Details im Datenblatt oder auf der Website des Herstellers in den entsprechenden Anwendungshinweisen suchen).

Nach dem Sperren ist es nicht möglich, den Codespeicher mit normalen Techniken auszulesen. Dies bietet ein angemessenes Maß an Schutz, um die meisten Hacker davon abzuhalten, den Maschinencode für Ihre eingebettete Anwendung anzuzeigen.

Viele MCU-Geräte verfügen heutzutage über einen integrierten FLASH-Speicher zum Speichern des Programmcodes. Ein zuvor gespeichertes und geschütztes Programm, das in FLASH gespeichert ist, kann normalerweise durch neuen Code ersetzt werden, aber es ist ein vollständiger Chip-FLASH-Löschvorgang erforderlich, um den Schutzmechanismus zu entsperren. Nach dem Löschen funktioniert das Teil wie vor der ursprünglichen Schutzsperre. Wenn ein neues Programm geladen wird, ist es in der Regel möglich, das Teil erneut zu verriegeln, um den neu geladenen Maschinencode zu schützen.

Jede Erörterung des Codeschutzes in Mikrocontrollern wäre nicht vollständig ohne die Erwähnung, dass es normalerweise keine Garantie dafür gibt, dass ein vom Teilehersteller angebotenes Schutzschema narrensicher ist. Hersteller werden sogar angeben, dass die Schutzsysteme nicht 100% narrensicher sind. Einer der Gründe dafür ist, dass es eine ganze Schwarzmarktindustrie gibt, in der fleißige Hacker gegen eine Gebühr Code aus einem geschützten Teil für jeden auslesen, der zahlen möchte. Sie haben verschiedene Schemata entwickelt, die es ermöglichen, den Code aus den ROMs oder FLASHes auf geschützten Mikrocontrollern auszulesen. Einige dieser Schemata sind unglaublich clever, arbeiten aber bei einigen Teilefamilien erfolgreicher als bei anderen. Seien Sie sich also dieser Tatsache bewusst, wenn Sie versuchen, Ihr Programm vor neugierigen Blicken zu schützen.

Sobald jemand das binäre Abbild des Maschinencodes in Händen hält, der aus einem Mikrocontroller ausgelesen wurde, unabhängig davon, ob es sich um einen geschützten Mikrocontroller handelt oder nicht, kann er den Maschinencode mit einem Tool namens Disassembler verarbeiten. Dadurch werden die Binärdaten wieder in Assemblersprachencode umgewandelt, der untersucht werden kann, um zu lernen, wie die Algorithmen Ihres Programms funktionieren. Die genaue Disassemblierung von Maschinencode ist eine mühsame Arbeit, die viel Arbeit in Anspruch nehmen kann. Am Ende kann der Prozess zu dem Assembler-Code führen, wie ich ihn beschrieben habe. Wenn Ihr Programm in einer Hochsprache wie C, C++ oder Basic geschrieben wurde, stellt der Assemblercode nur das kompilierte und verknüpfte Ergebnis Ihres Programms dar. Es ist im Allgemeinen nicht möglich, gestohlenen Code bis zur Hochsprachenebene zurückzuentwickeln.

Dies bedeutet, dass es tatsächlich einen Vorteil hat, Ihre eingebettete Anwendungsfirmware in einer Hochsprache zu schreiben. Es bietet eine weitere Ebene, die es für Ihr Programm schwieriger macht, vollständig rückentwickelt zu werden. Ein noch größerer Nutzen ergibt sich aus der Verwendung modernster Optimierungscompiler zum Kompilieren der eingebetteten Anwendung, da die leistungsstärksten Optimierer das Programm buchstäblich in eine riesige Spaghettischüssel voller Dutzender Aufrufe von kurzen Subroutinen verwandeln können, die sehr schwierig sind in einem Disassembler zu entziffern.

Die meisten erfahrenen Embedded-Entwickler werden Ihnen sagen, dass Sie jedes Schutzschema verwenden sollen, das auf der MCU in Ihrer Anwendung angeboten wird .... aber sich nicht bis zum Ende des Weges für Ihr Produkt darauf verlassen sollen. Sie werden Ihnen sagen, dass der beste Weg, der Konkurrenz einen Schritt voraus zu bleiben, darin besteht, Ihr Produkt ständig zu aktualisieren, sodass die alten Versionen veraltet und uninteressant sind, wenn Hacker Ihren Code möglicherweise geklont haben. Ändern Sie den Code, fügen Sie neue Funktionen hinzu, drehen Sie Ihre PC-Platinen von Zeit zu Zeit, um alle Ihre I/Os auszutauschen, und alle anderen Dinge, die Ihnen einfallen. Auf diese Weise können Sie das Rennen jedes Mal gewinnen.

Vielen Dank @Michael Karas Das war eine vollständige Antwort

Ich denke, Michaels Antwort reicht für diese Frage aus, aber ich füge diese beiden Links hinzu: Hacking the PIC 18F1320 and Everything they make, We can break! Diese beiden waren sehr interessant für mich.

Der fleißige EE sollte diesen letzten Link studieren und Geräte, die in der Liste fehlen , recherchieren/vergleichen/aussuchen. Komplexität ist immer abschreckender – wie das Hinzufügen eines DS3641 oder ATSHA204 . Obwohl keine zusätzliche Sicherheit jemals zu 100 % unzerbrechlich sein wird, könnte es sich aufgrund der zusätzlichen Komplexität nicht lohnen.