打印
[STM8]

求教STM8 如何加密,不让别人读走程序

[复制链接]
11207|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gt23010|  楼主 | 2014-6-25 15:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟用STM8帮别人做了一个东西,做好后人家需要测试,我怕把我的程序直接从CUP读走,听说
STM8 可以再程序里加密,还有用STVP 下载的时候可以选择 禁止读取程序,不知道 这两个功能具体怎么实现
请教高人指点。
沙发
mmuuss586| | 2014-6-25 15:40 | 只看该作者
下载的时候开启Option位选的那个保护位;

使用特权

评论回复
板凳
电子云图| | 2014-6-26 08:02 | 只看该作者
读保护位开启,用96bit ID号软件加密,双重保护

使用特权

评论回复
地板
gt23010|  楼主 | 2014-6-26 14:33 | 只看该作者
电子云图 发表于 2014-6-26 08:02
读保护位开启,用96bit ID号软件加密,双重保护

用96bit ID号加密 这个怎么做 还需具体说下谢谢

使用特权

评论回复
5
gt23010|  楼主 | 2014-6-26 14:34 | 只看该作者
电子云图 发表于 2014-6-26 08:02
读保护位开启,用96bit ID号软件加密,双重保护

用96bit ID号软件加密 能具体点吗? 谢谢

使用特权

评论回复
6
电子云图| | 2014-6-26 14:48 | 只看该作者
读出ID,运算,保存结果到EEPROM,单片机采用相同的运算,得到结果,两个结果对比。

使用特权

评论回复
7
大秦正声| | 2014-6-26 15:05 | 只看该作者
mmuuss586 发表于 2014-6-25 15:40
下载的时候开启Option位选的那个保护位;

就是的!

使用特权

评论回复
8
maxwizwiz| | 2014-6-26 16:27 | 只看该作者
使用我们的烧录器,有加密和远程加密控制功能。 你把程序下到我们的烧录器然后连同烧录器一起给客户。 客户只能烧IC,不能读程序。 而且还可以控制数量。

使用特权

评论回复
9
icecut| | 2014-6-26 16:28 | 只看该作者
用定时器,运行时间超过n久之后就随机出错一次.

使用特权

评论回复
10
maxwizwiz| | 2014-6-26 16:29 | 只看该作者


WizPro200ST8  支持ST8,ST32系列MCU; 针对不同原厂的专用量产型烧录器;
支持裸片(需配座子)和在板烧写;
支持联机,脱机烧写;
支持序列号的设定,地址任意选择;
支持烧写数量控制;
数据加密存储并支持远程加密下载控制。

MaxWiz 迈斯威志科技

使用特权

评论回复
11
ql1000| | 2016-9-2 15:02 | 只看该作者
学习学习

使用特权

评论回复
12
mcuisp| | 2016-9-2 15:19 | 只看该作者
使用我们的烧录器,有加密和远程加密控制功能。 你把程序下到我们的烧录器然后连同烧录器一起给客户。 客户只能烧IC,不能读程序。 而且还可以控制数量。

8楼同行,上面是照抄了,哈哈。

下面的不是照抄:
可以把烧录器给客户,然后发送加密的文件给客户自行下载到烧录器。同样保密,控制数量,更方便

使用特权

评论回复
13
yichunshan| | 2016-9-2 16:05 | 只看该作者
用编程器下载程序时候可以使能读保护把?
反正我用ST-LINK是可以的

使用特权

评论回复
14
meijc119| | 2018-6-6 13:18 | 只看该作者
提供单片机id加密安全性测试,加密芯片应用服务
id加密是比较好的程序加密方式,但有些开发人员做软加密过程太简单了,
**软加密难度非常低,提供id加密安全性测试。各种id加密方式咨询,QQ:9272078

id加密方法咨询,id加密程序测试

使用特权

评论回复
15
wowu| | 2018-6-14 20:36 | 只看该作者
路过顺便学习

使用特权

评论回复
16
meijc119| | 2019-11-8 09:03 | 只看该作者
#define ID_ENCRYPT_EOR_RESULT_ADDRESS (0x9ff0)
#define ID_ENCRYPT_ADD_RESULT_ADDRESS (0x9ff4)
void Stm8s103EncryptDemo(void)
{
        uint32 *u16IdAddress;
  uint16 u32EorRslt, u16AddRslt;
      
        //千万别显式的读取ID,即要把0x4865运算成隐式的,例如此例中0x4865 = (0x1194 * 4) + 0x215;
        //这样,别人就算**出了你的程序,也查找不到0x4865,这样就不能轻易的软解密,这样处理后如果要软解密,
        //一定要反汇编出来进行复杂逆向分析,难度极大,代价极高,很难搞定软加密了,达到保护产品的目的。
        gU16IdAdressVar = 0x1194;
        gU16IdAdressVar <<= 2;
        u16IdAddress = (uint16*)(gU16IdAdressVar + 0x215);//0x4865
      
        //读取单片机的ID,并进行运算,具体算法可以自己定,这里只用到简单的异或及和运算
        u16EorRslt = (*u16IdAddress) ^ (*(u16IdAddress + 1)) ^ (*(u16IdAddress + 2));
        u16AddRslt = (*u16IdAddress) + (*(u16IdAddress + 1)) + (*(u16IdAddress + 2));
        //进行对比,如果运算结果与FLASH保存的结果不一样,说明非法,运行错误代码
        if(u16EorRslt != *((uint16*)ID_ENCRYPT_EOR_RESULT_ADDRESS))
        {
                while(1);//异或算法结果不正确,进行错误分支
        }
        if(u16AddRslt != *((uint32*)ID_ENCRYPT_ADD_RESULT_ADDRESS))
        {
                while(1);//和算法结果不正确,进行错误分支
        }
}

使用特权

评论回复
17
meijc119| | 2021-1-4 09:25 | 只看该作者
1,如果板子上有外部存储器,可以先编写一个程序,利用算法把id计算得到一些值存入外部存储器,然后再烧写真正的程序,真正的程序去校验外部存储器的数据是否合法即可

2,利用板子上按键组合,或是上电按住某些键,程序在这个时候利用算法把id计算得到一些值存入程序区(stm8为EE区),程序运行时去验证程序区数据是否正确

3,轩微编程器有软件加密的功能,编程器会读芯片id,根据算法直接改写缓冲区,达到软件加密的作用

4,读出的id通过一定算法,例如异或加上一个数,得到的数据存入flash(只运行一次,运行后标志位也存入flash),下次读到这个标志位,就不运行这个程序。//Q9272078

四、做软件加密时注意
1,不要在程序中直接出现id地址,例如STM32:1FFFF7E8 1FFFF7EC 1FFFF7F0   STM8: 0x4865~0x4870
2, 利用校验和或是crc对程序区进行校验,防止改程序

使用特权

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

本版积分规则

15

主题

43

帖子

2

粉丝