stm32加密方法:
flash加密
96位ID號加密
96位id號
id校驗
反匯編
Id存到數(shù)組,程序執(zhí)行之前與數(shù)組之中的ID比較,如果相同繼續(xù)執(zhí)行,不同則終止執(zhí)行
加密步驟:
①設(shè)計一套加密算法,利用MCU內(nèi)部的unique ID作為運算參數(shù),計算結(jié)果通過第三方工具燒進MCU內(nèi)部的FLASH的特定地址處。
②MCU軟件采用相同的算法利用unique ID作為運算參數(shù)計算獲得結(jié)果,然后讀取FLASH中特定地址處的結(jié)果,兩者進行對比,如果相同則繼續(xù)執(zhí)行,否則進入死循環(huán)。
③由于每一片MCU的unique ID都不一樣,因此對于每一片MCU來說,軟件利用加密算法計算得到的結(jié)果都不同。而由于盜版者不知道加密算法是什么,也不知道加密結(jié)果存放在FLASH的什么地方。因此軟件從那個特定地址讀到的數(shù)值始終是與當(dāng)前計算的值不匹配,所以軟件將始終進入死循環(huán)。ID起始地址
加密程序
#include "sysid.h"
#include "stm32f10x.h"
#include "bsp_usart.h"
#define SYSID 0X1FFFF7E8 //stm32f1系列單片機id起始地址
//u8 idcode[]={0X31,0XFF,0XD4,0X5,0X42,0X48,0X30,0X39,0X27,0X52,0X22,0X57}; //原單片機id 12字節(jié) 96bit
u8 idcode[]={0X30,0XFE,0XD3,0X4,0X41,0X47,0X2F,0X38,0X26,0X51,0X21,0X56}; //原單片機id加密 12字節(jié) 96bit
uint8_t i = 0;
void Sysid_Read(void)
{
static u8 id[12]; //12*8 = 96
for(i =0;i < sizeof(id);i++) //讀取ID
{
id[i] = *(u8*)(SYSID + i);
printf("%#X,",id[i]);
}
}
//系統(tǒng)ID校驗
void SysidCheck(void)
{
for(i =0;i < 12;i++)
{
if(idcode[i] == *(u8*)(SYSID + i)) //比較單片機ID
{
printf("ok\r\n");
}
else
{
printf("eeor\r\n");
while(1) //ID校驗失敗死循環(huán)
{
;;
}
}
}
}
mian.c文章來源:http://www.zghlxwxcb.cn/news/detail-589545.html
#include "stm32f10x.h"
#include "bsp_usart.h"
#include "sysid.h"
uint16_t data = 65535;
/**
* @brief 主函數(shù)
* @param 無
* @retval 無
*/
int main(void)
{
/*初始化USART 配置模式為 115200 8-N-1,中斷接收*/
USART_Config();
LED_GPIO_Config();
/* 發(fā)送一個字符串 */
Usart_SendString( DEBUG_USARTx,"這是一個串口中斷接收回顯實驗\n");
//Usart_SendHalfWord(DEBUG_USARTx,data);
printf("歡迎使用野火STM32開發(fā)板\n\n\n\n");
printf("---------------------------\n");
Sysid_Read();//首次讀取設(shè)備芯片ID打印顯示之后再寫入數(shù)組對比
SysidCheck();
while(1)
{
}
}
使用加密函數(shù)的時候?qū)⒋蛴∪咳∠?br> 加密在初始化中判斷一次文章來源地址http://www.zghlxwxcb.cn/news/detail-589545.html
到了這里,關(guān)于STM32芯片加密的方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!