打印
[应用相关]

STM32 ID的加密

[复制链接]
1530|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Stannis|  楼主 | 2016-7-18 21:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

// 把地址直接减去一个数是不要在程序中直接出现这个地址
#define STM32_ID_D  352525   // 任意的一个数
volatile u32 STM32_ID_addr[3]={0x1ffff7e8 - STM32_ID_D,0x1ffff7ec + STM32_ID_D,0x1ffff7f0 - STM32_ID_D};
/********************************************************************
函数功能:读出ID
入口参数:p
返    回:
备    注:
********************************************************************/
volatile void STM32_Read_ID(volatile u32 *p)
{
   volatile u32 Addr;
// 因为不想让程序在反汇编后直接找到这个地址,所以这个地址是运算出来的,
// 跟STM32_ID_addr反运算,当然了也可以用高级的算法,注意不能让编译器优化这个地址
   Addr = STM32_ID_addr[0] + STM32_ID_D;
   p[0] = *(vu32*)(Addr);
   Addr = STM32_ID_addr[1] - STM32_ID_D;
   p[1] = *(vu32*)(Addr);
   Addr = STM32_ID_addr[2] + STM32_ID_D;
   p[2] = *(vu32*)(Addr);
}
/********************************************************************
函数功能:加密ID并保存
入口参数:
返    回:
备    注:
********************************************************************/
void STM32_Encrypted_ID(void)
{
   u32 stm32ID[4],dat;   
   STM32_Read_ID(stm32ID);
   // 这里可以用其它一些高级的算法,但解和加要一样
   stm32ID[3] = STM32_ID_D;        
   dat = stm32ID[0] + stm32ID[1] - (stm32ID[2]/stm32ID[3]);
   
   FLASH_Unlock();
   FLASH_ErasePage  (STM32FLASH_EN_ID_START_ADDR);     //
   FLASH_ProgramWord(STM32FLASH_EN_ID_START_ADDR,dat); // 保存这个数,写进32位
   FLASH_Lock();
}

/********************************************************************
函数功能:比较加密ID,正确返回0
入口参数:
返    回:1:不正确,0:正确
备    注:
********************************************************************/
u32 STM32_CMP_Encrypted_ID(void)
{
   u32 stm32ID[4],dat,dat2;   
   STM32_Read_ID(stm32ID);
   // 这里可以用其它一些高级的算法,但解和加要一样   
   stm32ID[3] = STM32_ID_D;      
   dat = stm32ID[0] + stm32ID[1] - (stm32ID[2]/stm32ID[3]);
   
   dat2 = *(u32*)(STM32FLASH_EN_ID_START_ADDR);
   
   if(dat == dat2){return 0;} // 相同
   else           {return 1;} // 不同
}



好了,有了上面那个程序,那下再继续


//===================ID加密控制=====================================================================
  //   
   if(STM32_CMP_Encrypted_ID())
   {
      // 量产时给一些条件,条件满足就对ID加密,加密完后,你也可以让它自宫。
      if(XXXXXX)
      {
         STM32_Encrypted_ID();   // 加密ID
         自宫
    }


//===================正常运行时==================================  

// 校验一下ID是否正确,
   if(STM32_CMP_Encrypted_ID())
   {
      来到这里嘛,当然不正确咯,你别让程序死在这哦,太明显了,很容易找到是你干的,
    那么,一个系统肯定有一些参数才能运行的,你可以改变一些参数,这可以让系统
    有时正常有时不正常,,呵呵,要查也不是那么容易的事了

}
沙发
qbasicljx| | 2016-7-19 10:27 | 只看该作者
我在check id 里面做的事情就是 ucos 申请内存 申请内存 哈哈哈
死机的位置 千奇百怪

使用特权

评论回复
板凳
大道至简| | 2016-7-19 13:46 | 只看该作者

使用特权

评论回复
地板
598330983| | 2016-7-20 00:22 | 只看该作者
加密也没用吧,除非你一个一个的编译,一个一个的生产。

使用特权

评论回复
5
cgd| | 2016-7-20 09:39 | 只看该作者

使用特权

评论回复
6
qbasicljx| | 2016-7-20 10:50 | 只看该作者
598330983 发表于 2016-7-20 00:22
加密也没用吧,除非你一个一个的编译,一个一个的生产。

怎么没有用,唯一id不同的
第一次上电利用唯一id加密,将加密内容写入 flash 或者 e2rom ...各种地方,
然后擦除 加密部分的程序 擦除

使用特权

评论回复
7
neeringstu| | 2016-7-20 14:33 | 只看该作者
想请教 加密有什么意义,是不是行业里面竞争对手太多了

使用特权

评论回复
8
598330983| | 2016-7-22 07:10 | 只看该作者
加密后,如果人家复制走程序,是不是没**常运行了。

使用特权

评论回复
9
qbasicljx| | 2016-7-22 10:38 | 只看该作者
598330983 发表于 2016-7-22 07:10
加密后,如果人家复制走程序,是不是没**常运行了。

如果就是单纯的拷贝出里面的代码,只能烧录回来原来的芯片(唯一id一样)可以正常运行
烧录到别的芯片当然就无**常运行了

使用特权

评论回复
10
598330983| | 2016-7-22 20:18 | 只看该作者
qbasicljx 发表于 2016-7-22 10:38
如果就是单纯的拷贝出里面的代码,只能烧录回来原来的芯片(唯一id一样)可以正常运行
烧录到别的芯片当然就 ...

噢,那就是起到了加密的作用了。

使用特权

评论回复
11
yinhaix| | 2016-7-25 17:20 | 只看该作者
看看,,,,,,,,,,

使用特权

评论回复
12
meijc119| | 2019-9-9 14:58 | 只看该作者
这样做也好**的,发给我,我就可以**了,Q5225016

使用特权

评论回复
评论
meijc119 2019-11-5 08:55 回复TA
开发人员一般设计软件加密方法:读id---复杂算法计算---对比之前存储的对应数据(与id相关)---判断芯片是否合法。 由于读id时很多人直接用id起始地址,例如0x1FFFF7E8,破解的人只要把这个数据改成0x8000020,并且0x8000020程序区域填上 母片的id,不管你的算法有多复杂,这时你的程序就被破解了,改这种软件加密一分钟就改好了。所以千万注意程序里面不要 出现id起始地址。 用以...  
13
meijc119| | 2019-11-5 08:56 | 只看该作者
开发人员一般设计软件加密方法:读id---复杂算法计算---对比之前存储的对应数据(与id相关)---判断芯片是否合法。
由于读id时很多人直接用id起始地址,例如0x1FFFF7E8,**的人只要把这个数据改成0x8000020,并且0x8000020程序区域填上
母片的id,不管你的算法有多复杂,这时你的程序就被**了,改这种软件加密一分钟就改好了。所以千万注意程序里面不要
出现id起始地址。
用以下方法相对比较难了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

721

帖子

1

粉丝