完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
// 把地址直接减去一个数是不要在程序中直接出现这个地址
#define STM32_ID_D 352525 // 任意的一个数 volatile u32 STM32_ID_addr[3]={0x1ffff7e8 - STM32_ID_D,0x1ffff7ec + STM32_ID_D,0x1ffff7f0 - STM32_ID_D}; /******************************************************************** 函数功能:读出ID 入口参数:p 返 回: 备 注: ********************************************************************/ volatile void STM32_Read_ID(volatile u32 *p) { volatile u32 Addr; // 因为不想让程序在反汇编后直接找到这个地址,所以这个地址是运算出来的, // 跟STM32_ID_addr反运算,当然了也可以用高级的算法,注意不能让编译器优化这个地址 Addr = STM32_ID_addr[0] + STM32_ID_D; p[0] = *(vu32*)(Addr); Addr = STM32_ID_addr[1] - STM32_ID_D; p[1] = *(vu32*)(Addr); Addr = STM32_ID_addr[2] + STM32_ID_D; p[2] = *(vu32*)(Addr); } /******************************************************************** 函数功能:加密ID并保存 入口参数: 返 回: 备 注: ********************************************************************/ void STM32_Encrypted_ID(void) { u32 stm32ID[4],dat; STM32_Read_ID(stm32ID); // 这里可以用其它一些高级的算法,但解和加要一样 stm32ID[3] = STM32_ID_D; dat = stm32ID[0] + stm32ID[1] - (stm32ID[2]/stm32ID[3]); FLASH_Unlock(); FLASH_ErasePage (STM32FLASH_EN_ID_START_ADDR); // FLASH_ProgramWord(STM32FLASH_EN_ID_START_ADDR,dat); // 保存这个数,写进32位 FLASH_Lock(); } /******************************************************************** 函数功能:比较加密ID,正确返回0 入口参数: 返 回:1:不正确,0:正确 备 注: ********************************************************************/ u32 STM32_CMP_Encrypted_ID(void) { u32 stm32ID[4],dat,dat2; STM32_Read_ID(stm32ID); // 这里可以用其它一些高级的算法,但解和加要一样 stm32ID[3] = STM32_ID_D; dat = stm32ID[0] + stm32ID[1] - (stm32ID[2]/stm32ID[3]); dat2 = *(u32*)(STM32FLASH_EN_ID_START_ADDR); if(dat == dat2){return 0;} // 相同 else {return 1;} // 不同 } 好了,有了上面那个程序,那下再继续 //===================ID加密控制===================================================================== // if(STM32_CMP_Encrypted_ID()) { // 量产时给一些条件,条件满足就对ID加密,加密完后,你也可以让它自宫。 if(XXXXXX) { STM32_Encrypted_ID(); // 加密ID 自宫 } //===================正常运行时================================== // 校验一下ID是否正确, if(STM32_CMP_Encrypted_ID()) { 来到这里嘛,当然不正确咯,你别让程序死在这哦,太明显了,很容易找到是你干的, 那么,一个系统肯定有一些参数才能运行的,你可以改变一些参数,这可以让系统 有时正常有时不正常,,呵呵,要查也不是那么容易的事了 } |
|
相关推荐
|
|
呵呵,太坏了。话说电工也要保护自己的劳动成果啊。
|
|
|
|
|
|
高
|
|
|
|
|
|
这个也不难破解的,Q5225016
|
|
|
|
|
|
程序里面不要直接出现id地址,1FFFF7E8 1FFFF7EC 1FFFF7F0,不然很容易被破解
|
|
|
|
|
|
386 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1670 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1123 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1005 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1229 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12018 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 11:26 , Processed in 0.697402 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号