0、前言
stm32編譯後的**存在flash中,通過外部工具可以讀出來全部資料,一旦硬體抄板一樣,再將flash資料全部拷貝至抄板微控制器中,既可以完全實現硬體和軟體功能抄襲。因此,需要對自己的應用程式加密,即使被抄板和讀取flash資料,拷貝過後仍然無法執行相應的功能。【ps:沒有解不開的微控制器,主要看解密的經濟效益】
step1:為避免出現uid_base的明文,在讀取uid時,對其位址進行一定的簡單運算,再讀取uid。
#define addrseed (0x20170620)
#define methordaddr (addrseed^1+1)
#define methordeuid (addrseed|0x12345678)
volatile const uint32_t uidaddr[3] = ;
//get uid, by calc uidbase
//uid: ptr, 96byte length
static void getuid(volatile uint32_t *uid)
step2:對uid進一步簡單加密。
//encrypt uid
//euid: ptr, 96byte length
static void encryptuid(volatile uint32_t *euid)
step3:對encryptuid計算md5,計算128bit單向雜湊值。
//generate md5 by euid
//key: ptr, 16byte length
void generatemd5(uint8_t *md5)
step4:根據flash頁容量大小,將md5擴充至1024byte,採用隨機數擴充。
//generate key
//key: ptr, 1024 length, md5 extend to 1024
void generatekey(uint8_t *key)
else
}}
二、自動配置流程
具體地,出廠自動配置金鑰流程如下:
step1:上電啟動微控制器,首先執行bootloader程式。
step2。存在公升級任務時,執行step6,step7。
step3和step5。
step4:重啟微控制器,進入bootloader。
step6:清除公升級任務標誌。
step7三、出廠韌體合併
一種的STM32的應用餵狗方法
餵狗結構體 typedef struct wdg feed t 函式介面 初始化函式 void wdgfeed start void 餵狗時間更新,在滴答定時中斷裡呼叫 void wdgfeed update uint32 permitted delay 定時餵狗,在應用程式中呼叫 void wdg...
學習筆記 STM32定時器程式應用(一)
pwm互補輸出帶死區時間和剎車控制 講解 時隔11天,我又回來了 之間寫了stm32的三種定時器的一些基本概念,今天我來講解一下相關的程式應用。我們直接從野火的韌體庫例程中拷貝乙個串列埠的例程 usart接髮。由於我們這個例程是關於互補輸出,因此需要兩個gpio 死區時間用軟體配置,而剎車控制也需要...
一種應用程式命令執行架構設計
一種應用程式命令執行架構設計 袁永福 2011 7 5 有感於一些程式中aspx頁面中直接編寫功能性 難於組織和維護,實現不了程式的高度可配置化,自此提出一種應用程式命令執行架構,其架構圖如下 在這個架構中,每乙個應用程式中存在乙個host 宿主 它是應用程式功能模組組織中的頂級結構,它戰略上管理著...