stm8唯一ID号加密方法和思路

[复制链接]
查看2 | 回复0 | 2021-8-13 18:14:28 | 显示全部楼层 |阅读模式
1.读出ID号
  1. #if defined(STM8S103)
  2.      #define     ID_BaseAddress         (0x4865)
  3. #else//  defined(STM8S105)
  4.      #define     ID_BaseAddress         (0x48CD)
  5. #endif
  6. void GetUniqueID(unsigned char *p)
  7. {
  8.      unsigned char i;
  9.      unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);   
  10.      for(i=0;i!=12;i++){*p++=*pIDStart++;}
  11. }
复制代码

2.把读出的ID号生成其他数据。不一定就是12字节的!并保存在内部EEPROM。在这个模块准备2个函数.一个用于加密.一个用于解密
  1. void StmWriteUniqueID(unsigned char Addr)
  2. {
  3.      unsigned char i;
  4.      FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
  5.      while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)FLASH_Unlock(FLASH_MEMTYPE_DATA);
  6.      unsigned char *pEE=(unsigned char *)(FLASH_DATA_START_PHYSICAL_ADDRESS+(u32)Addr);
  7.      unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);
  8.      for(i=0;i!=6;i++)//由12字节生成12*N个字节
  9.     {
  10.          *pEE++=第1种算法,商业原因.我的算法就不公开了.大家可以准备一个数组查表
  11.         while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);  
  12.          *pEE++=第2种算法,商业原因.我的算法就不公开了。大家可以准备一个数组查表
  13.         while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);  
  14.          。。。。
  15.         第N种算法
  16.     }              
  17. }
复制代码

//解密函数
unsigned char StmCheckUniqueID(unsigned char Addr)
3.主函数里面设置一个时间最好设置长一点。半个钟或其他,让人家难跟踪
  
  1. while(1)
  2.      {
  3.          其他任务...............
  4.          /////////////////////////////////////////////////////////////////////////
  5.           if((Flag&FLAG_CHECK_ID)==FLAG_CHECK_ID)
  6.          {
  7.              Flag&=~FLAG_CHECK_ID;
  8.              if(StmCheckUniqueID(UniqueIDAddress)==1){IsIDCorrect=0x01;}//正确写入
  9.             else{IsIDCorrect=0x00;}//错误写入      
  10.          }        
  11.          /////////////////////////////////////////////////////////////////////////
  12.                其他任务...............
  13.      }
  14.          /////////////////////////////////////////////////////////////////////////
复制代码


总结:
这样做还是能被破解的。但对方已经很难跟踪了.
如果破解者对芯片熟悉.他会根据ID号的地址!----毕竟芯片ID号的地址是固定的.找到对应的调用程序.加密时用到芯片ID号的地址。解密时也有用到芯片ID号的地址
所以只有对方熟.是能很快跟踪到加密/解密程序.而在解密程序入口就return出去!
这种方法已经很实用了.毕竟不是太专业的很难破.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则