你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在做STM32F407的程序加密时,遇到一个问题

[复制链接]
adlu 提问时间:2016-3-3 10:43 /
本帖最后由 adlu 于 2016-3-3 10:44 编辑

我想通过ID加密程序,思路如下:
程序有一个通用密码,存放在数组const char common_code[]={0x30,0x39, 0x18, 0xbb, 0x5a, 0xdd}。
程序的本机密码存储在const unsigned char encrypt_code[FLASH_SECTOR3_SIZE] __attribute__((at(ADDR_FLASH_SECTOR_3))) ={...}。
【注:程序下载进去时,common_code和encrypt_code内容相同。】

1.上电后,读取芯片ID,用ID计算出本机对应的密码my_code[]。
2.如果本机密码encrypt_code和通用密码common_code相同,则将my_code[]存储到encrypt_code[]数组。
3.如果不相同,则对比encrypt_code和my_code。如果相同则校验正确,正常运行程序;否则校验失败,擦除FLASH中的应用程序。

收藏 评论6 发布时间:2016-3-3 10:43

举报

6个回答
adlu 回答时间:2016-3-3 10:43:39
伪代码如下:

uint8_t check_ID (void)
{
    mcu_ID = *(__IO uint32_t*)(0x1FFF7A10);  // 读取芯片ID
    my_code = calculate_code(mcu_ID);            // 计算本机对应的密码
   
    if(encrypt_code == common_code) {  // 如果本机当前存储的密码为通用密码
        write_myCODE_2_encryptCODE( my_code );  // 将本机对应的密码写入密码存储区
        return 0;
   } else if (encrypt_code == my_code ) { // 如果本机当前存储的密码就是本机对应的密码
      // do nothing
       return 1;
   } else {
//      erase_user_code(); // 擦除用户程序代码
      return 2;
   }
}
adlu 回答时间:2016-3-3 10:44:04
本帖最后由 adlu 于 2016-3-3 10:48 编辑

问题,程序运行时,check_ID( ) 返回的永远是0。
仿真的时候,程序第一次运行check_ID( ) 函数时,encrypt_code 和 common_code 确实相等,仿真复位后,运行第二次时,encrypt_code 和 common_code 是不相等的,但是仍然返回0。

我猜测的可能原因是,因为encrypt_code和common_code都是从const型数据,且定义时他们的内容相同,
因此编译器认为(encrypt_code == common_code) 是永远成立的,将后面的else if () {...} 和else {...}给忽略了。

不知道我的猜测可对?
这个问题该怎么解决呢?



zipl1985 回答时间:2016-3-3 15:31:32
学习了,谢谢了,啊
adlu 回答时间:2016-3-4 08:42:13
问题已经解决,确实是MDK编译器优化造成的。
原来我把上面的变量和函数都放在一个文件里,只给外部函数提供一个check_ID( )函数接口,因此出现上述问题。
解决办法是:
将该文件相关的变量用volatile进行定义,并在头问题中声明;
将check_ID( )里面的判断放到其他文件中进行。
这样编译器就不会把他们优化了。
ele1 回答时间:2016-8-4 19:51:25
你好,可以提供源代码,借鉴一下吗?非常感谢
meifan119 回答时间:2020-8-19 15:47:53
mcu_ID = *(__IO uint32_t*)(0x1FFF7A10);  // 读取芯片ID
程序里面直接出现了0x1FFF7A10,如果破解的人把0x1FFF7A10改成0x800f000,再在0x800f000这个地址上放上你的母片id,你的程序就破解了,所以不要直接出现id地址,这种程序破解只要几百
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版