STC单片机唯一ID保护的例子及思路

合集下载

基于STC89C52单片机的电子密码锁(完整版) 附 仿真图 原理图

基于STC89C52单片机的电子密码锁(完整版) 附 仿真图 原理图
1.2国内外研究现状
随着人们对安全的重视和科技的发展,许多电子智能锁已在国内外相继面世。但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。而且指纹识别器,若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。加上其成本较高,一定程度上限制了这类产品的普及和推广。电子锁,由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的欢迎。
鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。目前,在西方发达国家,电子密码锁的技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。在我国电子锁整体水平尚处于国际上70年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。国内的不少企业也引进了世界上先进的技术,发展前景非常可观。
电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。电路框图如图2.2所示。
图2.2 密码锁电路
1)整体结构设计
电子密码锁包括键盘控制、密码设置和报警提示三大功能模块。
2电子密码锁的
2.1
选用单片机STC89C52作为本设计的核心元件,利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确ቤተ መጻሕፍቲ ባይዱ,实现基本的密码锁功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接LCD显示器用于显示作用。框图如下图2.1所示。

stc单片机解密方法

stc单片机解密方法

stc单片机解密方法STC单片机解密方法1. 引言STC单片机是市场上应用广泛的一款单片机系列,具有强大的功能和灵活的应用场景,但也因其内部代码加密保护而让一些研究者和开发者面临一定的困扰。

本文将详细介绍几种STC单片机解密方法。

2. 软件解密方法源码逆向工程源码逆向工程是一种常见的软件解密方法,通过对编译后的程序进行反汇编、分析和逆向推导,可以还原出程序的源代码。

对于STC 单片机,可以使用一些逆向工程软件如IDA Pro、Ghidra等对其固件进行分析,以获取相关的解密算法。

破解工具一些破解工具如STC-ISP、STC-Loader等,可以直接读取STC单片机的Flash内存,并将其中的加密固件下载到计算机进行解密。

这些工具通常会利用芯片的漏洞或者通信接口,如串口或者ISP下载接口,获取到加密的固件,并进行解密。

需要注意的是,使用破解工具进行解密需要一定的技术水平和设备支持。

3. 硬件解密方法电压破解电压破解是一种常见的硬件解密方法,通过对芯片进行实验室环境下的电压监测和干扰,获取到芯片内部的数据和计算过程。

对STC 单片机而言,通过使用专用的电压监测设备和技术手段,我们可以获取到芯片中一些关键的数据和算法,从而达到解密的目的。

硬件仿真硬件仿真是一种比较高级的硬件解密方法,通过将STC单片机的芯片进行捷径连接,将芯片的内部电信号直接引出,可以使用现有的仿真器或者逻辑分析仪对该信号进行分析和还原。

通过硬件仿真的手段,解密者可以获取到STC单片机内部的代码执行过程和相关算法。

4. 总结STC单片机的解密方法有软件解密和硬件解密两种。

其中软件解密可以通过源码逆向工程和破解工具进行,需要一定的技术和设备支持;而硬件解密则涉及到电压破解和硬件仿真等方法,需要更高的技术水平和设备支持。

无论选择哪种解密方法,都需要遵守相关法律和伦理规范,以确保合法和公平。

本文仅介绍了几种STC单片机解密的常见方法,希望能为解密研究者和开发者提供一定的参考与启发。

常用的单片机加密手段(二)

常用的单片机加密手段(二)

常用的单片机加密手段(二)昨天写了一种常用的单片机加密手段,受到很多电子同行的反响,也引起来很多此类话题讨论,是我没想到的。

由于现在的公众号还没开通原创功能,没办法针对同学们的提问进行解答,而且内容也比较复杂,所以我单独再开一章来讲解关于单片机加密方面,大家普遍比较关心的问题。

第一:昨天的那种常用方法,有部分同学担心量产效率问题。

效率肯定是影响的,既要保证安全性,必然要牺牲少许效率,但是影响远远比同学们想象的影响低。

其实就是烧写两次程序,首先,写一个读取芯片ID,然后根据我们设计的算法计算出来数据,并且写入到EEPROM里数据的这样一个程序1,我们的功能程序作为程序2。

那烧写程序时,我们先烧写程序1进入单片机,固话好我们的数据后,再然后烧写程序2到单片机;或者采用流水线式工作,工作人员甲专门烧写程序1来一遍,工作人员乙烧写程序2来一遍。

程序1的功能其实非常简单,因此烧写起来肯定很快,不管如何影响到一定的效率,但是影响是非常小的。

第二:昨天的那种方法,就可以确保万无一失了么?当然不是。

这个世界上就不存在绝对安全的东西,就看付出多大的代价。

据称STM32的某些型号内部的96位的ID是烧写在system区域,而破解者找到了原厂的调试工具,可以直接烧录改变这个ID。

在利益面前,总是会有人去做这种事情,甚至说这种原厂调试工具的泄露,不排除是他们自己人做的。

那我们电子工程师的劳动成果就这么白白窃取,我们无能为力么?当然不是了。

安全和攻击一直在较量着,我们只需要多方面增强我们产品的安全性,让破解着花费的代价,超过了重新开发出来花费的代价,那就可以让破解着直接望而却步了。

我们一个产品可以采用多层加密的手段来做,这样就可以尽可能的加大破解者的难度,提高我们产品的安全性能。

------------------------------------------------------------------下面我给大家介绍几种安全加密方面的方法,由于部分方法详细讲解比较复杂,我只是简单给大家介绍一下原理,先让各位同学涨一下见识,让你知道有这么回事。

stc单片机编程实例

stc单片机编程实例

stc单片机编程实例STC单片机编程是嵌入式系统开发中常用的一种技术手段,具有广泛的应用领域。

本文将通过几个实例介绍STC单片机编程的基本原理和实践操作,帮助读者更好地理解和掌握这一技术。

一、LED灯控制实例STC单片机通常具有多个IO口,可以通过控制这些IO口的电平来实现对外部设备的控制。

我们先来介绍一个简单的实例,通过STC 单片机控制LED灯的亮灭。

我们需要连接STC单片机的IO口和LED灯。

假设我们将LED灯连接到P1口,通过给P1口设置高电平或低电平来控制LED灯的亮灭。

接下来,我们需要编写程序来控制LED灯。

STC单片机的编程语言通常是汇编语言或C语言,这里我们以C语言为例。

首先,在程序中引入STC单片机的头文件,然后定义P1口为输出口。

```c#include <reg51.h> // 引入STC单片机头文件void main(){P1 = 0x00; // 将P1口初始值设为0,灯灭while (1){P1 = 0xff; // 将P1口设为全高电平,灯亮}}```编写好程序后,我们需要使用STC单片机的开发工具将程序烧录到单片机中。

烧录完成后,将单片机连接到电源,LED灯就会开始亮起。

通过这个实例,我们可以看到STC单片机编程的基本流程:连接硬件设备、编写程序、烧录程序、运行程序。

掌握了这些基本步骤,我们就可以实现更复杂的功能。

二、温度检测与显示实例除了控制外部设备,STC单片机还可以用来感知外部环境,并将感知到的信息进行处理和显示。

接下来,我们将介绍一个温度检测与显示的实例。

我们需要连接一个温度传感器到STC单片机的一个IO口。

温度传感器会将检测到的温度值转换为电压信号,并通过IO口输出。

接下来,我们需要编写程序来读取温度传感器的检测值,并将其显示在液晶屏上。

STC单片机通常需要通过一些额外的芯片来驱动液晶屏,这里我们假设我们已经连接好了液晶屏的驱动芯片。

```c#include <reg51.h> // 引入STC单片机头文件void delay(unsigned int t){while (t--);}void main(){unsigned int temp;while (1){temp = read_temperature(); // 读取温度传感器的检测值 display_temperature(temp); // 在液晶屏上显示温度值 delay(1000); // 延时1秒}}unsigned int read_temperature(){// 读取温度传感器的检测值的具体实现}void display_temperature(unsigned int temp){// 在液晶屏上显示温度值的具体实现}```在这个实例中,我们新增了两个函数:read_temperature()用于读取温度传感器的检测值,display_temperature()用于在液晶屏上显示温度值。

单片机加密及几种方法

单片机加密及几种方法

单片机加密及几种方法单片机加密的几种方法(1)单片机加密方法:科研成果保护是每一个科研人员最关心的事情, 目的不使自己的辛苦劳动付注东流。

加密方法有软件加密, 硬件加密, 软硬件综合加密, 时间加密, 错误引导加密, 专利保护等措施。

有矛就有盾, 有盾就有矛, 有矛、有盾, 才促进矛、盾质量水平的提高。

加密只讲盾, 也希望网友提供更新的加密思路。

现先讲一个软件加密: 利用MCS-51 中A5 指令加密,( 本人85 年发现的, 名软件陷阱), 其实世界上所有资料, 包括英文资料都没有讲这条指令, 其实这是很好的加密指令。

A5 功能是二字节空操作指令。

加密方法在A5 后加一个二字节或三字节操作码, 因为所有反汇编软件都不会反汇编A5 指令, 造成正常程序反汇编乱套, 执行程序无问题。

仿制者就不能改变你的源程序, 你应在程序区写上你的大名、单位、开发时间及仿制必究的说法, 以备获得法律保护。

我曾抓到过一位“获省优产品”仿制者, 我说你们为什么把我的名字也写到你的产品中?硬件加密:8031/8052 单片机就是8031/8052 掩模产品中的不合格产品, 内部有ROM( 本人85 年发现的), 可以把8031/8052 当8751/8752 来用, 再扩展外部程序器, 然后调用8031 内部子程序。

当然你所选的同批8031 芯片的首地址及所需用的中断入口均应转到外部程序区。

(2) 单片机加密方法:各位, 我在这里公开场合讲加密, 有的只能讲思路, 有的要去实验, 要联想, 要综合应用各种方法, 甚至有的不能言传, 只能意会。

因为这里有的造矛者也在看我们如何造盾, 当然, 我们也要去看人家怎样造矛, 目前国内、外最高造矛的水平怎样。

“知已知彼, 才能百战百胜”。

硬件加密: 使他人不能读你的程序① 用高电压或激光烧断某条引脚, 使其读不到内部程序, 用高电压会造成一些器件损坏。

② 重要RAM 数据采用电池( 大电容, 街机采用的办法) 保护, 拔出芯片数据失去。

芯片UID加密方案

芯片UID加密方案

芯片UID加密方案提起唯一ID,最容易想到的就是我们每个人的身份证号,均是独一无二的,无法仿冒。

作为芯片而言,同样具有这一身份标识——UID。

利用芯片这唯一ID来实现加密,在智能产品竞争越来越激烈的情况下是十分必要的。

首先需要明确的是,没有一种加密是“绝对”可靠的,但是加密手段可以增加非法使用者的解密成本,借此来防止技术被“轻易”盗取。

本次以LPC1000的UID加密方案为例进行介绍。

LPC1000系列的加密方案通过分析得出,基于CortexM0或CortexM3内核的LPC1000系列MCU通过软件加密的方法有两种:1、使用代码读保护机制,限制用户访问片内Flash;2、通过芯片UID并添加加密算法使每片MCU内的程序具有唯一性。

代码读保护机制是通过使能系统中的不同安全级别,以便限制访问片内Flash,本次不做重点介绍。

UID加密UID是唯一标识符(unique identifier),在LPC1000系列微控制器的每一颗芯片都具有全球唯一的标识符,该标识符为128位二进制序列。

因此我们可以利用芯片UID的唯一性对程序进行加密,使每一个产品中的程序也具有唯一性,即使非法使用者获取了MCU中的程序复制到其他芯片中也是不能正常运行的,从而达到保护开发者的知识产权不被侵犯和盗用的目的。

LPC1000的UID加密方案基本思路是使用上位机软件通过编程器读取芯片的UID,经加密算法运算后生成密钥,下载程序的同时向MCU的Flash中某个地址写入密钥;MCU上电后,首先读取芯片的UID,再通过与上位机相同的加密算法运算后计算出密钥,并与之前写入Flash中的密钥比较,若相同则继续执行用户程序,否则跳入死循环或执行程序开发者指定的代码。

图1 LPC1000 UID加密方案流程图实现此方案需要准备的资源如下。

硬件资源:●LPC1766FBD100芯片;●SmartPRO 5000U-PLUS编程器;●QFP100-NXP适配座;●SmartCortex M3-1700开发板(测试用,非必需)。

stm8 唯一ID号加密方法.思路1

stm8 唯一ID号加密方法.思路1
这种方法已经很实用了.毕竟不是太专业的很难破.
void StmWriteUniqueID(unsigned char Addr)
{
unsigned char i;
FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
while
(FLASH_GetFlagStatus(FLASH_FLAG_DUL)
Flag&=~FLAG_CHECK_ID; if(StmCheckUniqueID(UniqueIDAddress)==1){IsIDCorrect=0x01;}//正确写入 else{IsIDCorrect=0x00;}//错误写入 } /////////////////////////////////////////////////////////////////////////
。。。。
第 N 种算法
}
} //解密函数
unsigned char StmCheckUniqueID(unsigned char Addr) 3.主函数里面设置一个时间最好设置长一点。半个钟或其他,让人家难跟踪
while(1)
{ 其他任务...............
///////////////////////////////////////////////////////////////////////// if((Flag&FLAG_CHECK_ID)==FLAG_CHECK_ID) {
其他任务............... }
/////////////////////////////////////////////////////////////////////////

stc单片机编程实例

stc单片机编程实例

stc单片机编程实例单片机(Single Chip Microcontroller)是一种集成了中央处理器、存储器和各种外设功能的微型计算机系统。

它具有体积小、功能强大、成本低廉等特点,广泛应用于各个领域。

在使用STC单片机进行编程时,我们可以通过实例来学习和理解其编程原理和应用方法。

本文将介绍几个STC单片机编程实例,以帮助读者深入了解和掌握该技术。

实例一:LED闪烁首先,我们来实现一个简单的LED闪烁程序。

通过控制IO口输出高低电平,从而控制LED的亮灭。

下面是代码示例:```#include <reg52.h>sbit LED = P1^0; // 将P1.0引脚定义为LED控制引脚void main(){while(1){LED = 0; // LED亮delay(); // 延时LED = 1; // LED灭delay(); // 延时}}void delay(){int i, j;for(i = 0; i < 100; i++)for(j = 0; j < 1000; j++);}```在上述代码中,我们首先通过`#include<reg52.h>`导入STC单片机的寄存器定义文件。

然后,我们使用`sbit`关键字将P1.0引脚定义为LED控制引脚。

在`main()`函数中,我们循环执行LED亮灭的操作,并通过`delay()`函数进行延时控制。

实例二:数码管显示接下来,我们将实现一个数码管显示程序。

通过控制IO口输出不同的数码管段选信号和位选信号,从而使数码管显示出指定的数字。

下面是代码示例:```#include <reg52.h>unsigned char code smgduan[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; // 数码管显示字符对应的编码sbit smg_duan = P1^0; // 数码管段选信号sbit smg_wei = P1^1; // 数码管位选信号void main(){unsigned char i;while(1){for(i = 0; i < 10; i++){smg_duan = smgduan[i]; // 设置段选信号smg_wei = 0; // 显示位选信号有效delay(); // 延时smg_wei = 1; // 显示位选信号无效}}}void delay(){int i, j;for(i = 0; i < 100; i++)for(j = 0; j < 1000; j++);}```在上述代码中,我们使用了一个长数组`smgduan`来存储数码管显示字符的编码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STC单片机唯一ID保护的例子及思路(摘自STC-ISP V6.XX【重要说明】部分)
关于ID号在大批量生产中的应用方法(较多客户的用法)(转载)
先烧一个程序进去(选择下次下载用户程序时不擦除用户EEPROM区),
读程序区的ID号(STC15系列是程序区的最后7个字
节),经用户自己的复杂的加密算法对程序区的ID号加密运算后生成一个新的数---用户自加密ID号,写入STC15系列用户
的EEPROM区的EEPROM。

再烧一个最终出厂的程序进去(选择下次下载用户程序时将用户EEPROM区一并擦除),在用户程序
区多处读程序区的ID号和用户自加密ID号比较(经用户自己的复杂的解密算法解密后),如不对应,则6个月后随机异常,
或200次开机后随机异常。

最终出厂的程序不含加密算法。

另外,在程序区的多个地方判断用户自己的程序是否被修改,如被修改,则6个月后随机异常,或200次开机后随机异常,
将不用的用户程序区用所谓的有效程序全部填满。

《应用笔记》
单片机加密保护的几种方式:
1、法律保护
由完善的法律加强对盗版的打击。

在单片机程序里添加自己的版权、LOGO标记等,作为法庭上的证据(当然要加密保存,并反跟踪,程序运行中要校验是否被修改,如是则作相应的处理)。

2、技术保护。

其实理论上所有的单片机加密都会被破解,只是成本的问题(含时间成本、金钱成本等)。

只要做到解密的成本足够大,让破解者觉得无利可
图即算成功!
通常是加密的容易而破解难。

现代芯片的加密主要有工艺上缩小线宽、将保密位深埋、读写协议保密、读取敏感区域时自动重启等等方法,让破解者不能取得内部BIN执行代码。

假如一个系统的成本为:开发+测试+投产只需5万元,而破解得到BIN 文件却要10万元,这时哪谁还去做破解的傻事??
而且如果开发者使用了关联单片机唯一ID的保护方式,哪怕破解者千辛万苦取得了BIN文件还不能直接使用,就可以大大增加了系统的保密性。

加密者使用唯一ID的加密就像PC软件使用USB加密狗加密方式和银行网银的证书加密方式,都是通过唯一的认证工具,让系统识别合法用户。

BIN文件需要反汇编来修改,即使在PC如此先进的跟踪环境下,破解PC软件的USB加密狗的办法都很困难,更况且是在单片机的调试环境?!
加密者可使用多重巧妙的加密(包括动态加密、代码CRC32校验、动态陷阱和随机报错等等),破坏反汇编器的跟踪,这时需要破解者人工进行层层跟踪,这个可是个浩大的工程,
人力金钱成本和时间成本也是很大的,往往比重新开发还高,得不偿失啊。

这绝不是学校的例题一样:将“判断指令JNZ改为JZ”这么简单!至于网上有人说利用单片机外部器件(例如:DS18B20)的唯一ID用来加
密,却忘了破解者可以使用另一小单片机模拟这个唯一ID,这样的加密方法是非常脆弱的。

一定要使用象STC单片机的内部唯一ID加密才是上策!
有人说,STC单片机早期的唯一ID存在于RAM中的7个字节,而不是光刻在硅晶片上的唯一ID,容易被破坏:只要在程序前做一个转跳去修改该RAM的ID区域为原ID可以破解。

或者直接跳过该ID的判断来解密。

哈哈,听上去不错,但实际上加密者可以在启动后其复制到变量中使用,以及在程序中有技巧地重重判断程序本身是否被修改了。

若发
现被修改则进入保护陷阱!
现在,新的STC15F系列单片机还在增加了一种在程序FLASH最后7个字节的新唯一ID!这个是不可改写的,可增加保密程度,数据更安全了。

所以好好利用单片机内部的唯一ID,是加密的利器,对保护投资者、开发者的合法权益就具有很大意义了。

3、不断优化完善系统,升级固件和产品,赢得客户。

<相关链接>
●具全球唯一ID号的加密单片机亮相IIC-China 2011
●STC单片机中全球唯一ID号的使用及编程方法(作者:杜洋,视频密
码:111811)。

相关文档
最新文档