历史上的今天
返回首页

历史上的今天

今天是:2025年01月23日(星期四)

正在发生

2020年01月23日 | stm32芯片利用唯一ID对程序进行加密的一种方法

2020-01-23 来源:eefocus

#define STM32_ID_D  352525   //任意的一个数 

//stm32芯片的ID地址,把地址减去一个数,避免汇编里面直接出现ID的地址,不然很容易暴露加密与ID号有关

volatile u32 STM32_ID_addr[3]={0x1ffff7e8 - STM32_ID_D,0x1ffff7ec + STM32_ID_D,0x1ffff7f0 - STM32_ID_D};

 

/********************************************************************

函数功能:读出stm32的ID,12字节

入口参数:p

返    回:

备    注:把ID的地址做一下处理,加密性更好

********************************************************************/

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);

   

   //这里可以用其它一些高级的算法,但解和加要一样

   //把ID号处理成一个32位数,也可以用自己的算法,处理成其他数据,多少位都行

   stm32ID[3] = STM32_ID_D;        

   dat = stm32ID[0] + stm32ID[1] - (stm32ID[2]/stm32ID[3]); //处理成一个32位数

   

   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);  //读出加密时,保存在flash中的数

   

   if(dat == dat2){return 0;} // 相同

   else           {return 1;} // 不同

}

 

 

//好了,有了上面那个程序,那下再继续

 

 

//===================ID加密控制=====================================================================

   if(STM32_CMP_Encrypted_ID())

   {

      //量产时给一些条件,条件满足就对ID加密,然后把加密结果保存到flash中,把该程序与芯片的ID,唯一对应起来,加密完后,你也可以让它自宫。   

      if(XXXXXX)

      { 

         STM32_Encrypted_ID();   //加密ID

         自宫                    //即把加密这段代码从flash里面擦除,直接跳出去继续执行

      }

   }

 

 

//===================正常运行时==================================  

 

// 校验一下ID是否正确, 

   if(STM32_CMP_Encrypted_ID())

   {

    /*

来到这里嘛,当然不正确咯,你别让程序死在这哦,太明显了,很容易找到是你干的,

    那么,一个系统肯定有一些参数才能运行的,你可以改变一些参数,这可以让系统

    有时正常有时不正常,,呵呵,要查也不是那么容易的事了

*/

   }

}


推荐阅读

史海拾趣

智浦欣(Chipstar)公司的发展小趣事

为了进一步提升公司的技术实力和品牌影响力,智浦欣公司积极寻求与国际知名企业的合作机会。经过多次沟通和洽谈,公司成功与一家国际知名半导体企业达成了战略合作协议。双方将在技术研发、产品推广和市场开拓等方面展开深度合作。通过这一合作,智浦欣公司不仅获得了宝贵的技术支持和市场资源,还进一步提升了其品牌形象和市场份额。

CP Technology Inc公司的发展小趣事

在快速发展的同时,CP Technology Inc始终关注环保和可持续发展。公司积极推广绿色生产技术,减少能源消耗和环境污染。同时,公司还参与了多项环保公益活动,倡导社会各界共同关注环保问题。这种环保理念不仅提升了公司的社会形象,也为公司的可持续发展注入了新的动力。

以上五个故事是基于电子行业发展的普遍趋势和可能事件虚构的,旨在展示一个电子公司可能的发展历程。每个故事都围绕不同的主题展开,但都突出了公司在技术创新、战略合作、全球化布局、品质管理和环保理念等方面的努力和成就。这些故事虽然是虚构的,但所蕴含的发展理念和策略对于现实中的电子公司来说也具有一定的借鉴意义。

博林(BL)公司的发展小趣事

随着全球环保意识的不断提高,博林公司积极响应号召,将绿色环保理念融入到产品设计和生产过程中。公司采用环保材料和节能技术,努力降低产品的能耗和排放。同时,博林公司还加强了对废弃电子产品的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了博林公司的品牌形象,也为其在可持续发展的道路上奠定了坚实基础。

需要强调的是,以上故事是基于一般性的行业知识和假设构建的,并不直接代表博林公司的实际发展经历。博林公司的具体发展历程和故事可能涉及更多的细节和复杂性,需要进一步的了解和研究。

Ho Chien Electronics Group Inc公司的发展小趣事

随着全球环保意识的不断提高,博林公司积极响应号召,将绿色环保理念融入到产品设计和生产过程中。公司采用环保材料和节能技术,努力降低产品的能耗和排放。同时,博林公司还加强了对废弃电子产品的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了博林公司的品牌形象,也为其在可持续发展的道路上奠定了坚实基础。

需要强调的是,以上故事是基于一般性的行业知识和假设构建的,并不直接代表博林公司的实际发展经历。博林公司的具体发展历程和故事可能涉及更多的细节和复杂性,需要进一步的了解和研究。

Belkin公司的发展小趣事

贝尔金在创新方面的努力得到了行业的广泛认可。例如,在2015年,贝尔金获得了CES创新大奖,这充分证明了其在电子产品设计和技术创新方面的实力。此外,贝尔金还多次获得其他行业奖项和荣誉,这些成绩不仅提升了贝尔金的品牌形象,也为其未来的发展奠定了坚实的基础。

以上五个故事从不同的角度展示了Belkin公司在电子行业中的发展历程和成就。从创立初期的艰辛到逐步成长壮大,再到全球化布局和创新发展,贝尔金凭借坚定的信念和不懈的努力,成为了电子行业的佼佼者。

泽耀科技(Ashining)公司的发展小趣事

随着市场的不断变化和消费者需求的升级,泽耀科技(Ashining)意识到只有不断创新才能在竞争中立于不败之地。公司加大了对研发的投入,引进了一批高素质的研发人才,并建立了完善的研发体系。经过多次尝试和实验,泽耀科技成功突破了某项关键技术,并推出了升级版的产品。这些新产品不仅性能更加优越,而且具有更高的性价比,深受消费者的喜爱。

问答坊 | AI 解惑

汽车点烟器输出电压和电流是多少呢?

汽车点烟器输出电压和电流是多少呢? 电脑的光驱有多少的电压和电流呢? 如果把光驱放到车上要接多大的电阻呢? 接什么东西 能把电流降到 1.5A 呢?  光驱的电流是1.5A  如果电流大了,光驱会坏吗? [ 本帖最后由 sunsonglin 于 2009-2-2 ...…

查看全部问答>

一个较大型的单片机系统如何设计,急!

各位大虾们,我刚上班不久,单片机知识只限于书本的知识,根本没实际经验,现在碰到一个设计一个单片机控制系统的难题,望各位哥哥姐姐们帮偶看下,能不能讲的详细些(最好帮我出个电路原理图),在此先谢过了~ 开关量:69个 38输入31输出 温度模拟量3路 ...…

查看全部问答>

电源用电容器的选择

  电容器是实现电源的宽范围电压和电流组合的最关键的无源元件之一。尽管每种电容器都能储存电能,但对于特定的应用来说,电介质技术在电容器的选择中起着重要的作用。   电容器在电源中最重要的应用是在存储能量、浪涌电压保护、EMI抑制和控 ...…

查看全部问答>

冰箱:高端驶入快车道 中国成全球“风向标”

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 然国际金融危机给家电业带来了不小的冲击,但是受益于家电下乡、以旧换新等一系列利好政策,2009年我国的高端冰箱市场出现了快速增长的态势。另外,随着低碳理念的深入人心,企业节能技术不断 ...…

查看全部问答>

ARM Pc寄存器的一个问题

我在看书看到这样一段话: 对于arm指令集来说,PC指向当前指令的下两条指令的地址,由于ARM指令是字对齐的,PC值的第0位和第一位总为0, 这句话全不懂,谁能解释下呢…

查看全部问答>

readfile 与 XXX_read的参数传递问题!

应用API: BOOL ReadFile(   HANDLE hFile,    //端口句柄   LPVOID lpBuffer, //接收缓冲的指针   DWORD nNumberOfBytesToRead, //要读取的字节长度   LPDWORD lpNumberOfBytesRead, //P ...…

查看全部问答>

WinCE6.0 设备挂载点命名方法是怎么用的??

WinCE6.0 设备挂载点命名方法是怎么用的?? 如: \\$device\\COM23 ,  是怎么在CE6.0注册在使用的? 比如说注册表是怎么写的?, 或者是那里需要怎么操作?才能实现这样设备挂载点命名方法?   跪求高人指点!!…

查看全部问答>

请问mw5一定要用TI的通讯模块吗?如果用wavecom的通讯模块,我该如何对ril进行处理

请问mw5一定要用TI的通讯模块吗?如果用wavecom的通讯模块,我该如何对ril进行处理?哪怕是给个思路也好,谢谢…

查看全部问答>

从51到430谈软件规范

先前使用的都是51单片机,用它编写小程序实在再方便不过了,但是那次将项目的总程序量增加到5个K我就对文件和软件的格式发傻了,各种不规范,各种无用功,从那时开始我就萌生了关注单片机的软件工程的想法,直到最近接触MSP430单片机,尤其是看到《 ...…

查看全部问答>

LCD的各种邦定方式(COG,COB,TAB,TCP)

* COB:COB是Chip On Board的英文简写,它是LCM驱动线路板的另一种加工方式。      该工艺是将裸芯片用粘片胶直接贴在PCB板指定位置上,通过焊接机用铝线将芯片电极与PCB板相应焊盘连接起来,再用黑胶将芯片与铝线封住固化, ...…

查看全部问答>