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

2019-12-18 18:49发布

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出去!


这种方法已经很实用了.毕竟不是太专业的很难破.

希望对大家有用.我现在的产品就是用这种方法.之前还在这论坛发过自己AVR产品被破解的牢骚帖.


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
98条回答
kenson
1楼-- · 2019-12-21 09:57
不错学习一下
TANK99
2楼-- · 2019-12-21 15:42
wangqing_gxu 发表于 2013-7-2 15:24
基本没用!
听说人家有种烧录器,你想要什么ID都可以做成一样.
所以,只要把你的代码和ID号读出来,他们照考进 ...

这个是真的吗?
如果真是这样的话,唯一ID就成摆设了。
kation122
3楼-- · 2019-12-21 20:30
 精彩回答 2  元偷偷看……
kation122
4楼-- · 2019-12-22 01:01
TANK99 发表于 2013-7-2 20:47
这个是真的吗?
如果真是这样的话,唯一ID就成摆设了。

STM8 的UID 是真UID ,他说的那个是STM32 ,STM8 的UID 目前还不能更改。
source.ant
5楼-- · 2019-12-22 01:58
这个问题我也考虑了很久,尝试过很多种方法,不过自认为不是很理想。
wangqing_gxu
6楼-- · 2019-12-22 07:29
kation122 发表于 2013-7-2 20:50
STM8 的UID 是真UID ,他说的那个是STM32 ,STM8 的UID 目前还不能更改。

我也认为不能更改,看DATASHEET也是这么说,
不过我有同事,做游戏机的,他的产品刚红,大街小巷都买他的板,可不是他生产的!
上W块的广告费每月,好不容易唱红一个产品,可通街都是别人的盗版货.

当然,这个行业,钱来得快,产品也很快过时.同时亏本也很快.

一周热门 更多>