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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 23794|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

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

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:77367 發(fā)表于 2015-4-19 02:16 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
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號生成其他數(shù)據(jù)。不一定就是12字節(jié)的!并保存在內(nèi)部EEPROM。在這個模塊準(zhǔn)備2個函數(shù).一個用于加密.一個用于解密

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字節(jié)生成12*N個字節(jié)
    {
         *pEE++=第1種算法,商業(yè)原因.我的算法就不公開了.大家可以準(zhǔn)備一個數(shù)組查表
        while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);  
         *pEE++=第2種算法,商業(yè)原因.我的算法就不公開了。大家可以準(zhǔn)備一個數(shù)組查表
        while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);  
         。。。。
        第N種算法
    }              
}
//解密函數(shù)
unsigned char StmCheckUniqueID(unsigned char Addr)
3.主函數(shù)里面設(shè)置一個時間最好設(shè)置長一點。半個鐘或其他,讓人家難跟蹤
    while(1)
     {
         其他任務(wù)...............
         /////////////////////////////////////////////////////////////////////////
          if((Flag&FLAG_CHECK_ID)==FLAG_CHECK_ID)
         {
             Flag&=~FLAG_CHECK_ID;
             if(StmCheckUniqueID(UniqueIDAddress)==1){IsIDCorrect=0x01;}//正確寫入
            else{IsIDCorrect=0x00;}//錯誤寫入      
         }        
         /////////////////////////////////////////////////////////////////////////
               其他任務(wù)...............
     }
         /////////////////////////////////////////////////////////////////////////


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


這種方法已經(jīng)很實用了.畢竟不是太專業(yè)的很難破.

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

6#
ID:187690 發(fā)表于 2017-6-29 18:03 | 只看該作者
我們學(xué)習(xí)加密!

怎么解呢?
回復(fù)

使用道具 舉報

7#
ID:187690 發(fā)表于 2017-7-2 17:08 | 只看該作者
群主怎么沒有人應(yīng)呢?
回復(fù)

使用道具 舉報

8#
ID:59768 發(fā)表于 2017-7-22 11:12 | 只看該作者
學(xué)習(xí)了!思路不錯``
回復(fù)

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

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

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

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

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

使用道具 舉報

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

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天天天操| 成人高清在线 | 夜夜精品视频 | 一二区视频 | 久久精品亚洲精品 | 小视频你懂得 | www.一级毛片 | 黄色网址免费在线观看 | 日韩精品久久久 | 精品欧美一区二区久久久伦 | 欧美理论片在线观看 | 亚洲国产成人精品久久久国产成人一区 | 久久久久成人精品免费播放动漫 | 中文字幕一区二区三区四区五区 | 狠狠干狠狠插 | 日韩中文一区二区三区 | 国产一区二区精品在线 | 狠狠干天天干 | 久久夜视频 | 18成人在线观看 | 二区中文字幕 | 亚洲日韩中文字幕 | 天天操天天插 | 日韩精品一区二区久久 | 日本精品免费在线观看 | 国产色在线 | av免费网站在线观看 | 日韩成人精品视频 | 在线免费观看成年人视频 | 亚洲精品久久久蜜桃 | 欧美性tv| 亚洲国产成人av | 日日综合 | 一区二区电影 | 国产激情网 | 久久久久久亚洲国产精品 | 亚洲国产中文字幕 | 亚洲aⅴ | 青青草社区 | 亚洲视频三区 | 在线观看欧美一区 |