国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

ELEOK

標題: STM32F10X軟加密方法及實例代碼 [打印本頁]

作者: coolice    時間: 2021-8-13 18:15
標題: STM32F10X軟加密方法及實例代碼
  1. #define ID_ENCRYPT_EOR_RESULT_ADDRESS (0x0800F000)
  2. #define ID_ENCRYPT_ADD_RESULT_ADDRESS (0x0800F004)
  3. volatile uint32 gU32IdAdressVar;//這里一定要定義此變量,否則會被優(yōu)化器優(yōu)化掉
  4. void Stm32F10xEncryptDemo(void)
  5. {
  6.         uint32 *u32IdAddress;
  7.   uint32 u32EorRslt, u32AddRslt;
  8.         #IF 0
  9.         //如果直接賦值0X1FFFF7E8,則程序編譯結(jié)果里會有0X1FFFF7E8,這樣破解人員會很輕松
  10.         //的找到這個內(nèi)容,然后非常容易進行修改,去掉軟加密
  11.         u32IdAddress = (uint32*)0x1ffff7e8;
  12.         #else
  13.         //千萬別顯式的讀取ID,即要把0X1FFFF7E8運算成隱式的,例如此例中0x1FFFF7E8 = (0x455873a * 4) + 0xEA9DB00;
  14.         //這樣,別人就算破解出了你的程序,也查找不到0X1FFFF7E8,這樣就不能輕易的軟解密,這樣處理后如果要軟解密,
  15.         //一定要反匯編出來進行復雜逆向分析,難度極大,代價極高,很難搞定軟加密了,達到保護產(chǎn)品的目的。
  16.         gU32IdAdressVar = 0x455873a;
  17.         gU32IdAdressVar <<= 2;//0x11561CE8
  18.         u32IdAddress = (uint32*)(gU32IdAdressVar + 0xEA9DB00);//0x1ffff7e8
  19.         #endif
  20.         //讀取單片機的ID,并進行運算,具體算法可以自己定,這里只用到簡單的異或及和運算
  21.         u32EorRslt = (*u32IdAddress) ^ (*(u32IdAddress + 1)) ^ (*(u32IdAddress + 2));
  22.         u32AddRslt = (*u32IdAddress) + (*(u32IdAddress + 1)) + (*(u32IdAddress + 2));
  23.         //進行對比,如果運算結(jié)果與FLASH保存的結(jié)果不一樣,說明非法,運行錯誤代碼
  24.         if(u32EorRslt != *((uint32*)ID_ENCRYPT_EOR_RESULT_ADDRESS))
  25.         {
  26.                 while(1);//異或算法結(jié)果不正確,進行錯誤分支
  27.         }
  28.         if(u32AddRslt != *((uint32*)ID_ENCRYPT_ADD_RESULT_ADDRESS))
  29.         {
  30.                 while(1);//和算法結(jié)果不正確,進行錯誤分支
  31.         }
  32. }
復制代碼







歡迎光臨 ELEOK (http://m.afoofa.cn/) Powered by Discuz! X5.0