De meeste microcontrollers hebben tegenwoordig onderdeel- of fabrikantspecifieke methoden om de ingebouwde firmwarecode te beschermen. Dit wordt meestal gedaan door de circuits te vergrendelen die normaal gesproken het codegeheugen toestaan om te worden uitgelezen. (U moet onderdeelspecifieke details zoeken in het gegevensblad of op de website van de fabrikant in de toepasselijke toepassingsinformatie).
Eenmaal vergrendeld is het niet mogelijk om het codegeheugen met normale technieken uit te lezen. Dit biedt een redelijk beschermingsniveau om te voorkomen dat de meeste hackers de machinecode voor uw ingesloten toepassing bekijken.
Veel MCU-apparaten hebben tegenwoordig FLASH-geheugen aan boord om de programmacode op te slaan. Een eerder opgeslagen en beveiligd programma dat is opgeslagen in FLASH kan meestal worden vervangen door een nieuwe code, maar het vereist een volledige flash-wisbewerking van de chip om het beschermingsmechanisme te ontgrendelen. Eenmaal gewist zal het onderdeel werken zoals het deed voordat het originele beveiligingsslot werd vergrendeld. Als een nieuw programma wordt geladen, is het over het algemeen mogelijk om het onderdeel opnieuw te vergrendelen om de nieuw geladen machinecode te beschermen.
Elke discussie over codebescherming in microcontrollers zou niet compleet zijn zonder te vermelden dat er gewoonlijk geen garantie dat een door de fabrikant van het onderdeel aangeboden beschermingsplan onfeilbaar is. Fabrikanten zullen zelfs stellen dat de beveiligingssystemen niet 100% onfeilbaar zijn. Een van de redenen hiervoor is dat er een hele zwarte markt-industrie gaande is waar ijverige hackers tegen betaling code uit een beschermd gedeelte voorlezen voor iedereen die wil betalen. Ze hebben verschillende schema's bedacht waarmee de code kan worden uitgelezen uit de ROM's of FLASHes op beschermde microcontrollers. Sommige van deze schema's zijn ongelooflijk slim, maar werken bij sommige gezinnen beter tot succes dan bij andere. Houd dus rekening met dit feit en probeer uw programma te beschermen tegen nieuwsgierige blikken.
Zodra iemand de binaire afbeelding van de machinecode in handen heeft die uit een microcontroller is uitgelezen, of dat nu een beschermde microcontroller was of niet, kan hij de machinecode verwerken met een tool die een disassembler wordt genoemd. Hierdoor worden de binaire gegevens weer omgezet in assembleertaalcode die kan worden bestudeerd om te proberen te leren hoe de algoritmen van uw programma werken. Het nauwkeurig demonteren van machinecode is een nauwgezette klus die enorm veel werk kan vergen. Uiteindelijk kan het proces leiden tot de assembler-code zoals ik heb beschreven. Als je programma is geschreven in een taal op hoog niveau, zoals C, C ++ of Basic, zal de assemblagecode alleen het gecompileerde en gekoppelde resultaat van je programma vertegenwoordigen. Het is over het algemeen niet mogelijk om gestolen code helemaal terug te brengen naar het taalniveau op hoog niveau. Ervaren hackers kunnen dichtbij komen als ze voldoende tijd en ervaring hebben.
Wat dit betekent, is dat het feitelijk een voordeel is om uw ingebouwde toepassingsfirmware in een hoge taal te schrijven. Het biedt nog een laag die het moeilijker maakt voor uw programma om volledig reverse-engineered te worden. Een nog groter voordeel is te behalen door de hoogste stand van de techniek te gebruiken bij het optimaliseren van compilers om de embedded applicatie te compileren, omdat de best presterende optimizers het programma letterlijk kunnen veranderen in een enorme spaghettikom vol tientallen oproepen naar korte subroutines die erg moeilijk zijn om te ontcijferen in een disassembler.
De meeste ervaren embedded ontwikkelaars zullen u vertellen om door te gaan en elk beschermingsschema te gebruiken dat op de MCU in uw toepassing wordt aangeboden ... maar niet om er tot het einde van de weg van af te hangen voor uw product. Ze zullen je vertellen dat de beste manier om de concurrentie voor te blijven, is door je product constant te upgraden, zodat de oude versies verouderd en oninteressant zijn tegen de tijd dat hackers je code hebben gekloond. Verander de code, voeg nieuwe functies toe, draai je pc-kaarten van tijd tot tijd om al je I / O's om te wisselen en alle andere dingen die je maar kunt bedenken. Op deze manier kun je de race elke keer winnen.