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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm8 唯一ID號加密方法.思路

  [復制鏈接]
跳轉到指定樓層
樓主
1.讀出ID號

#if defined(STM8S103)
     #define     ID_BaseAddress         (0x4865)
#else//  defined(STM8S105)
     #define     ID_BaseAddress         (0x48CD)
#endif
void GetUniqueID(unsigned char *p)
{
     unsigned char i;
     unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);   
     for(i=0;i!=12;i++){*p++=*pIDStart++;}
}



2.把讀出的ID號生成其他數據。不一定就是12字節的!并保存在內部EEPROM。在這個模塊準備2個函數.一個用于加密.一個用于解密

void StmWriteUniqueID(unsigned char Addr)
{
     unsigned char i;
     FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
     while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)FLASH_Unlock(FLASH_MEMTYPE_DATA);
     unsigned char *pEE=(unsigned char *)(FLASH_DATA_START_PHYSICAL_ADDRESS+(u32)Addr);
     unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);
     for(i=0;i!=6;i++)//由12字節生成12*N個字節
    {
         *pEE++=第1種算法,商業原因.我的算法就不公開了.大家可以準備一個數組查表
        while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);  
         *pEE++=第2種算法,商業原因.我的算法就不公開了。大家可以準備一個數組查表
        while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);  
         。。。。
        第N種算法
    }              
}
//解密函數
unsigned char StmCheckUniqueID(unsigned char Addr)
3.主函數里面設置一個時間最好設置長一點。半個鐘或其他,讓人家難跟蹤
    while(1)
     {
         其他任務...............
         /////////////////////////////////////////////////////////////////////////
          if((Flag&FLAG_CHECK_ID)==FLAG_CHECK_ID)
         {
             Flag&=~FLAG_CHECK_ID;
             if(StmCheckUniqueID(UniqueIDAddress)==1){IsIDCorrect=0x01;}//正確寫入
            else{IsIDCorrect=0x00;}//錯誤寫入      
         }        
         /////////////////////////////////////////////////////////////////////////
               其他任務...............
     }
         /////////////////////////////////////////////////////////////////////////


總結:
這樣做還是能被破解的。但對方已經很難跟蹤了.
如果破解者對芯片熟悉.他會根據ID號的地址!----畢竟芯片ID號的地址是固定的.找到對應的調用程序.加密時用到芯片ID號的地址。解密時也有用到芯片ID號的地址
所以只有對方熟.是能很快跟蹤到加密/解密程序.而在解密程序入口就return出去!


這種方法已經很實用了.畢竟不是太專業的很難破.

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

使用道具 舉報

沙發
ID:38212 發表于 2015-4-21 21:00 | 只看該作者
回復

使用道具 舉報

板凳
ID:187690 發表于 2017-4-9 13:53 | 只看該作者
老師傅:你好!我看到STM8S解密用的程序是怎么用的能不能詳說一下,拜托!
回復

使用道具 舉報

地板
ID:187690 發表于 2017-4-9 13:56 | 只看該作者
老師傅:你好!
    我想請教!怎么解密STM8S的方法。
回復

使用道具 舉報

5#
ID:187690 發表于 2017-6-29 18:01 | 只看該作者
老師傅:你好!我看到STM8S解密用的程序是怎么用的能不能詳說一下,拜托!
回復

使用道具 舉報

6#
ID:187690 發表于 2017-6-29 18:03 | 只看該作者
我們學習加密!

怎么解呢?
回復

使用道具 舉報

7#
ID:187690 發表于 2017-7-2 17:08 | 只看該作者
群主怎么沒有人應呢?
回復

使用道具 舉報

8#
ID:59768 發表于 2017-7-22 11:12 | 只看該作者
學習了!思路不錯``
回復

使用道具 舉報

9#
ID:608322 發表于 2019-9-6 10:06 | 只看該作者
//STM32F10X軟加密方法及實例代碼

#define ID_ENCRYPT_EOR_RESULT_ADDRESS (0x0800F000)
#define ID_ENCRYPT_ADD_RESULT_ADDRESS (0x0800F004)
volatile uint32 gU32IdAdressVar;//這里一定要定義此變量,否則會被優化器優化掉
void Stm32F10xEncryptDemo(void)
{
        uint32 *u32IdAddress;
  uint32 u32EorRslt, u32AddRslt;
        #IF 0
        //如果直接賦值0X1FFFF7E8,則程序編譯結果里會有0X1FFFF7E8,這樣破解人員會很輕松
        //的找到這個內容,然后非常容易進行修改,去掉軟加密
        u32IdAddress = (uint32*)0x1ffff7e8;
        #else
        //千萬別顯式的讀取ID,即要把0X1FFFF7E8運算成隱式的,例如此例中0x1FFFF7E8 = (0x455873a * 4) + 0xEA9DB00;
        //這樣,別人就算破解出了你的程序,也查找不到0X1FFFF7E8,這樣就不能輕易的軟解密,這樣處理后如果要軟解密,
        //一定要反匯編出來進行復雜逆向分析,難度極大,代價極高,很難搞定軟加密了,達到保護產品的目的。
        gU32IdAdressVar = 0x455873a;
        gU32IdAdressVar <<= 2;//0x11561CE8
        u32IdAddress = (uint32*)(gU32IdAdressVar + 0xEA9DB00);//0x1ffff7e8
        #endif
        //讀取單片機的ID,并進行運算,具體算法可以自己定,這里只用到簡單的異或及和運算
        u32EorRslt = (*u32IdAddress) ^ (*(u32IdAddress + 1)) ^ (*(u32IdAddress + 2));
        u32AddRslt = (*u32IdAddress) + (*(u32IdAddress + 1)) + (*(u32IdAddress + 2));
        //進行對比,如果運算結果與FLASH保存的結果不一樣,說明非法,運行錯誤代碼
        if(u32EorRslt != *((uint32*)ID_ENCRYPT_EOR_RESULT_ADDRESS))
        {
                while(1);//異或算法結果不正確,進行錯誤分支
        }
        if(u32AddRslt != *((uint32*)ID_ENCRYPT_ADD_RESULT_ADDRESS))
        {
                while(1);//和算法結果不正確,進行錯誤分支
        }
}
回復

使用道具 舉報

10#
ID:608322 發表于 2019-9-6 10:08 | 只看該作者
樓主的程序,需要把4865這個id地址通過計算得出,不要直接在程序里面出現
回復

使用道具 舉報

11#
ID:608322 發表于 2021-1-4 09:27 | 只看該作者
1,如果板子上有外部存儲器,可以先編寫一個程序,利用算法把id計算得到一些值存入外部存儲器,然后再燒寫真正的程序,真正的程序去校驗外部存儲器的數據是否合法即可

2,利用板子上按鍵組合,或是上電按住某些鍵,程序在這個時候利用算法把id計算得到一些值存入程序區(stm8為EE區),程序運行時去驗證程序區數據是否正確

3,軒微編程器有軟件加密的功能,編程器會讀芯片id,根據算法直接改寫緩沖區,達到軟件加密的作用

4,讀出的id通過一定算法,例如異或加上一個數,得到的數據存入flash(只運行一次,運行后標志位也存入flash),下次讀到這個標志位,就不運行這個程序。

四、做軟件加密時注意
1,不要在程序中直接出現id地址,例如STM32:1FFFF7E8 1FFFF7EC 1FFFF7F0   STM8: 0x4865~0x4870
2, 利用校驗和或是crc對程序區進行校驗,防止改程序
回復

使用道具 舉報

12#
ID:608322 發表于 2021-10-20 17:12 | 只看該作者

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲高清在线视频 | 9999久久 | 亚洲欧美视频 | 成人h免费观看视频 | www..99re | 天堂中文资源在线 | 91久久网站| 久久久久久久一区二区三区 | 国产精品久久久乱弄 | 欧美国产免费 | 99久久国产综合精品麻豆 | 欧美极品在线 | 亚洲国产一区二区三区 | 亚洲日韩第一页 | 欧美精品一区三区 | 久久久久亚洲 | 91高清在线观看 | 亚洲成人三区 | www.久久影视 | 欧美久久一级特黄毛片 | 涩色视频在线观看 | 日韩精品一区二区三区在线观看 | 97国产精品视频人人做人人爱 | 免费在线播放黄色 | 亚洲欧美综合精品久久成人 | 欧美毛片免费观看 | 毛片.com| 一区二区三区四区在线播放 | 欧美日韩精品区 | 国产一级一级 | 欧美国产日韩在线观看成人 | 亚洲精品视频在线观看视频 | 免费a网 | 高清久久 | 精品一区二区视频 | 国产精品高潮呻吟久久久久 | 人操人人 | 国产在线精品一区二区三区 | 91精品国产综合久久小仙女图片 | 一区二区三区四区在线播放 | 亚洲成人一区 |