本帖最后由 射天狼 于 2019-9-20 09:27 编辑
产品里STM32现在用的越来越多了板子防被人抄这个目前我还没什么好办法,知道的坛友可以分享一下
只能从代码上做一个简单的加密,可以防止一大部分人轻易获取到程序。然后抄板、hex下载一条龙式的什么服务
思路利用stm32里全球唯一ID 加一个CRC16 如果有EEPROM可以也加上 也可以再加FLASH读保护
1.第一次上电流程:判断是不是第一次上电(FLASH里都是0xFF)如果是那就在自定义地址写入ID+CRC16 有EEPROM也一块写入
2.以后开机流程:直接比对STM32里的ID和FLASH里的ID 和EEPROM的ID是否完全一样,不一样 呵呵呵···while(1);伺候(也可以给个笑脸-_-)
加密原理:
如果为复制代码:上电因为FLASH是复制进去的 所以FLASH里的ID还是原来STM32的 这样和新STM32里读取的ID不一致 还是老规矩···
上代码:
- //////////////////////加密程序开始//////////////////////
- #define EEPROM
- // FLASH_Unlock();
- //// FLASH_ReadOutProtection(DISABLE);
- // FLASH_ReadOutProtection(ENABLE);//读输出保护
- // FLASH_Lock();
- #ifdef EEPROM
- WP_L; //读取EEPROM里的ID和CRC
- for(i=0; i<14; i++) {
- I2C_ReceiveData(0xA2,0x1000+i, HAV_H,&UID_E[i], 1);//u8
- }
- WP_H;
- #endif
- Get_ChipID();
- crc = crc16_ccitt(UID, 12); //校验前12个字节 最后两个字节CRC16校验
- UID[12]=(*(char *)(&crc));
- UID[13]=(*((char *)(&crc) + 1));
- STMFLASH_Read(0x803FF00,(u16*)UID_F,7); //最后一个16个字节是CRC16校验
- // check(1, &UID_F[0],12));
- crc = crc16_ccitt(UID_F, 12); //校验前12个字节 最后两个字节CRC16校验
- UID_F[12]=(*(char *)(&crc));
- UID_F[13]=(*((char *)(&crc) + 1));
- // Unique_temp=*(vu32 *)UID_F;//stm32小端 0x12 0x34 0x56 0x78 Unique_temp为0x78563412
- //如果FLASH是第一次下载 先写入读取的ID到FLASH和EEPROM
- if(UID_F[0]==0xff && UID_F[1]==0xff && UID_F[2]==0xff && UID_F[3]==0xff) {
- STMFLASH_Write(0x803FF00,(u16*)UID,7);
- #ifdef EEPROM
- //也写一次EEPROM 三方对比
- WP_L; //保存校准值到eeprom
- for(i=0; i<14; i++) {
- I2C_SendData(0xA2,0x1000+i, HAV_H,&UID[i], 1);//u8
- }
- WP_H;
- #endif
- } else { //开始对比ID和FLASH、EEPROM是否相同
- for(i=0; i<14; i++) {
- if(UID[i]!=UID_F[i]) {
- display_string_12x32(68,2, "ERROR",5,0);
- while(1);
- }
- }
- #ifdef EEPROM
- for(i=0; i<14; i++) {
- if(UID[i]!=UID_E[i]) {
- display_string_12x32(68,2, "ERROR",5,0);
- while(1);
- }
- }
- #endif
- }
- //////////////////////加密程序结束//////////////////////
复制代码
另外有个思路,大家看看:在有现实界面的产品中,留一个界面展示版权信息只有自己输入密码后能进入。
这个牛逼啊, 运行时如何对程序代码运算CRC呢,把flash全部读一下?
开机会读flash,但是不会读整个flash, 如果这样,破解者很容易发现:你读了某一段 正常程序不会读的地址,比如 0地址,一般正常程序不会煮读0地址的。
我一般只读程序中的某一段,然后做校验。
稍后我另开一贴,说说的我方法,再看看大家都意见。
给大家推荐个靠谱的方法,加几个STC保平安,光程序读出就不少钱了。
一周热门 更多>