OpenEdv-开源电子网

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

软件加密,限制编程次数

[复制链接]

3

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2013-5-2
在线时间
23 小时
发表于 2013-6-9 15:22:43 | 显示全部楼层 |阅读模式
现在一些客户,拿了样品之后,就去破解,要怎样在程序中限制写入次数,而不是通过编程器设置,比如每烧1千片之后,只能重新编译过,程序后才能用,没有外挂万年历,只有STM32芯片
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-6-9 16:06:41 | 显示全部楼层
用STM32自身 的 ID加密,
可以 设置一定的 ID区域, 你自己这一批芯片的区域都在内部
超出这个区域 就不工作 
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2013-5-2
在线时间
23 小时
 楼主| 发表于 2013-6-9 16:12:15 | 显示全部楼层
回复【2楼】aleda303:
---------------------------------
一个批次芯片的ID是有规律的吗?难道ID号不是随机的?
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-6-9 16:21:05 | 显示全部楼层
一个批次的 是有规律的 。 除非你买的是散货

你读下不同批次的 对比下
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2013-5-2
在线时间
23 小时
 楼主| 发表于 2013-6-9 16:24:53 | 显示全部楼层
回复【4楼】aleda303:
---------------------------------
那还有其他方法吗? 有些客户是每次把软件发过去的,芯片他自己买,就是发过去的文件是用特定编程器,然后在编程器里设置次数了的那种的话,我们就不知道ID号了
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-6-9 16:26:56 | 显示全部楼层
那个 只能在你的 编译软件或者编译器里面改动。 芯片里面没办法。
可以自己做个编译软件。

要不 就让客户提供 芯片ID。按芯片ID数量收钱
在程序里面 做加密算法。
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-6-9 16:29:19 | 显示全部楼层
这个是我原来做的一个 针对STM32的 key 生成器 , 你可以参考下

Project1.exe

1.09 MB, 下载次数: 319

回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2013-5-2
在线时间
23 小时
 楼主| 发表于 2013-6-9 16:30:25 | 显示全部楼层
回复【6楼】aleda303:
---------------------------------
哦,谢谢,还没到自己做编译软件那种火候,哈哈
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-6-9 16:31:26 | 显示全部楼层
方案 是 客户 给提供 ID 我按ID提供 key 这样 他生产多少都有控制
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-6-9 16:32:36 | 显示全部楼层
呵呵 , 可以合作啊 哈哈
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2013-5-2
在线时间
23 小时
 楼主| 发表于 2013-6-9 16:33:26 | 显示全部楼层
回复【9楼】aleda303:
---------------------------------
好,参考下,现在写程序的矛与盾真的很矛盾啊!!
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-6-9 16:34:52 | 显示全部楼层
是啊 , 我这个方案 就是原来 用来限制 客户生产的。 当时的合作方式就是按量计价。
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-6-11 16:48:29 | 显示全部楼层
你们聊得这么火,有没什么好项目 介绍 做做啊,最近有点闲
1-1
回复 支持 反对

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2012-4-15
在线时间
16 小时
发表于 2013-6-13 15:32:41 | 显示全部楼层
可是客户会给你芯片的ID吗?本来就是调试来着
回复 支持 反对

使用道具 举报

2

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2018-5-30
在线时间
36 小时
发表于 2019-9-1 09:31:32 | 显示全部楼层
//STM32F10X软加密方法及实例代码

#define ID_ENCRYPT_EOR_RESULT_ADDRESS (0x0800F000)
#define ID_ENCRYPT_ADD_RESULT_ADDRESS (0x0800F004)
volatile uint32 gU32IdAdressVar;//这里一定要定义此变量,否则会被优化器优化掉
void Stm32F10xEncryptDemo(void)
{
        uint32 *u32IdAddress;
  uint32 u32EorRslt, u32AddRslt;
        #IF 0
        //如果直接赋值0X1FFFF7E8,则程序编译结果里会有0X1FFFF7E8,这样破解人员会很轻松
        //的找到这个内容,然后非常容易进行修改,去掉软加密
        u32IdAddress = (uint32*)0x1ffff7e8;
        #else
        //千万别显式的读取ID,即要把0X1FFFF7E8运算成隐式的,例如此例中0x1FFFF7E8 = (0x455873a * 4) + 0xEA9DB00;
        //这样,别人就算破解出了你的程序,也查找不到0X1FFFF7E8,这样就不能轻易的软解密,这样处理后如果要软解密,
        //一定要反汇编出来进行复杂逆向分析,难度极大,代价极高,很难搞定软加密了,达到保护产品的目的。
        gU32IdAdressVar = 0x455873a;
        gU32IdAdressVar <<= 2;//0x11561CE8
        u32IdAddress = (uint32*)(gU32IdAdressVar + 0xEA9DB00);//0x1ffff7e8
        #endif
        //读取单片机的ID,并进行运算,具体算法可以自己定,这里只用到简单的异或及和运算
        u32EorRslt = (*u32IdAddress) ^ (*(u32IdAddress + 1)) ^ (*(u32IdAddress + 2));
        u32AddRslt = (*u32IdAddress) + (*(u32IdAddress + 1)) + (*(u32IdAddress + 2));
        //进行对比,如果运算结果与FLASH保存的结果不一样,说明非法,运行错误代码
        if(u32EorRslt != *((uint32*)ID_ENCRYPT_EOR_RESULT_ADDRESS))
        {
                while(1);//异或算法结果不正确,进行错误分支
        }
        if(u32AddRslt != *((uint32*)ID_ENCRYPT_ADD_RESULT_ADDRESS))
        {
                while(1);//和算法结果不正确,进行错误分支
        }
}
回复 支持 反对

使用道具 举报

2

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2018-5-30
在线时间
36 小时
发表于 2019-9-1 09:32:19 | 显示全部楼层
aleda303 发表于 2013-6-9 16:31
方案&nbsp;是&nbsp;客户&nbsp;给提供&nbsp;ID&nbsp;我按ID提供 key 这样&nbsp;他生产多少都有控制

可以通过改软件,使你的程序是一个母片的id,这样就破解了
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2019-9-1 23:30:01 | 显示全部楼层
meijc119 发表于 2019-9-1 09:32
可以通过改软件,使你的程序是一个母片的id,这样就破解了

上传接口也可以加密。 key生成器上面需要解密再 生成。
底层的程序需要自己控制。
回复 支持 反对

使用道具 举报

2

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2018-5-30
在线时间
36 小时
发表于 2019-9-2 08:11:54 | 显示全部楼层
aleda303 发表于 2019-9-1 23:30
上传接口也可以加密。 key生成器上面需要解密再 生成。
底层的程序需要自己控制。

你没明白你的意思,通过你的key生成器破解好的芯片是不是好用的,这个好用的芯片拿去解密,解密好的程序再通过改程序达到原来那个好用的芯片一样的id,那这个改过的程序写到另外空片里面就会好用
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 05:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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