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

標題: stm8 唯一ID號加密方法.思路 [打印本頁]

作者: bibi    時間: 2015-4-19 02:16
標題: 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出去!


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


作者: aabb888    時間: 2015-4-21 21:00

作者: liangzhiping    時間: 2017-4-9 13:53
老師傅:你好!我看到STM8S解密用的程序是怎么用的能不能詳說一下,拜托!
作者: liangzhiping    時間: 2017-4-9 13:56
老師傅:你好!
    我想請教!怎么解密STM8S的方法。

作者: liangzhiping    時間: 2017-6-29 18:01
老師傅:你好!我看到STM8S解密用的程序是怎么用的能不能詳說一下,拜托!
作者: liangzhiping    時間: 2017-6-29 18:03
我們學習加密!

怎么解呢?
作者: liangzhiping    時間: 2017-7-2 17:08
群主怎么沒有人應呢?
作者: armauk    時間: 2017-7-22 11:12
學習了!思路不錯``
作者: meifan2010    時間: 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);//和算法結果不正確,進行錯誤分支
        }
}
作者: meifan2010    時間: 2019-9-6 10:08
樓主的程序,需要把4865這個id地址通過計算得出,不要直接在程序里面出現
作者: meifan2010    時間: 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對程序區進行校驗,防止改程序

作者: meifan2010    時間: 2021-10-20 17:12






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 天天天操天天天干 | 凹凸日日摸日日碰夜夜 | 亚洲精品视频在线播放 | 色精品视频 | 青青草华人在线视频 | 在线视频 亚洲 | 精品国产色 | 国产高清视频在线 | 九九久久久 | 日韩精品一区二区三区在线观看 | 精品国产免费人成在线观看 | 97成人在线 | 亚洲啪啪| 久久精品网 | 91大神xh98xh系列全部 | 国产精品视频一二三区 | 亚洲精品久久久蜜桃网站 | 欧美视频三区 | 中文字幕在线观看 | 久久精品一区二 | 99爱国产 | 欧美四虎 | 亚洲成人一区 | a欧美 | 台湾av在线 | 男人的天堂中文字幕 | 久久久久中文字幕 | 久久久亚洲一区 | 青草青草久热精品视频在线观看 | 一区二区三区免费观看 | 午夜男人的天堂 | 午夜精品久久久久久不卡欧美一级 | 国产精品久久久久久婷婷天堂 | 拍真实国产伦偷精品 | 久久aⅴ乱码一区二区三区 91综合网 | 国产欧美日韩综合精品一区二区 | 成人影院在线 | 涩在线 | 国产馆| 中文字幕一区在线 | 国产精品一区二区无线 |