久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2497|回復: 1
打印 上一主題 下一主題
收起左側

stm32芯片利用唯一ID對程序進行加密的一種方法

[復制鏈接]
跳轉到指定樓層
樓主
ID:346927 發表于 2021-5-27 15:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

  #define STM32_ID_D  352525   //任意的一個數
  //stm32芯片的ID地址,把地址減去一個數,避免匯編里面直接出現ID的地址,不然很容易暴露加密與ID號有關
  volatile u32 STM32_ID_addr[3]={0x1ffff7e8 - STM32_ID_D,0x1ffff7ec + STM32_ID_D,0x1ffff7f0 - STM32_ID_D};
   
  /********************************************************************
  函數功能:讀出stm32的ID,12字節
  入口參數:p
  返    回:
  備    注:把ID的地址做一下處理,加密性更好
  ********************************************************************/
  volatile void STM32_Read_ID(volatile u32 *p)
  {
     volatile u32 Addr;
  // 因為不想讓程序在反匯編后直接找到這個地址,所以這個地址是運算出來的,
  // 跟STM32_ID_addr反運算,當然了也可以用高級的算法,注意不能讓編譯器優化這個地址
     Addr = STM32_ID_addr[0] + STM32_ID_D;
     p[0] = *(vu32*)(Addr);
     Addr = STM32_ID_addr[1] - STM32_ID_D;
     p[1] = *(vu32*)(Addr);
     Addr = STM32_ID_addr[2] + STM32_ID_D;
     p[2] = *(vu32*)(Addr);
  }
  /********************************************************************
  函數功能:加密ID并保存
  入口參數:
  返    回:
  備    注:
  ********************************************************************/
  void STM32_Encrypted_ID(void)
  {
     u32 stm32ID[4],dat;   
     STM32_Read_ID(stm32ID);
     
     //這里可以用其它一些高級的算法,但解和加要一樣
     //把ID號處理成一個32位數,也可以用自己的算法,處理成其他數據,多少位都行
     stm32ID[3] = STM32_ID_D;        
     dat = stm32ID[0] + stm32ID[1] - (stm32ID[2]/stm32ID[3]); //處理成一個32位數
     
     FLASH_Unlock();
     FLASH_ErasePage  (STM32FLASH_EN_ID_START_ADDR);     //
     FLASH_ProgramWord(STM32FLASH_EN_ID_START_ADDR,dat); //保存這個數,寫進32位
     FLASH_Lock();
  }
   
  /********************************************************************
  函數功能:比較加密ID,正確返回0
  入口參數:
  返    回:1:不正確,0:正確
  備    注:
  ********************************************************************/
  u32 STM32_CMP_Encrypted_ID(void)
  {
     u32 stm32ID[4],dat,dat2;   
     STM32_Read_ID(stm32ID);
     
     // 這里可以用其它一些高級的算法,但解和加要一樣   
     stm32ID[3] = STM32_ID_D;      
     dat = stm32ID[0] + stm32ID[1] - (stm32ID[2]/stm32ID[3]);
     
     dat2 = *(u32*)(STM32FLASH_EN_ID_START_ADDR);  //讀出加密時,保存在flash中的數
     
     if(dat == dat2){return 0;} // 相同
     else           {return 1;} // 不同
  }
   
   
  //好了,有了上面那個程序,那下再繼續
   
   
  //===================ID加密控制=====================================================================
     if(STM32_CMP_Encrypted_ID())
     {
        //量產時給一些條件,條件滿足就對ID加密,然后把加密結果保存到flash中,把該程序與芯片的ID,唯一對應起來,加密完后,你也可以讓它自宮。      
        if(XXXXXX)
        {
           STM32_Encrypted_ID();   //加密ID
           自宮                    //即把加密這段代碼從flash里面擦除,直接跳出去繼續執行
        }
     }
   
   
  //===================正常運行時==================================  
   
  // 校驗一下ID是否正確,
     if(STM32_CMP_Encrypted_ID())
     {
      /*
      來到這里嘛,當然不正確咯,你別讓程序死在這哦,太明顯了,很容易找到是你干的,
      那么,一個系統肯定有一些參數才能運行的,你可以改變一些參數,這可以讓系統
      有時正常有時不正常,,呵呵,要查也不是那么容易的事了
      */
     }
  }

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:608322 發表于 2021-8-31 15:38 | 只看該作者
設計好的程序,如果擔心被破解,最好id軟件加密先給我免費破破看
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲a一区二区 | 久久久av中文字幕 | 成人av电影网 | 日韩欧美在线观看视频网站 | 日韩精品在线免费 | 久久激情视频 | 一级黄色录像片子 | 亚洲精品视频二区 | 国产亚洲成av人在线观看导航 | 99热首页| www.一级片| 成人欧美一区二区三区在线观看 | 福利色导航 | 日韩av在线免费 | 国产成人在线一区 | 一区二区三区高清 | 日本小电影网站 | 久久精品这里精品 | 国产亚洲第一页 | 亚洲精品日韩综合观看成人91 | 亚洲午夜精品一区二区三区 | 成人亚洲精品久久久久软件 | 国产 日韩 欧美 制服 另类 | 久久三级av | 精品国产91久久久久久 | 欧美激情一区 | 91成人午夜性a一级毛片 | 91人人看| 91精品国产综合久久小仙女图片 | www.日韩系列 | 黄色网页在线 | 久久久精品网站 | 久久免费电影 | 国产一区二区精品自拍 | 日韩欧美三区 | 国产精品成人一区 | 在线成人免费av | 在线色网 | 国产精品美女www爽爽爽视频 | 色一情一乱一伦一区二区三区 | 国产成人自拍av |