历史上的今天
今天是:2024年11月12日(星期二)
2021年11月12日 | stm8 唯一ID号加密方法.思路
2021-11-12 来源:eefocus
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出去!
这种方法已经很实用了.毕竟不是太专业的很难破
史海拾趣
|
最近做了个充电器,BUCK电路中的开关管发热严重,输入是12V的电源。 第一种情况:当充电电压输出为4.2V,电流为500MA的时候开关管发热严重,恒压充电的时候电压恒定4.2v电流慢慢减小这时候开管发热现象减轻。 第二种情况:当充电电压输出为8.4 ...… 查看全部问答> |
|
大家好,我刚刚学单片机一个月了,用买来的学习机做好了许多试验,现在我想自己买元件,从硬件开始设计,我知道该买些元件啊,板子啊,来焊接,但我不懂具体怎么操作,请问有没有讲这方面的书呢,电子方面的啊,谢谢大家推荐… 查看全部问答> |
|
我现在遇到的问题是 ADC12IE = 0x01; 会影响timer_B定时的精度 但是 我查过手册,上面说timer_B高于ADC12中断优先级(先是用的timer_A,发现现象不对) 只要屏蔽ADC12IE = 0x01; 定时就精确了! 求解,求赐教!… 查看全部问答> |
|
请教一下,mma7455 加速度传感器怎么校正,x,y,z校正值是多少?谢谢 [ 本帖最后由 sanxin126 于 2011-7-27 21:09 编辑 ]… 查看全部问答> |
|
自己写了个小程序,把51开发板上的键盘,LCD,串口通信,24C02存储都整合到了一起。程序大致分为两块,一个是串口通信,一个是数据存储、查询。PC可以向单片机发送数据,单片机接受并显示,同时可以将其存储进24C02中。查询模块可以读取24C02中的数 ...… 查看全部问答> |




