1.設置讀寫保護
設置保護:
if (FLASH_GetReadOutProtectionStatus()!=SET)
{
FLASH_ReadOutProtection(ENABLE);
FLASH_Lock();
}
解除保護:
if (FLASH_GetReadOutProtectionStatus()==SET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
}
這種方式可以通過RAM啓動和IAP的方式解除保護,但是解除保護的同時FLASH也被擦除了。
2.代碼加密
比較可靠的是這種方式,每個MCU都有唯一的ID,讀取該ID,再對該ID進行一些加密變換,假設變換之後的ID是0x12345678,然後在程序的多個關鍵部分判斷ID是否正確,否則不執行。通過此種方式加密後,破解者基本就只能通過反編譯的方式(假設他已經破解了第一層防護讀取到了你的代碼)來破解你的代碼了,對ID加密變換的目的是增加反編譯的難度,未加密變換時反編譯還是不難的。