STC 识别CPU号(吧主捣乱之5之第三次)
stc单片机吧
全部回复
仅看楼主
level 6

//此程序是检测ID号是否正确,如正确 P2是流水灯,如果错的,是全闪灯。
#include <reg51.h> //波特率2400,下载后可以按下复位
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
//#define ID_ADDR_RAM 0x1F0 //读RAM的8位,最后七位是全球 ID唯一号(89C52RC)
//#define ID_ROM_RAM 0x1FF8 //读ROM的8位,最后七位是全球 ID唯一号(89C52RC)
#define ID_ADDR_RAM 0x0F1 //读RAM的8位,最后七位是全球 ID唯一号(89C52RC)
#define ID_ROM_RAM 0x1FF8 //读ROM的8位,最后七位是全球 ID唯一号(89C52RC)
u8 idata *iptr;
u8 code *stcid;
u8 IDF;
u8 SysId[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//u8 SysId[7]={0xF0,0x02,0x01,0xF4,0x16,0x71,0x3C};
u8 code McuId[7]={0xF0,0x02,0x81,0xF4,0x16,0x31,0x3C}; //F0 02 81 F4 16 31 3C 此数组改成CPU数组
//u8 code McuId[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //F0 02 81 F4 16 31 3C
void delay(u16 i)
{
while(i--);
}
void main(void)
{
u8 i,k;
{
iptr=ID_ADDR_RAM; //从ROM区读取ID号
for (k=0; k<7; k++) //读7个字节
{ SysId[k]=*(iptr+k);
}
}
P2=0xfe;
if(SysId[0]==McuId[0] && SysId[1]==McuId[1] && SysId[2]==McuId[2] && SysId[3]==McuId[3] &&
SysId[4]==McuId[4] && SysId[5]==McuId[5] && SysId[6]==McuId[6])
{
while(1)
{
for(i=0;i<7;i++) //将led左移一位
{
P2=_crol_(P2,1);
delay(50000); //大约延时450ms
}
for(i=0;i<7;i++) //将led右移一位
{
P2=_cror_(P2,1);
delay(50000); //大约延时450ms
}
}
}
else
{
while(1)
{ // P0=SysId[2];
// P0=McuId[2];
P2=0;
delay(50000); //大约延时450ms
P2=0xFF;
delay(50000); //大约延时450ms
}
}
}
2018年04月29日 04点04分 1
level 6
程序已改,无串口功能呢了。
2018年04月29日 14点04分 2
level 1
我觉得读取id号加密不太靠谱
2018年05月29日 07点05分 3
单纯一种是不太靠谱,可以加18B20,也带全球 唯一号,还多的便宜的器件都带唯一号,多带几个就靠谱了,不是不能破解,是破解起来,比开发还高,就可以了。
2018年05月29日 09点05分
可以模拟,他只是增加破解复杂度,并不是不能破解不了。
2018年05月30日 02点05分
@咱俩玩一会儿呀 而且增加的难度不值一提,因为听说有一种东西能测量出他们之间的通讯内容。。。
2018年06月02日 01点06分
@卢以和 测出来也是加密通讯数据,你还得分析,,,不是一般人能轻松搞定的,同意上面说的,不是不能破解,破解的成本高了,时间长了,就没人愿意去破解了。
2018年06月04日 14点06分
1