OpenEdv-开源电子网

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

stm8加密问题,求助!!!

[复制链接]

7

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-5-5
在线时间
1 小时
发表于 2014-6-24 22:14:23 | 显示全部楼层 |阅读模式
5金钱
STM8烧录怎么加密啊? 我现在用的IAR,是不是要输出hex,再到stvd里加密?

最佳答案

查看完整内容[请看2#楼]

可以输出HEX文件后,用STVP烧录。 STVP的OPTION BYTE选项里有加密选项
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2014-3-12
在线时间
9 小时
发表于 2014-6-24 22:14:24 | 显示全部楼层
可以输出HEX文件后,用STVP烧录。
STVP的OPTION BYTE选项里有加密选项
功夫再高、也怕羊刀
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-6-24 23:22:20 | 显示全部楼层
可以设置读保护吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-8-28
在线时间
0 小时
发表于 2014-8-28 21:12:31 | 显示全部楼层
void FlashReadProtect(void)//设置读保护

  FLASH_Unlock(FLASH_MEMTYPE_DATA);
  if(FLASH_ReadOptionByte(0x4800)!=0xaa)
  {
   FLASH_ProgramOptionByte(0x4800, 0xaa); 
  }
  FLASH_Lock(FLASH_MEMTYPE_DATA); 
}


行业手持机,微型蓝牙打印机,微型条码打印机,58mm/80mm热敏打印模块,EPSON针式打印模块,串口磁条卡解码模块,ID、IC卡等RFID模块、读卡器,指纹识别模块
http://shop108236635.taobao.com/
诚接代理,开发定制
回复

使用道具 举报

2

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2018-5-30
在线时间
36 小时
发表于 2019-11-8 09:11:23 | 显示全部楼层
#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);//和算法结果不正确,进行错误分支
        }
}
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 12:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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