OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13706|回复: 32

关于stm32量产加密的及相关问题向原子兄请教

[复制链接]

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2013-8-18
在线时间
8 小时
发表于 2013-9-16 11:05:16 | 显示全部楼层 |阅读模式


本人初次用STM32开发,现在基本完成到收尾阶段了,不想自己辛苦的成果在市面被人轻易破解。

怎么加密的及相关问题向原子兄请教,

先说下我的加密思路:用ID加算法的形式。

利用现有的开关,另外牺牲两个I/O口.

把开关拨到某档,把两个I/O短路,第一次上电后,程序进入读取ID,存储ID到指定的地方,然后正常运行。

再断开电源,把开关拨到另外档,保存其他不动,第二次上电,比较第一次的结果,如果不对,就跳过读ID,直接正常运行,如果对就再次读取ID,存储ID到另外指定的地方,然后正常运行。

相当于存储两次。

最后断开两个I/O, 正常上电运行程序,程序在多个地方比较ID,不对的话,有时候不执行功能,有时候又执行功能,给人一种不稳定的假象。

向原子兄请教如下问题:

 原子兄对加密有没有独特的方法。

 怎么把"0xFF"一个数据表定义到指定的地址 (用于程序里存储ID时,改写成ID)
 
 另外一个就是JLink v8 SWD模式是否可以擦除加了读保护的IC(方便以后升级)
 
 ps:本人有些懒惰,学技不细心,这些是可以找资料解决的,想原子兄帮忙解答一下,同时也非常感谢原子兄在开发过程遇到问题的的解答!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-16 11:14:32 | 显示全部楼层
这个问题,刚好12号ST的宣讲会讲了。
方法:
1,ST自带了加密设置,有个PDR寄存器吧,可以设置三级加密,如果你代码都写好了,直接设置到LEVE2,那就stm32变砖头了,再也无法下载代码,无法读取里面的内容了。
2,利用自身的UID加密,可以在程序里面判断UID是不是正确的,才执行后续代码。
3,对UID进行加密,再解密对比,进一步提高破解复杂度。
4,对UID进行加密解密,然后程序做伪装,就是你不是正确的UID,我也可以给你跑,给破解者破解成功的假象,但是某些功能就让他跑不正常,让其痛苦不堪。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 2 反对 0

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2013-9-16 17:50:47 | 显示全部楼层
好,加密加精 啊
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-16 22:12:48 | 显示全部楼层
回复【3楼】ST-FAE-SALE:
---------------------------------
呵呵,我也是借花献佛
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2013-8-18
在线时间
8 小时
 楼主| 发表于 2013-9-18 08:48:06 | 显示全部楼层
这两天没时间来看,谢谢原子兄的解答,

我不想把它加密到LEVE2,那样就没有办法升级(其实是考虑程序有BUG,后面还有机会改),

另外请原子兄,说说另外两点。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-18 10:38:47 | 显示全部楼层
回复【5楼】xxiangj:
---------------------------------
就是利用STM32的UID加密啊
比如main函数开始的时候,加一句:
if(UID=正确的UID)运行后面代码;
else 不理会/运行错误的代码;
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-2-17
在线时间
0 小时
发表于 2014-3-26 16:49:58 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
麻烦问下原子,那个第一条,是哪个寄存器啊,找了找,没找到啊。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-26 20:57:31 | 显示全部楼层
回复【7楼】 随便叫吧 :
---------------------------------
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2014-2-17
在线时间
0 小时
发表于 2014-3-27 14:23:56 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
谢谢原子,我去看看。
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2014-6-5 17:01:53 | 显示全部楼层
回复【8楼】正点原子: 
---------------------------------
原子哥,如果只使用Flash读保护后,还存在哪些被别人破解的隐患?

 /**
  * @brief  Enables or disables the read out protection.
  * @note   If the user has already programmed the other option bytes before calling 
  *   this function, he must re-program them since this function erases all option bytes.
  * @note   This function can be used for all STM32F10x devices.
  * @param  Newstate: new state of the ReadOut rotection.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,
  *         FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
  */
FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState)
{
  FLASH_Status status = FLASH_COMPLETE;
  /* Check the parameters */
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  status = FLASH_WaitForLastOperation(EraseTimeout);
  if(status == FLASH_COMPLETE)
  {
    /* Authorizes the small information block programming */
    FLASH->OPTKEYR = FLASH_KEY1;
    FLASH->OPTKEYR = FLASH_KEY2;
    FLASH->CR |= CR_OPTER_Set;
    FLASH->CR |= CR_STRT_Set;
    /* Wait for last operation to be completed */
    status = FLASH_WaitForLastOperation(EraseTimeout);
    if(status == FLASH_COMPLETE)
    {
      /* if the erase operation is completed, disable the OPTER Bit */
      FLASH->CR &= CR_OPTER_Reset;
      /* Enable the Option Bytes rogramming operation */
      FLASH->CR |= CR_OPTPG_Set; 
      if(NewState != DISABLE)
      {
        OB->RDP = 0x00;
      }
      else
      {
        OB->RDP = RDP_Key;  
      }
      /* Wait for last operation to be completed */
      status = FLASH_WaitForLastOperation(EraseTimeout); 
    
      if(status != FLASH_TIMEOUT)
      {
        /* if the program operation is completed, disable the OPTPG Bit */
        FLASH->CR &= CR_OPTPG_Reset;
      }
    }
    else 
    {
      if(status != FLASH_TIMEOUT)
      {
        /* Disable the OPTER Bit */
        FLASH->CR &= CR_OPTER_Reset;
      }
    }
  }
  /* Return the protection operation Status */
  return status;       
}
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2014-6-5 18:31:15 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
if(UID=正确的UID)运行后面代码;
正确的UID怎么存啊,如果是大批量生产的时候。
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2014-6-5 18:40:25 | 显示全部楼层
回复【11楼】wwjdwy:
---------------------------------
“if(UID=正确的UID)运行后面代码; 
正确的UID怎么存啊,如果是大批量生产的时候。”


同问~
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2014-6-9 16:13:05 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
同问
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-9 22:23:14 | 显示全部楼层
回复【11楼】wwjdwy:
---------------------------------
这是STM32自带的,在固定的地址,你读取就是了.
无法修改,全球唯一的ID号.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2014-6-10 14:44:21 | 显示全部楼层
回复【14楼】正点原子:
--------------------------------
正因为是唯一的ID号,所以如果这样加密的话  “  if(UID=正确的UID)运行后面代码; ”,就需要每下载一块芯片的之前,得到该芯片的UID,然后在写在程序里,那就意味着每烧写一块芯片之前就需要获取一次该芯片的UID。
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-10 23:16:59 | 显示全部楼层
回复【15楼】科科1987:
---------------------------------
是的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2014-6-11 09:33:45 | 显示全部楼层
回复【7楼】随便叫吧:
---------------------------------
应该是RDP 吧
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
发表于 2014-6-11 22:21:34 | 显示全部楼层
无论怎么加密都有被破解的可能(ps3,xbox360),只是难度不一样而已,
但有个前提是得有破解的价值,单片机的程序大多数现写都比破解来的实在,
还是好好写代码吧,比研究如何保护代码更有价值,等你的代码值得被人破解的
时候你自然就会高等级的加密了。
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-10-20
在线时间
0 小时
发表于 2014-6-11 23:50:20 | 显示全部楼层
路过标记下备用
回复 支持 反对

使用道具 举报

4

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2014-7-14
在线时间
11 小时
发表于 2015-1-26 09:53:12 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------这个好厉害,好狠, 哈哈 啊
回复 支持 反对

使用道具 举报

4

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2014-7-14
在线时间
11 小时
发表于 2015-1-26 09:54:24 | 显示全部楼层
回复【18楼】ye781205:
---------------------------------
有道理,谢谢
回复 支持 反对

使用道具 举报

17

主题

342

帖子

0

精华

高级会员

Rank: 4

积分
544
金钱
544
注册时间
2014-4-24
在线时间
20 小时
发表于 2015-4-29 10:15:19 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
最后一条确实好狠!
回复 支持 反对

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1814
金钱
1814
注册时间
2011-10-9
在线时间
230 小时
发表于 2015-4-29 18:30:01 | 显示全部楼层
...stm32的 所谓唯一ID 是可以被修改的  不信问问淘宝的破解佬就知道了
回复 支持 反对

使用道具 举报

23

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2015-6-23
在线时间
68 小时
发表于 2015-7-10 14:09:54 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
想请教获取UID的是哪个函数啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-10 23:41:47 | 显示全部楼层
回复【24楼】luyongyun:
---------------------------------
看我们USB MSC例程,里面有。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2015-6-23
在线时间
68 小时
发表于 2015-7-11 10:26:50 | 显示全部楼层
回复【25楼】正点原子:
---------------------------------
你是说MINI板的?还是战舰板的?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-11 16:35:27 | 显示全部楼层
回复【26楼】luyongyun:
---------------------------------
都可以
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2015-6-23
在线时间
68 小时
发表于 2015-7-11 22:43:45 | 显示全部楼层
回复【27楼】正点原子:
---------------------------------
看不出来是哪句,比较郁闷
回复 支持 反对

使用道具 举报

5

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2017-1-9
在线时间
27 小时
发表于 2017-3-13 11:04:35 | 显示全部楼层
luyongyun 发表于 2015-7-11 22:43
回复【27楼】正点原子:
---------------------------------
看不出来是哪句,比较郁闷

怀疑你都没有去找过。。
回复 支持 反对

使用道具 举报

5

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2017-1-9
在线时间
27 小时
发表于 2017-3-13 11:18:33 | 显示全部楼层
获取UID程序
QQ图片20170313111702.png
回复 支持 反对

使用道具 举报

33

主题

150

帖子

0

精华

高级会员

Rank: 4

积分
506
金钱
506
注册时间
2014-1-24
在线时间
102 小时
发表于 2017-5-11 10:33:03 | 显示全部楼层
正点原子 发表于 2014-6-9 22:23
回复【11楼】wwjdwy:
---------------------------------
这是STM32自带的,在固定的地址,你读取就是了.
无 ...

第一:假如量产时可以读取ID存到指定位置:if(指定地址处数据!=0XFF){写ID到指定地址};此时程序被盗走重新烧写进了新的芯片,上面的代码照样可以重新运行,没加到密啊;
第二:如果无其他空闲存储器,那么上面指定的地址应该是STM32空余的flash吧,这个只要把程序读出来,很容易发现它就是跟程序无关的存储数据,可以在上面做文章;除非可以在代码中指定地址处指定字节大小,并可以在此处编程,但是栈空间是自动分配的,怎么做到啊?
回复 支持 反对

使用道具 举报

33

主题

150

帖子

0

精华

高级会员

Rank: 4

积分
506
金钱
506
注册时间
2014-1-24
在线时间
102 小时
发表于 2017-5-11 11:28:49 | 显示全部楼层
北方的马克思 发表于 2017-5-11 10:33
第一:假如量产时可以读取ID存到指定位置:if(指定地址处数据!=0XFF){写ID到指定地址};此时程序被盗 ...

在贴吧找到了答案,多谢
回复 支持 反对

使用道具 举报

2

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2017-8-11
在线时间
21 小时
发表于 2017-12-7 18:04:02 | 显示全部楼层
北方的马克思 发表于 2017-5-11 11:28
在贴吧找到了答案,多谢

你好,可否分享下你的答案。谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 18:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表