Sebagian besar pengontrol mikro hari ini memiliki bagian atau metode khusus pabrikan untuk melindungi kode firmware tertanam. Ini umumnya dilakukan dengan mengunci sirkuit yang biasanya memungkinkan memori kode untuk dibacakan. (Anda harus mencari perincian khusus bagian dalam lembar data atau di situs web produsen dalam catatan aplikasi yang berlaku).
Setelah dikunci tidak mungkin membaca kode memori menggunakan teknik normal. Ini memberikan tingkat perlindungan yang wajar untuk mencegah sebagian besar peretas dari melihat kode mesin untuk aplikasi tertanam Anda.
Banyak perangkat MCU saat ini memiliki memori FLASH terpasang untuk memasukkan kode program. Program yang sebelumnya disimpan dan dilindungi disimpan dalam FLASH biasanya dapat diganti dengan kode baru tetapi dibutuhkan operasi FLASH menghapus chip penuh untuk membuka kunci mekanisme perlindungan. Setelah terhapus, bagian akan beroperasi seperti sebelum kunci pengaman asli. Jika suatu program baru dimuat, biasanya dimungkinkan untuk mengunci kembali bagian tersebut untuk melindungi kode mesin yang baru dimuat.
Setiap diskusi tentang perlindungan kode dalam mikrokontroler tidak akan lengkap tanpa menyebutkan bahwa biasanya tidak ada jaminan bahwa skema perlindungan apa pun yang ditawarkan oleh produsen komponen adalah bukti bodoh. Produsen bahkan akan menyatakan bahwa sistem perlindungan bukan 100% bukti bodoh. Salah satu alasan untuk ini adalah bahwa ada seluruh industri pasar gelap terjadi di mana, dengan bayaran, peretas yang rajin akan membacakan kode dari bagian yang dilindungi untuk siapa saja yang ingin membayar. Mereka telah menyusun berbagai skema yang memungkinkan kode untuk dibaca dari ROM atau FLASH pada pengontrol mikro yang dilindungi. Beberapa skema ini sangat pintar tetapi bekerja untuk kesuksesan yang lebih baik pada beberapa keluarga bagian daripada yang lain. Jadi waspadai fakta ini maka Anda mencoba melindungi program Anda dari mencongkel mata.
Setelah seseorang memegang gambar biner dari kode mesin yang telah dibacakan mikrokontroler, apakah itu mikrokontroler yang dilindungi atau tidak, mereka dapat memproses kode mesin melalui alat yang disebut disassembler. Ini akan mengubah data biner kembali menjadi kode bahasa rakitan yang dapat dipelajari untuk mencoba mempelajari bagaimana algoritme program Anda bekerja. Melakukan pembongkaran kode mesin secara akurat adalah pekerjaan yang melelahkan dan membutuhkan banyak pekerjaan. Pada akhirnya proses tersebut dapat menyebabkan kode assembler seperti yang saya jelaskan. Jika program Anda ditulis dalam bahasa tingkat tinggi seperti C, C ++ atau Basic, kode assembly hanya akan mewakili hasil kompilasi dan tertaut dari program Anda. Secara umum tidak mungkin untuk membalikkan kode yang dicuri sepanjang perjalanan kembali ke tingkat bahasa tingkat tinggi.
Apa artinya ini sebenarnya ada manfaat untuk menulis firmware aplikasi tertanam Anda dalam bahasa tingkat tinggi. Ini memberikan lapisan lain yang membuat program Anda lebih sulit untuk direkayasa ulang secara penuh. Manfaat yang lebih besar dapat diperoleh dengan menggunakan teknologi tercanggih dalam mengoptimalkan kompiler untuk mengkompilasi aplikasi yang disematkan karena optimalisasi kinerja tertinggi dapat benar-benar mengubah program menjadi mangkuk spaghetti besar penuh dengan lusinan panggilan ke subrutin pendek yang sangat sulit menguraikan dalam disassembler.
Pengembang tertanam yang paling berpengalaman akan meminta Anda untuk terus maju dan menggunakan skema perlindungan apa pun yang ditawarkan pada MCU di aplikasi Anda .... tetapi tidak bergantung pada ujung jalan untuk produk Anda. Mereka akan memberi tahu Anda bahwa cara terbaik untuk tetap terdepan dalam persaingan adalah dengan terus-menerus meningkatkan produk Anda sehingga versi lama sudah ketinggalan zaman dan tidak menarik pada saat peretas mungkin telah mengkloning kode Anda. Ubah kode sekitar, tambahkan fitur baru, putar papan PC Anda dari waktu ke waktu untuk menukar semua I / Os Anda dan hal-hal lain yang mungkin Anda pikirkan. Dengan cara ini Anda dapat memenangkan balapan setiap saat.